Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine
Kubernetes Dashboard on hõlpsasti kasutatav tööriist jooksva klastri kohta ajakohase teabe hankimiseks ja selle haldamiseks minimaalse vaevaga. Hakkate seda veelgi rohkem hindama, kui juurdepääsu nendele võimalustele ei vaja mitte ainult administraatorid/DevOpsi insenerid, vaid ka need, kes on konsooliga vähem harjunud ja/või ei kavatse tegeleda kõigi kubectli ja kubectliga suhtlemise keerukustega. muud kommunaalteenused. See juhtus meiega: arendajad soovisid kiiret juurdepääsu Kubernetese veebiliidesele ja kuna kasutame GitLabi, tuli lahendus iseenesest.
Miks on see?
Otsesed arendajad võivad olla huvitatud sellisest tööriistast nagu K8s Dashboard silumiseks. Mõnikord soovite vaadata logisid ja ressursse ning mõnikord tappa kaustasid, skaleerida juurutusi/StatefulSets ja isegi minna konteinerikonsooli (on ka taotlusi, mille jaoks on aga veel üks võimalus - näiteks kubectl-debug).
Lisaks on juhtidel psühholoogiline hetk, mil nad tahavad klastrit vaadata - näha, et "kõik on roheline" ja seeläbi kinnitada endale, et "kõik töötab" (mis on muidugi väga suhteline... kuid see ei kuulu artikli reguleerimisalasse).
Meil on standardne CI-süsteem rakendatud GitLab: seda kasutavad ka kõik arendajad. Seetõttu oli neile juurdepääsu võimaldamiseks loogiline integreerida juhtpaneel GitLabi kontodega.
Märgin ka ära, et kasutame NGINX Ingressi. Kui töötate koos teistega sissepääsu lahendused, peate autoriseerimiseks iseseisvalt leidma annotatsioonide analoogid.
Proovin integratsiooni
Armatuurlaua paigaldamine
Tähelepanu: Kui kavatsete alltoodud samme korrata, siis – tarbetute toimingute vältimiseks – lugege esmalt järgmist alampealkirja.
Kuna kasutame seda integratsiooni paljudes installides, oleme selle installimise automatiseerinud. Selleks vajalikud allikad on avaldatud aastal spetsiaalne GitHubi hoidla. Need põhinevad veidi muudetud YAML-i konfiguratsioonidel ametlik armatuurlaua hoidla, samuti Bashi skripti kiireks juurutamiseks.
Skript installib klastris armatuurlaua ja konfigureerib selle GitLabiga integreerimiseks:
$ ./ctl.sh
Usage: ctl.sh [OPTION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Install kubernetes-dashboard to Kubernetes cluster.
Mandatory arguments:
-i, --install install into 'kube-system' namespace
-u, --upgrade upgrade existing installation, will reuse password and host names
-d, --delete remove everything, including the namespace
--gitlab-url set gitlab url with schema (https://gitlab.example.com)
--oauth2-id set OAUTH2_PROXY_CLIENT_ID from gitlab
--oauth2-secret set OAUTH2_PROXY_CLIENT_SECRET from gitlab
--dashboard-url set dashboard url without schema (dashboard.example.com)
Optional arguments:
-h, --help output this message
Enne selle kasutamist tuleb aga minna GitLabi: Admin area → Applications – ja lisada tulevasele paneelile uus rakendus. Nimetagem seda "kubernetese armatuurlauaks":
Selle lisamise tulemusena pakub GitLab räsi:
Neid kasutatakse skripti argumentidena. Selle tulemusena näeb installimine välja järgmine:
$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp 1/1 Running 0 14s
oauth2-proxy-5586ccf95c-czp2v 1/1 Running 0 14s
Varem või hiljem hakkab kõik siiski pihta autoriseerimine ei tööta kohe! Fakt on see, et kasutatud pildil (olukord teistel piltidel on sarnane) on tagasihelistamisel ümbersuunamise püüdmise protsess valesti rakendatud. See asjaolu viib selleni, et oauth kustutab küpsise, mille oauth ise meile pakub...
Probleemi lahendab plaastri abil oma oauth-pildi loomine.
diff --git a/dist.sh b/dist.sh
index a00318b..92990d4 100755
--- a/dist.sh
+++ b/dist.sh
@@ -14,25 +14,13 @@ goversion=$(go version | awk '{print $3}')
sha256sum=()
echo "... running tests"
-./test.sh
+#./test.sh
-for os in windows linux darwin; do
- echo "... building v$version for $os/$arch"
- EXT=
- if [ $os = windows ]; then
- EXT=".exe"
- fi
- BUILD=$(mktemp -d ${TMPDIR:-/tmp}/oauth2_proxy.XXXXXX)
- TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
- FILENAME="oauth2_proxy-$version.$os-$arch$EXT"
- GOOS=$os GOARCH=$arch CGO_ENABLED=0
- go build -ldflags="-s -w" -o $BUILD/$TARGET/$FILENAME || exit 1
- pushd $BUILD/$TARGET
- sha256sum+=("$(shasum -a 256 $FILENAME || exit 1)")
- cd .. && tar czvf $TARGET.tar.gz $TARGET
- mv $TARGET.tar.gz $DIR/dist
- popd
-done
+os='linux'
+echo "... building v$version for $os/$arch"
+TARGET="oauth2_proxy-$version.$os-$arch.$goversion"
+GOOS=$os GOARCH=$arch CGO_ENABLED=0
+ go build -ldflags="-s -w" -o ./dist/oauth2_proxy || exit 1
checksum_file="sha256sum.txt"
cd $DIR/dists
diff --git a/oauthproxy.go b/oauthproxy.go
index 21e5dfc..df9101a 100644
--- a/oauthproxy.go
+++ b/oauthproxy.go
@@ -381,7 +381,9 @@ func (p *OAuthProxy) SignInPage(rw http.ResponseWriter, req *http.Request, code
if redirect_url == p.SignInPath {
redirect_url = "/"
}
-
+ if req.FormValue("rd") != "" {
+ redirect_url = req.FormValue("rd")
+ }
t := struct {
ProviderName string
SignInMessage string
Nüüd saate luua pildi ja lükata see meie GitLabi. Järgmine sisse manifests/kube-dashboard-oauth2-proxy.yaml märkige soovitud pildi kasutamine (asendage see enda omaga):
image: docker.io/colemickens/oauth2_proxy:latest
Kui teil on autoriseerimisega suletud register, ärge unustage piltide tõmbamiseks lisada saladust:
On aeg minna juhtpaneelile ja leida üsna arhailine sisselogimisnupp:
Pärast sellel klõpsamist tervitab meid GitLab, kes pakub sisselogimist oma tavapärasele lehele (muidugi, kui me pole sinna varem sisse loginud):
Logime sisse GitLabi mandaatidega – ja kõik on tehtud:
Teave juhtpaneeli funktsioonide kohta
Kui olete arendaja, kes pole varem Kubernetesega töötanud või pole lihtsalt mingil põhjusel Dashboardiga varem kokku puutunud, siis illustreerin mõnda selle võimalust.
Esiteks näete, et "kõik on roheline":
Üksikasjalikumad andmed on saadaval ka kaustade kohta, nagu keskkonnamuutujad, allalaaditud pilt, käivitusargumendid ja nende olek:
Juurutustel on nähtavad olekud:
...ja muud üksikasjad:
... ja seal on ka võimalus juurutamist skaleerida:
Selle operatsiooni tulemus:
Muude kasulike funktsioonide hulgas, mida artikli alguses juba mainiti, on logide vaatamine:
... ja valitud podi konteinerikonsooli sisselogimise funktsioon:
Näiteks saate vaadata ka sõlmede piiranguid/taotlusi:
Muidugi pole need kõik paneeli võimalused, kuid loodan, et saate üldise idee.
Integratsiooni ja armatuurlaua puudused
Kirjeldatud integratsioonis puudub juurdepääsu kontroll. Selle abil saavad kõik GitLabile juurdepääsu omavad kasutajad juurdepääsu armatuurlauale. Neil on armatuurlaual endal sama juurdepääs, mis vastab armatuurlaua enda õigustele, mis on määratletud RBAC-is. Ilmselgelt ei sobi see kõigile, kuid meie puhul osutus see piisavaks.
Armatuurlaua enda märgatavate puuduste hulgas märgin järgmist:
init-mahuti konsooli on võimatu pääseda;
Deployments ja StatefulSets on võimatu redigeerida, kuigi seda saab ClusterRole'is parandada;
Armatuurlaua ühilduvus Kubernetese uusimate versioonidega ja projekti tulevik tekitab küsimusi.
Viimane probleem väärib erilist tähelepanu.
Armatuurlaua olek ja alternatiivid
Armatuurlaua ühilduvustabel Kubernetese väljaannetega, mis on esitatud projekti uusimas versioonis (v1.10.1), pole väga rahul:
Sellest hoolimata on olemas (juba jaanuaris vastu võetud) PR # 3476, mis teatab K8s 1.13 toetamisest. Lisaks võib projektiprobleemide hulgast leida viiteid K8s 1.14 paneeliga töötavatele kasutajatele. Lõpuks kohustab projekti koodibaasi ei peatu. Nii et (vähemalt!) pole projekti tegelik seis nii hull, kui ametlikust ühilduvustabelist esmapilgul paista võib.
Lõpuks on armatuurlauale alternatiive. Nende hulgas:
K8Dash — noor liides (esimesed kohustused pärinevad selle aasta märtsist), mis pakub juba häid funktsioone, nagu näiteks klastri hetkeseisu visuaalne esitus ja selle objektide haldamine. Positsioneeritud "reaalajas liidesena", kuna värskendab kuvatavaid andmeid automaatselt, ilma et peaksite brauseris lehte värskendama.
OpenShift konsool - Red Hat OpenShift veebiliides, mis aga toob teie klastrisse projekti muud arendused, mis ei sobi kõigile.
Kubernaator on huvitav projekt, mis on loodud madalama taseme (kui armatuurlaual) liidesena, mis võimaldab vaadata kõiki klastri objekte. Siiski tundub, et selle areng on peatunud.
Põhjanael - just teisel päeval teatas projekt, mis ühendab paneeli funktsioonid (näitab klastri hetkeseisu, kuid ei halda selle objekte) ja automaatset "parimate praktikate valideerimist" (kontrollib klastrit selles töötavate juurutuste konfiguratsioonide õigsuse osas).
Järelduste asemel
Armatuurlaud on meie pakutavate Kubernetese klastrite standardtööriist. Selle integreerimine GitLabiga on muutunud ka meie vaikeinstalli osaks, kuna paljud arendajad on põnevil selle paneeli võimalustest.
Kubernetes Dashboardil on perioodiliselt alternatiive avatud lähtekoodiga kogukonnast (ja me kaalume neid hea meelega), kuid praeguses etapis jääme selle lahenduse juurde.