Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Kubernetes Dashboard huwa għodda faċli biex tużah biex tikseb informazzjoni aġġornata dwar il-grupp li qed jaħdem tiegħek u timmaniġġjaha bi sforz minimu. Tibda tapprezzah saħansitra aktar meta l-aċċess għal dawn il-kapaċitajiet huwa meħtieġ mhux biss minn amministraturi/inġiniera DevOps, iżda wkoll minn dawk li huma inqas imdorrijin mal-console u/jew m'għandhomx il-ħsieb li jittrattaw l-intricacies kollha tal-interazzjoni ma 'kubectl u utilitajiet oħra. Dan ġara magħna: l-iżviluppaturi riedu aċċess rapidu għall-interface tal-web Kubernetes, u peress li nużaw GitLab, is-soluzzjoni ġiet b'mod naturali.

Għaliex dan?

L-iżviluppaturi diretti jistgħu jkunu interessati f'għodda bħal K8s Dashboard għal ħidmiet ta' debugging. Xi drabi trid tara zkuk u riżorsi, u xi kultant toqtol il-miżwed, iskala Deployments/StatefulSets, u anke tmur fil-console tal-kontejners (hemm ukoll talbiet li għalihom, madankollu, hemm mod ieħor - pereżempju, permezz kubectl-debug).

Barra minn hekk, hemm mument psikoloġiku għall-maniġers meta jridu jħarsu lejn il-cluster - biex jaraw li "kollox huwa aħdar", u b'hekk iserrħu rashom li "kollox qed jaħdem" (li, ovvjament, huwa relattiv ħafna... iżda dan huwa lil hinn mill-ambitu tal-artikolu).

Bħala sistema standard CI għandna applikati GitLab: l-iżviluppaturi kollha jużawha wkoll. Għalhekk, biex jipprovdulhom aċċess, kien loġiku li jintegraw Dashboard mal-kontijiet GitLab.

Ser ninnota wkoll li nużaw NGINX Ingress. Jekk taħdem ma 'oħrajn soluzzjonijiet tad-dħul, ser ikollok bżonn issib b'mod indipendenti analogi ta' annotazzjonijiet għall-awtorizzazzjoni.

Nippruvaw l-integrazzjoni

Installazzjoni tad-dashboard

Attenzjoni: Jekk se tirrepeti l-passi hawn taħt, imbagħad - biex tevita operazzjonijiet bla bżonn - l-ewwel aqra għas-subintestatura li jmiss.

Peress li nużaw din l-integrazzjoni f'ħafna installazzjonijiet, awtomatizzajna l-installazzjoni tagħha. Is-sorsi meħtieġa għal dan huma ppubblikati fi repożitorju speċjali ta’ GitHub. Huma bbażati fuq konfigurazzjonijiet YAML kemmxejn modifikati minn repożitorju uffiċjali tad-Dashboard, kif ukoll skript Bash għal skjerament malajr.

L-iskript jinstalla Dashboard fil-cluster u jikkonfigurah għall-integrazzjoni ma' GitLab:

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

Madankollu, qabel ma tużah, trid tmur fuq GitLab: Admin area → Applikazzjonijiet - u żid applikazzjoni ġdida għall-panel futur. Ejja nsejħulha “kubernetes dashboard”:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Bħala riżultat taż-żieda tiegħu, GitLab se jipprovdi l-hashes:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Huma dawk li jintużaw bħala argumenti għall-iskrittura. Bħala riżultat, l-installazzjoni tidher bħal din:

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

Wara dan, ejja niċċekkjaw li kollox beda:

$ 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

Illum jew għada kollox se jibda, madankollu awtorizzazzjoni mhux se taħdem immedjatament! Il-fatt hu li fl-immaġni użata (is-sitwazzjoni f'immaġini oħra hija simili) il-proċess ta 'qbid ta' redirect fis-callback huwa implimentat b'mod żbaljat. Din iċ-ċirkustanza twassal għall-fatt li oauth iħassar il-cookie li l-oauth innifsu jipprovdilna...

Il-problema tissolva billi tibni l-immaġni tal-awth tiegħek b'garża.

Garża oauth u installa mill-ġdid

Biex tagħmel dan, se nużaw id-Dockerfile li ġej:

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

U hawn kif tidher il-garża rd.patch innifsu

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

Issa tista 'tibni l-immaġni u timbottaha fil-GitLab tagħna. Li jmiss fi manifests/kube-dashboard-oauth2-proxy.yaml indika l-użu ta 'l-immaġini mixtieqa (ibiddilha ma' tiegħek):

 image: docker.io/colemickens/oauth2_proxy:latest

Jekk għandek reġistru li huwa magħluq b'awtorizzazzjoni, tinsiex iżżid l-użu ta 'sigriet għall-immaġini tal-ġibda:

      imagePullSecrets:
     - name: gitlab-registry

... u żid is-sigriet innifsu għar-reġistru:

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

Il-qarrej attent se jara li s-sekwenza twila ta 'hawn fuq hija base64 mill-konfigurazzjoni:

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

Din hija d-dejta tal-utent f'GitLab, il-kodiċi Kubernetes se jiġbed l-immaġni mir-reġistru.

Wara li jsir kollox, tista 'tneħħi l-installazzjoni tad-Dashboard kurrenti (mhux taħdem sew) bil-kmand:

$ ./ctl.sh -d

... u installa kollox mill-ġdid:

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

Wasal iż-żmien li tmur fid-Dashboard u ssib buttuna ta' login pjuttost arkajka:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Wara li tikklikkja fuqha, GitLab isellemna, u joffri li jidħol fil-paġna tas-soltu tiegħu (naturalment, jekk qabel ma dħilniex hemm):

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Aħna nilloggjaw bil-kredenzjali tal-GitLab - u kollox isir:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Dwar il-karatteristiċi tad-Dashboard

Jekk int żviluppatur li ma ħadimx ma' Kubernetes qabel, jew sempliċement għal xi raġuni ma ltaqax ma' Dashboard qabel, se nispjega xi wħud mill-kapaċitajiet tiegħu.

L-ewwelnett, tista 'tara li "kollox huwa aħdar":

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Dejta aktar dettaljata hija wkoll disponibbli għall-imżiewed, bħal varjabbli ambjentali, immaġni mniżżla, argumenti tat-tnedija, u l-istat tagħhom:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

L-iskjeramenti għandhom status viżibbli:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

...u dettalji oħra:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

... u hemm ukoll il-ħila li tiskala l-iskjerament:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Ir-riżultat ta 'din l-operazzjoni:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Fost karatteristiċi utli oħra li diġà ssemmew fil-bidu tal-artiklu hemm il-wiri ta' zkuk:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

... u l-funzjoni biex tidħol fil-console tal-kontenitur tal-pod magħżul:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Pereżempju, tista' wkoll tħares lejn il-limiti/talbiet fuq in-nodi:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Naturalment, dawn mhumiex il-kapaċitajiet kollha tal-panel, imma nittama li tieħu l-idea ġenerali.

Żvantaġġi ta 'integrazzjoni u Dashboard

Fl-integrazzjoni deskritta m'hemm l-ebda kontroll tal-aċċess. Biha, l-utenti kollha bi kwalunkwe aċċess għal GitLab jiksbu aċċess għad-Dashboard. Huma għandhom l-istess aċċess fid-Dashboard innifsu, li jikkorrispondi għad-drittijiet tad-Dashboard innifsu, li huma definiti fl-RBAC. Ovvjament, dan mhux adattat għal kulħadd, iżda għall-każ tagħna rriżulta li kien biżżejjed.

Fost l-iżvantaġġi notevoli fid-Dashboard innifsu, ninnota dan li ġej:

  • huwa impossibbli li tidħol fil-console tal-kontenitur init;
  • huwa impossibbli li jiġu editjati Deployments u StatefulSets, għalkemm dan jista 'jiġi ffissat fi ClusterRole;
  • Il-kompatibilità tad-Dashboard mal-aħħar verżjonijiet ta' Kubernetes u l-futur tal-proġett iqajmu mistoqsijiet.

L-aħħar problema jistħoqqilha attenzjoni speċjali.

Status tad-dashboard u alternattivi

Tabella ta' kompatibilità tad-dashboard mar-rilaxxi ta' Kubernetes, ippreżentata fl-aħħar verżjoni tal-proġett (v1.10.1), mhux kuntent ħafna:

Integrazzjoni ta' Kubernetes Dashboard u Utenti GitLab

Minkejja dan, hemm (diġà adottat f'Jannar) PR #3476, li tħabbar appoġġ għal K8s 1.13. Barra minn hekk, fost il-kwistjonijiet tal-proġett tista 'ssib referenzi għal utenti li jaħdmu mal-panel f'K8s 1.14. Fl-aħħarnett, jimpenja fil-bażi tal-kodiċi tal-proġett ma tieqafx. Allura (mill-inqas!) L-istatus attwali tal-proġett mhuwiex ħażin daqs kemm jista 'jidher l-ewwel mit-tabella ta' kompatibilità uffiċjali.

Fl-aħħarnett, hemm alternattivi għal Dashboard. Fosthom:

  1. K8Dash — interface żagħżugħa (l-ewwel impenji jmorru lura għal Marzu ta’ din is-sena), li diġà joffri karatteristiċi tajbin, bħal rappreżentazzjoni viżiva tal-istatus attwali tal-cluster u l-ġestjoni tal-oġġetti tiegħu. Pożizzjonat bħala "interface f'ħin reali", għaliex jaġġorna awtomatikament id-dejta murija mingħajr ma teħtieġ li jġedded il-paġna fil-browser.
  2. OpenShift Console - interface tal-web minn Red Hat OpenShift, li, madankollu, se ġġib żviluppi oħra tal-proġett fil-cluster tiegħek, li mhux adattat għal kulħadd.
  3. Kubernator huwa proġett interessanti, maħluq bħala interface ta 'livell aktar baxx (minn Dashboard) bil-kapaċità li tara l-oġġetti kollha tal-cluster. Madankollu, jidher li l-iżvilupp tiegħu waqaf.
  4. Polaris - biss il-ġurnata l-oħra ħabbar proġett li jgħaqqad il-funzjonijiet ta 'panel (juri l-istat attwali tal-cluster, iżda ma jimmaniġġjax l-oġġetti tiegħu) u awtomatika "validazzjoni tal-aħjar prattiki" (jiċċekkja l-cluster għall-korrettezza tal-konfigurazzjonijiet ta' Deployments li qed jaħdmu fih).

Minflok il-konklużjonijiet

Dashboard hija għodda standard għall-clusters ta' Kubernetes li naqdu. L-integrazzjoni tagħha ma 'GitLab saret ukoll parti mill-installazzjoni default tagħna, peress li ħafna żviluppaturi huma eċċitati dwar il-kapaċitajiet li għandhom ma' dan il-panel.

Kubernetes Dashboard perjodikament għandu alternattivi mill-komunità Open Source (u aħna kuntenti li nqisuhom), iżda f'dan l-istadju nibqgħu b'din is-soluzzjoni.

PS

Aqra wkoll fuq il-blog tagħna:

Sors: www.habr.com

Żid kumment