Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

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":

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Selle lisamise tulemusena pakub GitLab räsi:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Neid kasutatakse skripti argumentidena. Selle tulemusena näeb installimine välja järgmine:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

Pärast seda kontrollime, kas kõik algas:

$ 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.

Paigutage oauth ja installige uuesti

Selleks kasutame järgmist Dockerfile'i:

FROM golang:1.9-alpine3.7
WORKDIR /go/src/github.com/bitly/oauth2_proxy

RUN apk --update add make git build-base curl bash ca-certificates wget 
&& update-ca-certificates 
&& curl -sSO https://raw.githubusercontent.com/pote/gpm/v1.4.0/bin/gpm 
&& chmod +x gpm 
&& mv gpm /usr/local/bin
RUN git clone https://github.com/bitly/oauth2_proxy.git . 
&& git checkout bfda078caa55958cc37dcba39e57fc37f6a3c842  
ADD rd.patch .
RUN patch -p1 < rd.patch 
&& ./dist.sh

FROM alpine:3.7
RUN apk --update add curl bash  ca-certificates && update-ca-certificates
COPY --from=0 /go/src/github.com/bitly/oauth2_proxy/dist/ /bin/

EXPOSE 8080 4180
ENTRYPOINT [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]

Ja rd.patchi plaaster ise näeb välja selline

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:

      imagePullSecrets:
     - name: gitlab-registry

... ja lisage registri jaoks saladus ise:

---
apiVersion: v1
data:
 .dockercfg: eyJyZWdpc3RyeS5jb21wYW55LmNvbSI6IHsKICJ1c2VybmFtZSI6ICJvYXV0aDIiLAogInBhc3N3b3JkIjogIlBBU1NXT1JEIiwKICJhdXRoIjogIkFVVEhfVE9LRU4iLAogImVtYWlsIjogIm1haWxAY29tcGFueS5jb20iCn0KfQoK
=
kind: Secret
metadata:
 annotations:
 name: gitlab-registry
 namespace: kube-system
type: kubernetes.io/dockercfg

Tähelepanelik lugeja näeb, et ülaltoodud pikk string on konfiguratsioonist base64:

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "[email protected]"
}
}

Need on GitLabi kasutajaandmed, Kubernetese kood tõmbab pildi registrist.

Kui kõik on tehtud, saate praeguse (ei tööta korralikult) armatuurlaua installi eemaldada käsuga:

$ ./ctl.sh -d

... ja installige kõik uuesti:

$ ./ctl.sh -i --gitlab-url https://gitlab.example.com --oauth2-id 6a52769e… --oauth2-secret 6b79168f… --dashboard-url dashboard.example.com

On aeg minna juhtpaneelile ja leida üsna arhailine sisselogimisnupp:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Pärast sellel klõpsamist tervitab meid GitLab, kes pakub sisselogimist oma tavapärasele lehele (muidugi, kui me pole sinna varem sisse loginud):

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Logime sisse GitLabi mandaatidega – ja kõik on tehtud:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

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":

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Üksikasjalikumad andmed on saadaval ka kaustade kohta, nagu keskkonnamuutujad, allalaaditud pilt, käivitusargumendid ja nende olek:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Juurutustel on nähtavad olekud:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

...ja muud üksikasjad:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

... ja seal on ka võimalus juurutamist skaleerida:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Selle operatsiooni tulemus:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Muude kasulike funktsioonide hulgas, mida artikli alguses juba mainiti, on logide vaatamine:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

... ja valitud podi konteinerikonsooli sisselogimise funktsioon:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

Näiteks saate vaadata ka sõlmede piiranguid/taotlusi:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

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:

Kubernetese armatuurlaua ja GitLabi kasutajate integreerimine

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:

  1. 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.
  2. OpenShift konsool - Red Hat OpenShift veebiliides, mis aga toob teie klastrisse projekti muud arendused, mis ei sobi kõigile.
  3. 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.
  4. 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.

PS

Loe ka meie blogist:

Allikas: www.habr.com

Lisa kommentaar