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.
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":
Minangka asil nambahake, GitLab bakal nyedhiyakake hash:
$ 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:
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:
Wektu kanggo pindhah menyang Dashboard lan golek tombol login sing rada kuno:
Sawise ngeklik, GitLab bakal menehi salam marang kita, nawakake mlebu menyang kaca biasanipun (mesthi, yen kita durung mlebu sadurunge):
Kita mlebu karo kredensial GitLab - lan kabeh wis rampung:
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":
Data sing luwih rinci uga kasedhiya kanggo pods, kayata variabel lingkungan, gambar sing diunduh, argumen peluncuran, lan statuse:
Panyebaran duwe status sing katon:
...lan rincian liyane:
... lan ana uga kemampuan kanggo skala penyebaran:
Asil saka operasi iki:
Antarane fitur migunani liyane sing wis kasebut ing wiwitan artikel yaiku ndeleng log:
... lan fungsi kanggo mlebu menyang konsol wadhah saka pod sing dipilih:
Contone, sampeyan uga bisa ndeleng watesan / panjaluk ing simpul:
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:
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:
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.
Konsol OpenShift - antarmuka web saka Red Hat OpenShift, sing, nanging, bakal nggawa pangembangan proyek liyane menyang klompok sampeyan, sing ora cocog kanggo kabeh wong.
Kubernator minangka proyek sing menarik, digawe minangka antarmuka tingkat ngisor (saka Dashboard) kanthi kemampuan kanggo ndeleng kabeh obyek kluster. Nanging, katon pembangunane wis mandheg.
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.