Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Kubernetes Dashboard — njĂ« mjet i lehtĂ« pĂ«r t'u pĂ«rdorur pĂ«r tĂ« marrĂ« informacionet e fundit mbi klasterin e punĂ«s dhe pĂ«r menaxhim minimal. E vlerĂ«soni edhe mĂ« shumĂ« kur kĂ«to mundĂ«si janĂ« tĂ« nevojshme jo vetĂ«m pĂ«r administratorĂ«t/inxhinierĂ«t DevOps, por edhe pĂ«r ata qĂ« nuk janĂ« shumĂ« tĂ« familjarizuar me konsolĂ«n dhe/ose nuk kanĂ« ndĂ«rmend tĂ« merret me tĂ« gjitha nuancat e bashkĂ«punimit me kubectl dhe utilitetet e tjera. KĂ«shtu ndodhi edhe me ne: zhvilluesit dĂ«shironin njĂ« qasje tĂ« shpejtĂ« nĂ« ndĂ«rfaqen web tĂ« Kubernetes, dhe pasi ne pĂ«rdorim GitLab, zgjidhja erdhi natyrshĂ«m.

Pse kjo?

Zhvilluesit e drejtpĂ«rdrejtĂ« mund tĂ« jenĂ« tĂ« interesuar pĂ«r njĂ« mjet si K8s Dashboard pĂ«r detyra debugging. NdonjĂ«herĂ« dĂ«shirohet tĂ« shihni logĂ«t dhe burimet, dhe ndonjĂ«herĂ« tĂ« vrisni pod-Ă«t, tĂ« shkallĂ«zoni Deployments/StatefulSets dhe madje tĂ« hyni nĂ« konsolĂ«n e kontejnerĂ«ve (ndodhin edhe kĂ«rkesa tĂ« tilla, pĂ«r zgjidhjen e tĂ« cilave, megjithatĂ«, ka njĂ« mĂ«nyrĂ« tjetĂ«r — pĂ«r shembull, pĂ«rmes) kubectl-debug).

PĂ«rveç kĂ«saj, ka edhe njĂ« moment psikologjik pĂ«r drejtuesit kur duan tĂ« shohin klasterin — tĂ« shohin se "gjithçka Ă«shtĂ« e gjelbĂ«r" dhe kĂ«shtu tĂ« qetĂ«sohen se "gjithçka funksionon" (çfarĂ«, sigurisht, Ă«shtĂ« shumĂ« relative
 por kjo tashmĂ« del jashtĂ« kufijve tĂ« artikullit).

Si një sistem CI standard, ne përdoret GitLab: e përdorin të gjithë zhvilluesit. Prandaj, për t'i dhënë atyre akses, ishte logjike të bëjmë integrimin e Dashboard me llogaritë në GitLab.

Do të theksoj gjithashtu se ne përdorim NGINX Ingress. Nëse po punoni me të tjera zgjidhje ingress, do të kenë nevojë të gjejnë vetë ekuivalente të anotacioneve për autorizim.

Provojmë integrimin

Instalimi i Dashboard

Kujdes: NĂ«se po planifikoni tĂ« pĂ«rsĂ«risni hapat e pĂ«rshkruar mĂ« poshtĂ«, atĂ«herĂ« — pĂ«r tĂ« shmangur operacione tĂ« panevojshme — lexoni fillimisht deri nĂ« titullin tjetĂ«r.

Duke qenë se kjo integrim përdoret nga ne në shumë instalime, ne e kemi automatizuar instalimin e saj. Burimet që do të nevojiten për këtë janë publikuar në një depo të veçantë në GitHub. Në thelb, ato janë konfigurime YAML të modifikuara pak nga depoja zyrtare e Dashboard, si dhe një skript Bash për shpërndarje të shpejtë.

Skripti instalon Dashboard në klaster dhe e konfiguroni atë për integrim me GitLab:

$ ./ctl.sh  
Përdorimi: ctl.sh [OPCION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Instaloni kubernetes-dashboard në klasterin Kubernetes.
Argumentet e detyrueshme:
 -i, --instalo                instaloni në hapësirën 'kube-system'
 -u, --përmirëso                përmirësoni instalimin ekzistues, do të rishfrytëzojë fjalëkalimin dhe emrat e hostëve
 -d, --fshi                 hiqni gjithçka, përfshirë hapësirën
     --gitlab-url             vendosni url-në e gitlab me skemë (https://gitlab.example.com)
     --oauth2-id              vendosni OAUTH2_PROXY_CLIENT_ID nga gitlab
     --oauth2-secret          vendosni OAUTH2_PROXY_CLIENT_SECRET nga gitlab
     --dashboard-url          vendosni url-në e dashboard pa skemë (dashboard.example.com)
Argumentet opsionale:
 -h, --ndihmë                   shkruani këtë mesazh

MegjithatĂ«, para se ta pĂ«rdorni, Ă«shtĂ« e nevojshme tĂ« hyni nĂ« GitLab: Zona e AdministratĂ«s → Aplikacionet — dhe tĂ« shtoni njĂ« aplikacion tĂ« ri pĂ«r panelin e ardhshĂ«m. Le tĂ« e quajmĂ« "kubernetes dashboard":

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Si rezultat i shtimit të tij, GitLab do të ofrojë hashes:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Ato përdoren si argumente në skript. Si rezultat, instalimi duket si më poshtë:

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

Pas kësaj, le të kontrollojmë nëse gjithçka u aktivizua:

$ kubectl -n kube-system get pod | egrep '(dash|oauth)'
kubernetes-dashboard-76b55bc9f8-xpncp   1/1       Duke punuar   0          14s
oauth2-proxy-5586ccf95c-czp2v           1/1       Duke punuar   0          14s

Para ose vonĂ«, gjithçka do tĂ« aktivizohet, megjithatĂ« autorizimi nuk do tĂ« funksionojĂ« menjĂ«herĂ«! Kjo Ă«shtĂ« pĂ«r shkak se nĂ« imazhin e pĂ«rdorur (situata nĂ« imazhe tĂ« tjera Ă«shtĂ« e ngjashme) procesi i kapjes sĂ« ridirections nĂ« callback Ă«shtĂ« implementuar gabim. Kjo shkakton qĂ« oauth tĂ« fshijĂ« cookie-n qĂ« vetĂ« (oauth) na ofron


Problemi zgjidhet duke ndërtuar imazhin tuaj oauth me një patch.

Patch për oauth dhe rinovimin e instalimit

Për këtë, do të përdorim Dockerfile-në e mëposhtme:

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/

EKSPOZONI 8080 4180
PËRFUNDONI [ "/bin/oauth2_proxy" ]
CMD [ "--upstream=http://0.0.0.0:8080/", "--http-address=0.0.0.0:4180" ]

Ja si duket patch-i vetë rd.patch

diferenca --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 "... po kryer testet"
-./test.sh
+#./test.sh
 
-for os in windows linux darwin; do
-    echo "... duke ndërtuar v$version për $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 "... duke ndërtuar v$version për $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
diferenca --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

Tani mund të realizojmë ndërtimin e imazhit dhe të 'push' më pas në GitLab-in tonë. Më pas, në manifests/kube-dashboard-oauth2-proxy.yaml do të specifikojmë përdorimin e imazhit të nevojshëm (zëvendësoni atë me tuajin):

 image: docker.io/colemickens/oauth2_proxy:latest

NĂ«se keni njĂ« regjistrim tĂ« mbyllur me autorizim — mos harroni tĂ« shtoni pĂ«rdorimin e sekreteve pĂ«r tĂ« shkarkuar imazhet:

      imagePullSecrets:
     - name: gitlab-registry


 dhe shtoni vetë sekretin për regjistrin:

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

Lexuesi i kujdesshëm do të vërë re se rruga e gjatë e dhënë më sipër është base64 e konfigurimit:

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "mail@company.com"
}
}

Këto janë të dhëna për përdoruesin në GitLab, me kodin me të cilin Kubernetes do të shkarkojë imazhin nga regjistri.

Pasi të jetë bërë gjithçka, mund të fshini instalimin aktual (të papërshtatshëm) të Dashboard me komandën:

$ ./ctl.sh -d


 dhe tĂ« instaloni gjithçka nga e para:

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

Ka ardhur koha të hyjmë në Dashboard dhe të gjejmë butonin e zakonshëm për autorizimin:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Pas klikuar mbi të, do të takohemi me GitLab, i cili na ofron të identifikohemi në faqen e tij të zakonshme (sigurisht, nëse nuk jemi autorizuar më parë atje):

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Identifikohemi me tĂ« dhĂ«nat e identifikimit tĂ« GitLab — dhe gjithçka u realizua:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Rreth mundësive të Dashboard

Nëse jeni një zhvillues që nuk keni punuar më parë me Kubernetes, ose thjesht për ndonjë arsye nuk keni pasur kontakt me Dashboard, do ilustroj disa nga mundësitë e tij.

Së pari, mund të shihni se "gjithçka është e gjelbër":

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Përpodet janë të disponueshme edhe të dhëna më të detajuara, të tilla si variablat e mjedisit, imazhi i shkarkuar, argumentet e fillimit, gjendja e tyre:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Për ndërtimet duken statuset:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 dhe detaje të tjera:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 si dhe mundësia për të përmasuar ndërtimin:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Rezultati i kësaj operacione:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Mes mundësive të tjera të dobishme, të përmendura më herët, ka edhe shikimin e logëve:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 dhe funksioni për të hyrë në konsolën e kontejnerëve të pod-it të zgjedhur:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Ndërkohë, mund të shihni gjithashtu dhe limitet/kerkesat në nyjet:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Sigurisht, këto nuk janë të gjitha mundësitë e panelit, por shpresoj që një paraqitje e përgjithshme është krijuar.

Dështimet e integrimit dhe Dashboard

NĂ« integrimin e pĂ«rshkruar nuk ka ndarje aksesit. Me tĂ«, tĂ« gjithĂ« pĂ«rdoruesit qĂ« kanĂ« ndonjĂ« akses nĂ« GitLab, kanĂ« qasje nĂ« Dashboard. Qasja nĂ« vetĂ« Dashboard Ă«shtĂ« e njĂ«jtĂ« pĂ«r ta, e pĂ«rshtatshme sipas tĂ« drejtave tĂ« vetĂ« Dashboard, tĂ« cilat definohen nĂ« RBAC. ËshtĂ« e qartĂ« se kjo nuk do tĂ« pĂ«rshtatet me tĂ« gjithĂ«, por pĂ«r rastin tonĂ« u duk e mjaftueshme.

Nga të metat e dukshme në vetë panelin Dashboard, do të përmendja të following:

  • nuk ka mundĂ«si pĂ«r tĂ« hyrĂ« nĂ« konsolĂ«n e kontejnerit init;
  • nuk Ă«shtĂ« e mundur tĂ« redaktohen Deployments dhe StatefulSets, megjithĂ«se kjo Ă«shtĂ« e korrigjueshme nĂ« ClusterRole;
  • pĂ«rputhshmĂ«ria e Dashboard me versionet e fundit tĂ« Kubernetes dhe e ardhmja e projektit ngjall pyetje.

Problemi i fundit meriton vëmendje të veçantë.

Statusi dhe alternativat e Dashboard

Tabelat e përputhshmërisë së Dashboard me lëshimet e Kubernetes, të paraqitura në versionin më të fundit të projektit (v1.10.1), nuk është shumë inkurajues:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Megjithatë, ekziston (e pranuar tashmë në janar) PR #3476, e cila shpall mbështetje për K8s 1.13. Për më tepër, midis çështjeve të projektit mund të gjeni përmendje të përdoruesve që punojnë me panelin në K8s 1.14. Në fund, komitetet në bazën e kodit të projektit nuk ndalen. Prandaj, (të paktën!) statusi aktual i projektit nuk është aq i keq sa mund të duket më parë nga tabela zyrtare e përputhshmërisë.

SĂ« fundi, Dashboard ka alternativa. Midis tyre:

  1. K8Dash — njĂ« ndĂ«rfaqe e re (komitetet e para datojnĂ« nga marsi i kĂ«tij viti), tashmĂ« ofron mundĂ«si tĂ« mira, siç Ă«shtĂ« paraqitja vizuale e statusit aktual tĂ« klashtit dhe menaxhimi i objekteve tĂ« tij. Pozicionohet si "ndĂ«rfaqe nĂ« kohĂ« reale", pasi pĂ«rditĂ«son automatikisht tĂ« dhĂ«nat e display-it, pa kĂ«rkuar rifreskimin e faqes nĂ« shfletues.
  2. OpenShift Console — njĂ« ndĂ«rfaqe web nga Red Hat OpenShift, e cila, megjithatĂ«, do tĂ« sjellĂ« nĂ« klashtin tuaj dhe zhvillime tĂ« tjera nga projekti, qĂ« nuk i pĂ«rshtaten çdo pĂ«rdoruesi.
  3. Kubernator — njĂ« projekt interesant, i krijuar si njĂ« ndĂ«rfaqe mĂ« e ulĂ«t (se Dashboard) me mundĂ«sinĂ« pĂ«r tĂ« parĂ« tĂ« gjitha objektet e klashtit. MegjithatĂ«, duket se zhvillimi i tij Ă«shtĂ« ndalur.
  4. Polaris — dosja e sapoannoncuar projekt, i cili bashkon funksionet e panelit (tregon gjendjen aktuale tĂ« klashtit, por nuk menaxhon objektet e tij) dhe "validimin automatik tĂ« praktikave mĂ« tĂ« mira" (kontrollon klashtin pĂ«r saktĂ«sinĂ« e konfigurimeve tĂ« deployeve tĂ« nisura nĂ« tĂ«). projekti qĂ« kombinon funksionet e njĂ« paneli (tregon gjendjen aktuale tĂ« klasterit, por nuk menaxhon objektet e tij) dhe "validimin automatik tĂ« praktikave mĂ« tĂ« mira" (kontrollon klasterin pĂ«r saktĂ«sinĂ« e konfigurimeve tĂ« vĂ«na nĂ« tĂ« Deployments).

Në vend të rezultateve

Dashboard — instrumenti standard pĂ«r klashtet Kubernetes, tĂ« cilat ne i shĂ«rbejmĂ«. Integrimi i tij me GitLab gjithashtu Ă«shtĂ« bĂ«rĂ« pjesĂ« e "instalimit tonĂ« tĂ« paracaktuar", pasi shumĂ« zhvillues janĂ« tĂ« gĂ«zuar pĂ«r mundĂ«sitĂ« qĂ« kanĂ« me kĂ«tĂ« panel.

Në Kubernetes Dashboard herë pas here dalin alternativa nga komuniteti Open Source (dhe ne jemi të gëzuar t'i shqyrtojmë ato), megjithatë në këtë fazë mbetemi me këtë zgjidhje.

P.S.

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS đŸ”„ Bleni hostim tĂ« besueshĂ«m pĂ«r faqe me mbrojtje nga DDoS, serverĂ« VPS VDS | ProHoster