Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Kubernetes Dashboard — njĂ« mjete e lehtĂ« pĂ«r pĂ«rdorim pĂ«r tĂ« marrĂ« informacion tĂ« pĂ«rditĂ«suar mbi klasterin nĂ« funksion dhe menaxhimin minimal tĂ« tij. E vlerĂ«son akoma mĂ« shumĂ« kur qasja nĂ« kĂ«to mundĂ«si i nevojitet jo vetĂ«m administratorĂ«ve/ inxhinierĂ«ve DevOps, por edhe atyre qĂ« nuk janĂ« zakonisht tĂ« njohur me konsolĂ«n dhe/ose nuk kanĂ« ndĂ«rmend tĂ« kuptojnĂ« tĂ« gjitha hollĂ«sitĂ« e bashkĂ«veprimit me kubectl dhe utilitetet e tjera. KĂ«shtu ndodhi edhe me ne: zhvilluesve iu dĂ«shira pĂ«r qasje tĂ« shpejtĂ« nĂ« ndĂ«rfaqen e internetit tĂ« Kubernetes, dhe duke qenĂ« se ne pĂ«rdorim GitLab, zgjidhja ishte e pashmangshme.

Pse është kjo?

Zhvilluesit e drejtpĂ«rdrejtĂ« mund tĂ« jenĂ« tĂ« interesuar nĂ« njĂ« mjet si K8s Dashboard pĂ«r detyra debugimi. NdonjĂ«herĂ« dĂ«shirohet tĂ« shikohen logjet dhe resurset, dhe pĂ«r herĂ« tjetĂ«r pĂ«r tĂ« vrarĂ« pod’ët, tĂ« shumfishojnĂ« Deployments/ StatefulSets dhe madje tĂ« hyjnĂ« nĂ« konsolat e konteinerĂ«ve (ndodhin edhe kĂ«rkesa tĂ« tilla, pĂ«r zgjidhjen e tĂ« cilave, megjithatĂ«, ka njĂ« rrugĂ« tjetĂ«r — pĂ«r shembull, pĂ«rmes kubectl-debug).

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

Si një sistem standard CI, ne kemi aplikohet GitLab: të cilin e përdorin të gjithë zhvilluesit. Prandaj, për të ofruar qasje për ta, ishte logjike të bëjmë integrimin e Dashboard-it me llogaritë në GitLab.

Gjithashtu, dua të theksoj se ne përdorim NGINX Ingress. Nëse punoni me zgjidhje të tjera ingress,, do të duhet të gjeni vetë analoge të anotacioneve për autorizimin.

Provoni integrimin

Instalimi i Dashboard-it

Kujdes: NĂ«se planifikoni tĂ« pĂ«rsĂ«risni hapat e pĂ«rshkruar mĂ« poshtĂ«, atĂ«herĂ« — pĂ«r tĂ« shmangur operacione tĂ« tepĂ«rta — sĂ« pari lexoni deri te nĂ«nkapitulli tjetĂ«r.

Duke qenĂ« se kjo integrim pĂ«rdoret nga ne nĂ« shumĂ« instalime, ne e automatizuam instalimin e tij. Burimet, tĂ« cilat do t'ju nevojiten pĂ«r kĂ«tĂ«, janĂ« publikuar nĂ« njĂ« repository tĂ« veçantĂ« nĂ« GitHub.. NĂ« bazĂ« tĂ« tyre — konfiguracione YAML tĂ« modifikuara pak nga repository zyrtar i Dashboard-it,si dhe njĂ« skript Bash pĂ«r vendosjen e shpejtĂ«.

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

$ .\/ctl.sh  
Usage: ctl.sh [OPTION]... --gitlab-url GITLAB_URL --oauth2-id ID --oauth2-secret SECRET --dashboard-url DASHBOARD_URL
Instaloni kubernetes-dashboard në klusterin Kubernetes.
Argumente të detyrueshme:
 -i, --install                instaloni në hapësirën 'kube-system'
 -u, --upgrade                përmirësoni instalimin ekzistues, do të ripërdorë fjalëkalimin dhe emrat e hosteve
 -d, --delete                 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 panelit pa skemë (dashboard.example.com)
Argumente opsionale:
 -h, --help                   nxjerrni këtë mesazh

MegjithatĂ«, pĂ«rpara se ta pĂ«rdorni, Ă«shtĂ« e nevojshme tĂ« hyni nĂ« GitLab: Zona e Administratorit → Aplikacionet — dhe tĂ« shtoni njĂ« aplikacion tĂ« ri pĂ«r panelin qĂ« do tĂ« vijĂ«. Ta quajmĂ« atĂ« "kubernetes dashboard":

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Si rezultat i shtimit të tij, GitLab do të ofrojë hash-e:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Këto do të përdoren si argumente për skriptin. 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, do të kontrollojmë se gjithçka është nisur:

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

NjĂ«herĂ« e mirĂ« gjithçka do tĂ« nisĂ«, megjithatĂ« autorizimi menjĂ«herĂ« nuk do tĂ« funksionojĂ«! Kjo ndodh sepse nĂ« imazhin e pĂ«rdorur (situata nĂ« imazhe tĂ« tjera Ă«shtĂ« e ngjashme) procesi i kapjes sĂ« ridrejtimit nĂ« callback Ă«shtĂ« realizuar gabim. Ky rrethanĂ« bĂ«n qĂ« oauth tĂ« fshijĂ« cookie-nĂ«, tĂ« cilĂ«n e ofron vetĂ« (oauth)


Problemi zgjidhet duke ndërtuar imazhin tuaj të oauth me patch-in.

Patch-i për oauth dhe ripërshkrimi

Për këtë do të përdorim Dockerfile-in si më poshtë:

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\/\n
EXPOSE 8080 4180
ENTRYPOINT [ "/bin\/oauth2_proxy" ]
CMD [ "--upstream=http:\/\/0.0.0.0:8080\/", "--http-address=0.0.0.0:4180" ]

Ja si duket patch-i në vetvete rd.patch

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 "... duke testet"
-.\/test.sh
+#.\/test.sh
 
-for os in windows linux darwin; do
-    echo "... ndërtimi i 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 "... ndërtimi i 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
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

Tani mund të kryejmë ndërtimin e imazhit dhe të 'botojmë' atë në GitLab tonë. Më pas në manifests/kube-dashboard-oauth2-proxy.yaml do të saktësojmë përdorimin e imazhit të nevojshëm (zëvendësojeni me tuajin):

 image: docker.io/colemickens/oauth2_proxy:latest

NĂ«se keni njĂ« registri tĂ« mbyllur me autorizim — mos harroni tĂ« shtoni pĂ«rdorimin e sekretit pĂ«r tĂ« marrĂ« imazhet:

      imagePullSecrets:
     - name: gitlab-registry


 dhe shtoni vetë sekretin për registrin:

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

Një lexues i kujdesshëm do të vërejë se stringu i gjatë i dhënë më sipër është base64 i konfigurimit:

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

Këto janë të dhënat e përdoruesit në GitLab, me kodin që Kubernetes do të përdorë për të marrë imazhin nga registri.

Pasi të jetë bërë gjithçka, mund të fshijmë instalimin aktual (i pamundur për t'u ekzekutuar) të Dashboard-it me komandën:

$ .\/ctl.sh -d


 dhe tĂ« instalojmĂ« 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 për të hyrë në Dashboard dhe për të gjetur butonin mjaft arkaik të autorizimit:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Pas klikimit mbi të, do të përballemi me GitLab, e cila do të na ofrojë të autorizohemi në faqen e saj të zakonshme (sigurisht, nëse nuk ishim autorizuar më parë atje):

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Autorizohemi me tĂ« dhĂ«nat e identifikimit tĂ« GitLab — dhe gjithçka Ă«shtĂ« bĂ«rĂ«:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Rreth mundësive të Dashboard-it

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

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

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Për pods, janë të disponueshme edhe të dhëna më të detajuara, si variablat e ambientit, imazhi i shkarkuar, argumentet e nisjes, gjendja e tyre:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Për deployment-et duken statuset:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 dhe detaje të tjera:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 dhe gjithashtu ka mundësinë për të shkallëzuar deployment-in:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Rezulti i kësaj operacioni:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Mes mundësive të tjera të dobishme, të përmendura tashmë në fillim të artikullit, është: shikimi i logëve:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab


 dhe funksioni i hyrjes në konsolën e kontejnerëve të pods të zgjedhur:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Gjithashtu, për shembull, mund të shikoni edhe limitet / kërkesat në nyjat:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

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

Disavantazhet e integrimit dhe Dashboard

NĂ« integrimin e pĂ«rshkruar nuk ka asnjĂ« ndarje tĂ« aksesit. Me tĂ«, tĂ« gjithĂ« pĂ«rdoruesit qĂ« kanĂ« njĂ«farĂ« akses nĂ« GitLab, fitojnĂ« akses nĂ« Dashboard. Aksesi nĂ« vetĂ« Dashboard-it Ă«shtĂ« i njĂ«jtĂ« pĂ«r ta, i pĂ«rputhshĂ«m me tĂ« drejtat e vetĂ« Dashboard-it, tĂ« cilat pĂ«rcaktohen nĂ« RBAC. ËshtĂ« e qartĂ« se kjo nuk do t'i pĂ«rshtatet tĂ« gjithĂ«ve, por pĂ«r rastin tonĂ« u tregua e mjaftueshme.

Nga disavantazhet e dukshme në vetë panelin Dashboard do të veçoja:

  • nuk Ă«shtĂ« e mundur tĂ« hyni nĂ« konsolĂ«n e init-kontejnerit;
  • nuk Ă«shtĂ« e mundur tĂ« redaktoni Deployments dhe StatefulSets, megjithatĂ« kjo Ă«shtĂ« e rregullueshme nĂ« ClusterRole;
  • kompatibiliteti i Dashboard me versionet e fundit tĂ« Kubernetes dhe e ardhmja e projektit ngjallin pyetje.

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

Statusi dhe alternativat e Dashboard

Tabelën e kompatibilitetit të Dashboard me versionet e Kubernetes, të prezantuar në versionin më të fundit të projektit (v1.10.1), nuk është shumë inkurajuese:

Integrimi i Kubernetes Dashboard dhe përdoruesve të GitLab

Megjithatë, ekziston (tashmë e pranuar në janar) PR #3476, i cili shpall mbështetje për K8s 1.13. Për më tepër, mes issue-ve të projektit mund të gjeni përmendje nga përdorues që punojnë me panelin në K8s 1.14. Së fundmi, commit-et në bazën e kodit të projektit nuk kanë pushuar. Prandaj (të paktën!) statusi aktual i projektit nuk është aq i keq sa mund të duket në fillim nga tabela zyrtare e kompatibilitetit.

Finalmente, Dashboard ka alternativa. Ndër to:

  1. K8Dash — njĂ« ndĂ«rfaqe e re (komitetet e para datojnĂ« nga marsi i kĂ«tij viti), tashmĂ« ofron mundĂ«si tĂ« mira, si pĂ«rfaqĂ«simi vizual i statusit aktual tĂ« grumbullit dhe menaxhimi i objekteve tĂ« tij. Pozicionohet si "ndĂ«rfaqe nĂ« kohĂ« reale", pasi automatikisht pĂ«rditĂ«son tĂ« dhĂ«nat e shfaqura, 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Ă« grumbullin tuaj edhe projekte tĂ« tjera, qĂ« nuk i pĂ«rshtaten tĂ« gjithĂ«ve.
  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Ă« gjithĂ« objektet e grumbullit. SidoqoftĂ«, duket se zhvillimi i tij Ă«shtĂ« ndalur.
  4. Polaris — sapo disa ditĂ« mĂ« parĂ« nĂ« tĂ« cilin Ă«shtĂ« bĂ«rĂ« njoftimi projekt, i cili kombinon funksionet e panelit (tregon gjendjen e tanishme tĂ« grumbullit, por nuk menaxhon objektet e tij) dhe "validimin automatik tĂ« praktikave mĂ« tĂ« mira" (kontrollon grumbullin pĂ«r saktĂ«sinĂ« e konfigurimeve tĂ« Deployments qĂ« janĂ« aktivizuar nĂ« tĂ«).

Në vend të përfundimeve

Dashboard është mjeti standard për grumbujt Kubernetes që ne mbajmë. Integrimi i tij me GitLab gjithashtu bëhet pjesë e "instalimit tonë të paracaktuar", pasi shumë zhvillues janë të lumtur me mundësitë që u ofrohen me këtë panel.

Alternativa të ndryshme për Kubernetes Dashboard shfaqen nga komuniteti Open Source (dhe ne jemi të lumtur t'i shqyrtojmë ato), megjithatë në këtë fazë mbetem me këtë zgjidhje.

P.S.

Lexoni gjithashtu në blogun tonë:

Burimi: habr.com

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