Integrasi Dashboard Kubernetes lan Pangguna GitLab

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Kubernetes Dashboard minangka alat sing gampang digunakake kanggo njupuk informasi paling anyar babagan kluster sing mlaku lan ngatur kanthi minimal gaweyan. Sampeyan wiwit ngormati luwih akeh nalika akses menyang kemampuan kasebut dibutuhake ora mung dening administrator / insinyur DevOps, nanging uga wong sing ora biasa karo konsol lan / utawa ora duwe tujuan kanggo ngatasi kabeh kerumitan sesambungan karo kubectl lan keperluan liyane. Iki kedadeyan karo kita: pangembang pengin akses cepet menyang antarmuka web Kubernetes, lan amarga kita nggunakake GitLab, solusi kasebut teka kanthi alami.

Kenapa iki?

Pangembang langsung bisa uga kasengsem ing alat kaya K8s Dashboard kanggo tugas debugging. Kadhangkala sampeyan pengin ndeleng log lan sumber daya, lan kadhangkala mateni pods, skala Deployments/StatefulSets, lan malah menyang console wadhah (ana uga panjalukan, nanging ana cara liya - contone, liwat kubectl-debug).

Kajaba iku, ana wayahe psikologis kanggo manajer nalika pengin ndeleng kluster - kanggo ndeleng manawa "kabeh ijo", lan kanthi mangkono menehi jaminan yen "kabeh bisa digunakake" (sing, mesthi, relatif banget ... nanging iki ngluwihi ruang lingkup artikel).

Minangka sistem CI standar kita duwe ditrapake GitLab: kabeh pangembang uga nggunakake. Mula, kanggo menehi akses, logis kanggo nggabungake Dashboard karo akun GitLab.

Aku uga bakal nyathet yen kita nggunakake NGINX Ingress. Yen sampeyan kerja karo wong liya solusi ingress, sampeyan kudu nemokake analog saka anotasi kanthi bebas kanggo wewenang.

Nyoba integrasi

Instalasi dashboard

Ati-ati: Yen sampeyan arep mbaleni langkah ing ngisor iki, banjur - kanggo ngindhari operasi rasah - pisanan maca menyang subheading sabanjurΓ©.

Awit kita nggunakake integrasi iki ing akeh panginstalan, kita wis otomatis instalasi sawijining. Sumber sing dibutuhake kanggo iki diterbitake ing repositori GitHub khusus. Padha adhedhasar konfigurasi YAML rada diowahi saka repositori Dashboard resmi, uga skrip Bash kanggo panyebaran cepet.

Skrip nginstal Dashboard ing kluster lan ngatur kanggo integrasi karo 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

Nanging, sadurunge nggunakake, sampeyan kudu pindhah menyang GitLab: Admin area β†’ Aplikasi - lan nambah aplikasi anyar kanggo panel mangsa. Ayo diarani "dashboard kubernetes":

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Minangka asil nambahake, GitLab bakal nyedhiyakake hash:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Iku sing digunakake minangka argumen kanggo naskah. AkibatΓ©, instalasi katon kaya iki:

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

Sawise iku, ayo priksa manawa kabeh diwiwiti:

$ 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

Cepet utawa mengko kabeh bakal diwiwiti wewenang ora bakal bisa langsung! Kasunyatane yaiku ing gambar sing digunakake (kahanan ing gambar liyane padha) proses nyekel pangalihan ing callback ditindakake kanthi ora bener. Kahanan iki nyebabake kasunyatan manawa oauth mbusak cookie sing disumpahake dhewe kanggo kita ...

Masalah ditanggulangi kanthi mbangun gambar oauth dhewe kanthi tembelan.

Patch oauth lan instal maneh

Kanggo nindakake iki, kita bakal nggunakake Dockerfile ing ngisor iki:

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

Lan kene apa patch rd.patch dhewe katon kaya

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

Saiki sampeyan bisa mbangun gambar lan push menyang GitLab kita. Sabanjure ing manifests/kube-dashboard-oauth2-proxy.yaml nuduhake panggunaan gambar sing dikarepake (ganti karo gambar sampeyan dhewe):

 image: docker.io/colemickens/oauth2_proxy:latest

Yen sampeyan duwe registri sing ditutup kanthi wewenang, aja lali nambah panggunaan rahasia kanggo narik gambar:

      imagePullSecrets:
     - name: gitlab-registry

... lan nambah rahasia dhewe kanggo pendaptaran:

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

Pembaca sing ati-ati bakal weruh manawa senar dawa ing ndhuwur yaiku base64 saka konfigurasi:

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

Iki data pangguna ing GitLab, kode Kubernetes bakal narik gambar saka registri.

Sawise kabeh wis rampung, sampeyan bisa mbusak instalasi Dashboard saiki (ora bisa digunakake kanthi bener) kanthi printah:

$ ./ctl.sh -d

... lan instal kabeh maneh:

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

Wektu kanggo pindhah menyang Dashboard lan golek tombol login sing rada kuno:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Sawise ngeklik, GitLab bakal menehi salam marang kita, nawakake mlebu menyang kaca biasanipun (mesthi, yen kita durung mlebu sadurunge):

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Kita mlebu karo kredensial GitLab - lan kabeh wis rampung:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Babagan fitur Dashboard

Yen sampeyan minangka pangembang sing durung nate nggarap Kubernetes sadurunge, utawa mung amarga ora nemoni Dashboard sadurunge, aku bakal nggambarake sawetara kemampuane.

Kaping pisanan, sampeyan bisa ndeleng manawa "kabeh ijo":

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Data sing luwih rinci uga kasedhiya kanggo pods, kayata variabel lingkungan, gambar sing diunduh, argumen peluncuran, lan statuse:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Panyebaran duwe status sing katon:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

...lan rincian liyane:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

... lan ana uga kemampuan kanggo skala penyebaran:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Asil saka operasi iki:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Antarane fitur migunani liyane sing wis kasebut ing wiwitan artikel yaiku ndeleng log:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

... lan fungsi kanggo mlebu menyang konsol wadhah saka pod sing dipilih:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Contone, sampeyan uga bisa ndeleng watesan / panjaluk ing simpul:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Mesthi, iki ora kabeh kapabilitas panel, nanging muga-muga sampeyan entuk ide umum.

Kekurangan integrasi lan Dashboard

Ing integrasi sing diterangake ora ana kontrol akses. Kanthi iku, kabeh pangguna sing duwe akses menyang GitLab entuk akses menyang Dashboard. Padha duwe akses padha ing Dashboard dhewe, cocog karo hak Dashboard dhewe, kang ditetepake ing RBAC. Temenan, iki ora cocog kanggo kabeh wong, nanging kanggo kasus kita ternyata cukup.

Antarane cacat sing katon ing Dashboard dhewe, aku nyathet ing ngisor iki:

  • ora bisa mlebu ing konsol wadhah init;
  • ora bisa nyunting Deployments lan StatefulSets, sanajan iki bisa didandani ing ClusterRole;
  • Kompatibilitas Dashboard karo versi paling anyar saka Kubernetes lan masa depan proyek kasebut nyebabake pitakonan.

Masalah pungkasan kudu diwenehi perhatian khusus.

Status dashboard lan alternatif

Tabel kompatibilitas dasbor karo rilis Kubernetes, ditampilake ing versi paling anyar saka proyek kasebut (v1.10.1), ora seneng banget:

Integrasi Dashboard Kubernetes lan Pangguna GitLab

Senadyan iki, ana (wis diadopsi ing Januari) PR #3476, sing ngumumake dhukungan kanggo K8s 1.13. Kajaba iku, ing antarane masalah proyek sampeyan bisa nemokake referensi kanggo pangguna sing nggarap panel ing K8s 1.14. Akhire, nglakoni menyang basis kode project ora mandheg. Dadi (paling ora!) Status nyata proyek kasebut ora ala kaya sing katon saka tabel kompatibilitas resmi.

Pungkasan, ana alternatif kanggo Dashboard. Ing antarane:

  1. K8Dash - antarmuka enom (pisanan commits tanggal bali kanggo Maret taun iki), kang wis nawakake fitur apik, kayata perwakilan visual saka status saiki kluster lan ngatur sawijining obyek. Diposisikan minangka "antarmuka nyata-wektu", amarga kanthi otomatis nganyari data sing ditampilake tanpa mbutuhake sampeyan refresh kaca ing browser.
  2. Konsol OpenShift - antarmuka web saka Red Hat OpenShift, sing, nanging, bakal nggawa pangembangan proyek liyane menyang klompok sampeyan, sing ora cocog kanggo kabeh wong.
  3. Kubernator minangka proyek sing menarik, digawe minangka antarmuka tingkat ngisor (saka Dashboard) kanthi kemampuan kanggo ndeleng kabeh obyek kluster. Nanging, katon pembangunane wis mandheg.
  4. Polaris - mung dina liyane diumumake project sing nggabungke fungsi saka panel (nuduhake negara saiki kluster, nanging ora ngatur obyek) lan otomatis "validasi paling laku" (mriksa kluster kanggo bener saka konfigurasi saka Deployments mlaku ing).

Nanging kesimpulan

Dashboard minangka alat standar kanggo kluster Kubernetes sing kita layani. Integrasi karo GitLab uga wis dadi bagian saka instalasi standar, amarga akeh pangembang sing bungah babagan kemampuan panel iki.

Dashboard Kubernetes sacara periodik duwe alternatif saka komunitas Open Source (lan kita seneng nimbang), nanging ing tahap iki kita tetep nganggo solusi iki.

PS

Waca uga ing blog kita:

Source: www.habr.com

Add a comment