Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Paneli i Kubernetes është një mjet i lehtë për t'u përdorur për marrjen e informacionit të përditësuar në lidhje me grupin tuaj të funksionimit dhe menaxhimin e tij me përpjekje minimale. Ju filloni ta vlerësoni edhe më shumë kur aksesi në këto aftësi është i nevojshëm jo vetëm nga administratorët/inxhinierët e DevOps, por edhe nga ata që janë më pak të mësuar me konsolën dhe/ose nuk kanë ndërmend të merren me të gjitha ndërlikimet e ndërveprimit me kubectl dhe shërbimet e tjera. Kjo ndodhi me ne: zhvilluesit donin qasje të shpejtë në ndërfaqen e internetit të Kubernetes, dhe meqenëse ne përdorim GitLab, zgjidhja erdhi natyrshëm.

Pse eshte kjo?

Zhvilluesit e drejtpërdrejtë mund të jenë të interesuar për një mjet si K8s Dashboard për korrigjimin e detyrave. Ndonjëherë ju dëshironi të shikoni regjistrat dhe burimet, dhe ndonjëherë të vrisni pods, të shkallëzoni Deployments/StatefulSets dhe madje të shkoni te konsola e kontejnerit (ka edhe kërkesa për të cilat, megjithatë, ekziston një mënyrë tjetër - për shembull, përmes kubectl-debug).

Për më tepër, ka një moment psikologjik për menaxherët kur duan të shikojnë grupin - të shohin se "gjithçka është e gjelbër", dhe kështu të sigurojnë veten se "gjithçka po funksionon" (që, natyrisht, është shumë relative ... por kjo është përtej qëllimit të artikullit).

Si një sistem standard CI kemi aplikuar GitLab: të gjithë zhvilluesit e përdorin gjithashtu. Prandaj, për t'u siguruar atyre akses, ishte logjike të integrohej Dashboard me llogaritë e GitLab.

Do të vërej gjithashtu se ne përdorim NGINX Ingress. Nëse punoni me të tjerët zgjidhjet hyrëse, do t'ju duhet të gjeni në mënyrë të pavarur analoge të shënimeve për autorizim.

Duke u përpjekur për integrim

Instalimi i pultit

Kujdes: Nëse do të përsërisni hapat e mëposhtëm, atëherë - për të shmangur veprimet e panevojshme - së pari lexoni në nëntitullin tjetër.

Meqenëse ne e përdorim këtë integrim në shumë instalime, ne kemi automatizuar instalimin e tij. Burimet e nevojshme për këtë janë publikuar në depo speciale GitHub. Ato bazohen në konfigurime paksa të modifikuara YAML nga depoja zyrtare e Panelit, si dhe një skript Bash për vendosje të shpejtë.

Skripti instalon Dashboard në grup dhe e konfiguron atë për t'u integruar me 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

Sidoqoftë, përpara se ta përdorni, duhet të shkoni te GitLab: Zona e administratorit → Aplikacionet - dhe të shtoni një aplikacion të ri për panelin e ardhshëm. Le ta quajmë "pulti i kubernetes":

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Si rezultat i shtimit të tij, GitLab do të sigurojë hash-et:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Janë ato që përdoren si argumente për skenarin. Si rezultat, instalimi duket si ky:

$ ./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ë që gjithçka filloi:

$ 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

Megjithatë, herët a vonë gjithçka do të fillojë autorizimi nuk do të funksionojë menjëherë! Fakti është se në imazhin e përdorur (situata në imazhet e tjera është e ngjashme) procesi i kapjes së një ridrejtimi në kthimin e thirrjes zbatohet gabimisht. Kjo rrethanë çon në faktin se oauth fshin cookie-n që na ofron vetë oauth...

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

Patch oauth dhe riinstaloje

Për ta bërë këtë, ne do të përdorim skedarin e mëposhtëm Docker:

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

Dhe ja se si duket vetë patch-i 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 "... 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

Tani mund ta ndërtoni imazhin dhe ta shtyni atë në GitLab tonë. Më pas në manifests/kube-dashboard-oauth2-proxy.yaml tregoni përdorimin e imazhit të dëshiruar (zëvendësoni atë me tuajin):

 image: docker.io/colemickens/oauth2_proxy:latest

Nëse keni një regjistër që është i mbyllur me autorizim, mos harroni të shtoni përdorimin e një sekreti për tërheqjen e imazheve:

      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 vëmendshëm do të shohë se vargu i gjatë i mësipërm është base64 nga konfigurimi:

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

Këto janë të dhënat e përdoruesit në GitLab, kodi Kubernetes do të tërheqë imazhin nga regjistri.

Pasi të jetë bërë gjithçka, mund të hiqni instalimin aktual (nuk funksionon siç duhet) të panelit me komandën:

$ ./ctl.sh -d

... dhe instaloni gjithçka përsëri:

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

Është koha për të shkuar te Paneli dhe për të gjetur një buton mjaft arkaik të hyrjes:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Pasi të klikojmë mbi të, GitLab do të na përshëndesë, duke ofruar hyrjen në faqen e tij të zakonshme (natyrisht, nëse nuk kemi hyrë më parë atje):

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Ne regjistrohemi me kredencialet e GitLab - dhe gjithçka është bërë:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Rreth veçorive të Panelit

Nëse jeni një zhvillues që nuk keni punuar më parë me Kubernetes, ose thjesht për ndonjë arsye nuk keni hasur më parë në Dashboard, unë do t'i ilustroj disa nga aftësitë e tij.

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

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Të dhëna më të detajuara janë gjithashtu të disponueshme për pods, të tilla si variablat e mjedisit, imazhi i shkarkuar, argumentet e nisjes dhe gjendja e tyre:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Vendosjet kanë statuse të dukshme:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

...dhe detaje të tjera:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

... dhe ekziston gjithashtu aftësia për të shkallëzuar vendosjen:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Rezultati i këtij operacioni:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Ndër veçoritë e tjera të dobishme të përmendura tashmë në fillim të artikullit është shikimi i regjistrave:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

... dhe funksioni për t'u identifikuar në tastierën e kontejnerit të podit të zgjedhur:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Për shembull, mund të shikoni edhe kufijtë/kërkesat në nyje:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Sigurisht, këto nuk janë të gjitha aftësitë e panelit, por shpresoj që të keni idenë e përgjithshme.

Disavantazhet e integrimit dhe Paneli

Në integrimin e përshkruar nuk ka kontrolli i aksesit. Me të, të gjithë përdoruesit me çdo akses në GitLab fitojnë akses në Panel. Ata kanë të njëjtin akses në vetë Panelin, që korrespondon me të drejtat e vetë Panelit, i cili janë të përcaktuara në RBAC. Natyrisht, kjo nuk është e përshtatshme për të gjithë, por për rastin tonë doli të jetë e mjaftueshme.

Ndër disavantazhet e dukshme në vetë Panelin, vërej sa vijon:

  • është e pamundur të futesh në tastierën e kontejnerit fillestar;
  • është e pamundur të modifikosh Deployments dhe StatefulSets, megjithëse kjo mund të rregullohet në ClusterRole;
  • Pajtueshmëria e pultit me versionet më të fundit të Kubernetes dhe e ardhmja e projektit ngre pyetje.

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

Statusi i panelit dhe alternativat

Tabela e përputhshmërisë së panelit me publikimet e Kubernetes, e paraqitur në versionin më të fundit të projektit (v1.10.1), jo shumë i lumtur:

Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab

Përkundër kësaj, ekziston (i miratuar tashmë në janar) PR #3476, i cili njofton mbështetje për K8s 1.13. Përveç kësaj, midis çështjeve të projektit mund të gjeni referenca për përdoruesit që punojnë me panelin në K8s 1.14. Së fundi, kryen në bazën e kodit të projektit mos u ndal. Pra (të paktën!) statusi aktual i projektit nuk është aq i keq sa mund të duket fillimisht nga tabela zyrtare e përputhshmërisë.

Më në fund, ka alternativa për Pult. Midis tyre:

  1. K8Dash — një ndërfaqe e re (kryerjet e para datojnë në mars të këtij viti), e cila tashmë ofron veçori të mira, të tilla si një paraqitje vizuale e statusit aktual të grupit dhe menaxhimi i objekteve të tij. Pozicionuar si një "ndërfaqe në kohë reale", sepse përditëson automatikisht të dhënat e shfaqura pa kërkuar që ju të rifreskoni faqen në shfletues.
  2. OpenShift Console - një ndërfaqe në internet nga Red Hat OpenShift, e cila, megjithatë, do të sjellë zhvillime të tjera të projektit në grupin tuaj, i cili nuk është i përshtatshëm për të gjithë.
  3. Kubernator është një projekt interesant, i krijuar si një ndërfaqe e nivelit më të ulët (se Paneli) me aftësinë për të parë të gjitha objektet e grupimit. Megjithatë, duket se zhvillimi i tij ka ndaluar.
  4. Ylli Polar - vetëm ditën tjetër i shpallur një projekt që kombinon funksionet e një paneli (tregon gjendjen aktuale të grupimit, por nuk menaxhon objektet e tij) dhe "vlefshmërinë e praktikave më të mira" automatike (kontrollon grupin për korrektësinë e konfigurimeve të vendosjeve që ekzekutohen në të).

Në vend të konkluzioneve

Paneli është një mjet standard për grupimet Kubernetes që ne ofrojmë. Integrimi i tij me GitLab është bërë gjithashtu pjesë e instalimit tonë të paracaktuar, pasi shumë zhvillues janë të ngazëllyer për aftësitë që kanë me këtë panel.

Paneli i Kubernetes ka periodikisht alternativa nga komuniteti me burim të hapur (dhe ne jemi të lumtur t'i konsiderojmë ato), por në këtë fazë ne mbetemi me këtë zgjidhje.

PS

Lexoni edhe në blogun tonë:

Burimi: www.habr.com

Shto një koment