Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Kubernetes Dashboard se yon zouti fasil-a-itilize pou jwenn enfòmasyon ajou sou gwoup k ap kouri ou a ak jere li ak efò minim. Ou kòmanse apresye li menm plis lè aksè a karakteristik sa yo bezwen pa sèlman pa administratè/enjenyè DevOps, men tou pa moun ki gen mwens abitye nan konsole a ak / oswa ki pa gen entansyon fè fas ak tout sibtilite ki genyen nan kominike avèk kubectl ak lòt sèvis piblik. Sa a te rive avèk nou: devlopè yo te vle aksè rapid nan koòdone entènèt Kubernetes, e depi nou itilize GitLab, solisyon an te vini natirèlman.

Poukisa sa a?

Devlopè dirèk yo ka enterese nan yon zouti tankou K8s Dashboard pou travay debogaj. Pafwa ou vle wè mòso bwa ak resous, epi pafwa touye gous, echèl Deployments/StatefulSets, e menm ale nan konsole veso a (gen tou demann pou ki, sepandan, gen yon lòt fason - pou egzanp, atravè kubectl-debug).

Anplis de sa, gen yon moman sikolojik pou manadjè yo lè yo vle gade gwoup la - yo wè ke "tout bagay se vèt", epi konsa rasire tèt yo ke "tout bagay ap travay" (ki, nan kou, se trè relatif ... men sa a depase limit atik la).

Kòm yon sistèm CI estanda nou genyen aplike GitLab: tout devlopè yo sèvi ak li tou. Se poutèt sa, pou bay yo aksè, li te lojik pou entegre Dashboard ak kont GitLab.

Mwen pral sonje tou ke nou itilize NGINX Ingress. Si w ap travay ak lòt moun solisyon antre, w ap bezwen poukont ou jwenn analogue nan anotasyon pou otorizasyon.

Eseye entegrasyon

Enstalasyon tablodbò

Atansyon: Si w pral repete etap ki anba yo, lè sa a - pou evite operasyon ki pa nesesè - premye li nan pwochen tit la.

Depi nou itilize entegrasyon sa a nan anpil enstalasyon, nou te otomatize enstalasyon li yo. Sous ki nesesè pou sa yo pibliye nan depo espesyal GitHub. Yo baze sou konfigirasyon YAML yon ti kras modifye soti nan repozitwa ofisyèl Dashboard, osi byen ke yon script Bash pou deplwaman rapid.

Script la enstale Dashboard nan gwoup la ak konfigirasyon li pou entegrasyon ak 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

Sepandan, anvan ou sèvi ak li, ou bezwen ale nan GitLab: Zòn Admin → Aplikasyon - epi ajoute yon nouvo aplikasyon pou panèl lavni an. Ann rele li "kubernetes tablodbò":

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Kòm rezilta ajoute li, GitLab pral bay hashes yo:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Se yo menm ki itilize kòm agiman nan script la. Kòm yon rezilta, enstalasyon an sanble sa a:

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

Apre sa, ann tcheke si tout bagay te kòmanse:

$ 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

Pi bonè oswa pita tout bagay pral kòmanse, sepandan otorizasyon p ap travay imedyatman! Reyalite a se ke nan imaj la itilize (sitiyasyon an nan lòt imaj se menm jan an) pwosesis la nan trape yon redireksyon nan callback la aplike mal. Sikonstans sa a mennen nan lefèt ke oauth efase bonbon ke oauth li menm bay nou an...

Pwoblèm nan rezoud pa bati pwòp imaj oauth ou ak yon plak.

Patch oauth ak réinstaller

Pou fè sa, nou pral sèvi ak Dockerfile sa a:

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

Ak isit la nan ki sa patch nan rd.patch tèt li sanble

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

Koulye a, ou ka bati imaj la epi pouse li nan GitLab nou an. Next nan manifests/kube-dashboard-oauth2-proxy.yaml endike itilizasyon imaj ou vle a (ranplase li ak pwòp ou a):

 image: docker.io/colemickens/oauth2_proxy:latest

Si ou gen yon rejis ki fèmen pa otorizasyon, pa bliye ajoute itilizasyon yon sekrè pou imaj rale:

      imagePullSecrets:
     - name: gitlab-registry

... epi ajoute sekrè nan tèt li pou rejis la:

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

Lektè atantif la pral wè ke chèn long ki anwo a se base64 soti nan konfigirasyon an:

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

Sa a se done itilizatè yo nan GitLab, kòd Kubernetes la pral rale imaj la nan rejis la.

Apre tout bagay fin fè, ou ka retire enstalasyon Dashboard aktyèl la (ki pa travay kòrèkteman) ak lòd la:

$ ./ctl.sh -d

... epi enstale tout bagay ankò:

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

Li lè pou ale nan Dashboard la epi jwenn yon bouton login olye akayik:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Apre w fin klike sou li, GitLab ap salye nou, li ofri nou konekte sou paj abityèl li (nan kou, si nou pa te konekte la deja):

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Nou konekte ak kalifikasyon GitLab - epi tout bagay fèt:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Konsènan karakteristik Dashboard

Si ou se yon pwomotè ki pa te travay ak Kubernetes anvan, oswa tou senpleman pou kèk rezon pa te rankontre Dashboard anvan, mwen pral ilistre kèk nan kapasite li yo.

Premyèman, ou ka wè ke "tout se vèt":

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Done plis detay disponib tou pou gous, tankou varyab anviwònman, imaj telechaje, agiman lansman, ak eta yo:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Deplwaman yo gen estati vizib:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

... ak lòt detay:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

... epi gen tou kapasite nan echèl deplwaman an:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Rezilta operasyon sa a:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Pami lòt karakteristik itil ki deja mansyone nan kòmansman atik la se gade mòso bwa:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

... ak fonksyon pou konekte nan konsole veso ki nan gous yo chwazi a:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Pou egzanp, ou ka gade tou nan limit yo / demann sou nœuds:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Natirèlman, sa yo se pa tout kapasite yo nan panèl la, men mwen espere ke ou jwenn lide jeneral la.

Dezavantaj nan entegrasyon ak tablodbò

Nan entegrasyon ki dekri pa gen okenn kontwòl aksè. Avèk li, tout itilizatè ki gen nenpòt aksè nan GitLab jwenn aksè nan Dashboard la. Yo gen aksè a menm nan Dashboard nan tèt li, ki koresponn ak dwa yo nan Dashboard nan tèt li, ki yo defini nan RBAC. Li evidan, sa a se pa apwopriye pou tout moun, men pou ka nou an li te tounen soti yo dwe ase.

Pami dezavantaj yo aparan nan tablodbò a li menm, mwen sonje bagay sa yo:

  • li enposib antre nan konsole veso init la;
  • li enposib pou edite Deployments ak StatefulSets, byenke sa ka fiks nan ClusterRole;
  • Konpatibilite Dashboard ak dènye vèsyon Kubernetes yo ak avni pwojè a poze kesyon.

Dènye pwoblèm nan merite atansyon espesyal.

Estati tablodbò ak altènativ yo

Tablo konpatibilite tablodbò ak degaje Kubernetes, prezante nan dènye vèsyon pwojè a (v1.10.1), pa trè kontan:

Entegrasyon Kubernetes Dashboard ak GitLab Itilizatè yo

Malgre sa, gen (deja adopte nan mwa janvye) PR #3476, ki anonse sipò pou K8s 1.13. Anplis de sa, pami pwoblèm pwojè yo ou ka jwenn referans sou itilizatè k ap travay ak panèl la nan K8s 1.14. Finalman, komèt nan baz kòd pwojè a pa sispann. Se konsa, (omwen!) estati aktyèl la nan pwojè a se pa tankou move jan li ta ka premye sanble nan tablo a konpatibilite ofisyèl.

Finalman, gen altènativ pou Dashboard. Pami yo:

  1. K8Dash — yon koòdone jèn (premye komèt yo dat tounen nan mwa mas ane sa a), ki deja ofri bon karakteristik, tankou yon reprezantasyon vizyèl nan estati aktyèl la nan gwoup la ak jesyon nan objè li yo. Pozisyone kòm yon "koòdone an tan reyèl", paske otomatikman mete ajou done yo parèt san yo pa mande pou ou rafrechi paj la nan navigatè a.
  2. OpenShift Console - yon koòdone entènèt ki soti nan Red Hat OpenShift, ki, sepandan, pral pote lòt devlopman nan pwojè a nan gwoup ou a, ki pa apwopriye pou tout moun.
  3. Kubernator se yon pwojè enteresan, ki te kreye kòm yon nivo pi ba (pase Dashboard) koòdone ak kapasite nan wè tout objè gwoup. Sepandan, li sanble devlopman li te sispann.
  4. Etwal Polè - jis lòt jou a te anonse yon pwojè ki konbine fonksyon yo nan yon panèl (montre eta aktyèl la nan gwoup la, men li pa jere objè li yo) ak otomatik "validasyon nan pi bon pratik" (tcheke gwoup la pou kòrèkteman nan konfigirasyon yo nan Deplwaman k ap kouri nan li).

Olye pou yo konklizyon yo

Dashboard se yon zouti estanda pou gwoup Kubernetes nou sèvi yo. Entegrasyon li ak GitLab tou te vin yon pati nan enstalasyon default nou an, paske anpil devlopè yo kontan anpil sou kapasite yo genyen ak panèl sa a.

Kubernetes Dashboard detanzantan gen altènativ nan kominote Open Source (e nou kontan konsidere yo), men nan etap sa a nou rete ak solisyon sa a.

PS

Li tou sou blog nou an:

Sous: www.habr.com

Add nouvo kòmantè