Integrasi Dashboard Kubernetes sareng Pamaké GitLab
Kubernetes Dashboard mangrupikeun alat anu gampang dianggo pikeun kéngingkeun inpormasi énggal ngeunaan klaster jalan anjeun sareng ngatur éta kalayan usaha anu minimal. Anjeun ngawitan ngahargaan eta malah leuwih lamun aksés ka kamampuhan ieu diperlukeun teu ukur ku administrator / DevOps insinyur, tapi ogé ku jalma anu kirang biasa konsol jeung / atawa teu maksudna pikeun nungkulan sagala intricacies tina interacting jeung kubectl na Utiliti séjén. Ieu kajantenan sareng kami: pamekar hoyong aksés gancang kana antarmuka wéb Kubernetes, sareng saprak kami nganggo GitLab, solusina datang sacara alami.
Naha ieu?
Pamekar langsung tiasa resep kana alat sapertos K8s Dashboard pikeun tugas debugging. Kadang-kadang anjeun hoyong ningali log sareng sumber daya, sareng sakapeung maéhan pods, skala Deployments/StatefulSets, komo angkat ka konsol wadahna (aya ogé anu nyuhunkeun, kumaha ogé, aya cara sanés - contona, ngalangkungan kubectl-debug).
Salaku tambahan, aya momen psikologis pikeun manajer nalika aranjeunna hoyong ningali kluster - ningali yén "sadayana héjo", sahingga ngajamin dirina yén "sadayana jalan" (anu, tangtosna, relatif pisan ... tapi ieu saluareun ruang lingkup artikel).
Salaku sistem CI baku kami boga dilarapkeun GitLab: sadaya pamekar ogé ngagunakeun éta. Ku alatan éta, pikeun masihan aranjeunna aksés, éta logis pikeun ngahijikeun Dashboard sareng akun GitLab.
Kuring ogé bakal dicatet yén kami nganggo NGINX Ingress. Upami anjeun damel sareng batur solusi asupna, Anjeun bakal kedah bebas manggihan analogs annotations pikeun otorisasina.
Nyobian integrasi
Pamasangan Dashboard
perhatian: Upami anjeun badé ngulang léngkah-léngkah di handap ieu, teras - pikeun ngahindarkeun operasi anu teu perlu - baca heula ka subjudul salajengna.
Kusabab kami nganggo integrasi ieu dina seueur pamasangan, kami parantos ngajadikeun otomatis pamasanganana. Sumber anu dipikabutuh pikeun ieu diterbitkeun dina gudang GitHub husus. Éta dumasar kana konfigurasi YAML rada dirobah tina Repository Dashboard resmi, kitu ogé Aksara Bash pikeun deployment gancang.
Skrip masang Dashboard dina kluster sareng ngonpigurasikeunana pikeun integrasi sareng 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, sateuacan nganggo éta, anjeun kedah angkat ka GitLab: Wewengkon Admin → Aplikasi - sareng tambahkeun aplikasi énggal pikeun panel hareup. Sebut waé "dasbor kubernetes":
Salaku hasil tina nambahkeun éta, GitLab bakal nyadiakeun hashes:
Éta nu dipaké salaku argumen pikeun naskah. Hasilna, pamasangan sapertos kieu:
Sanggeus éta, hayu urang pariksa yen sagalana dimimitian:
$ 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
Sooner atanapi engké sagalana bakal ngamimitian, kumaha oge otorisasina moal langsung dianggo! Kanyataan yén dina gambar dipaké (kaayaan dina gambar séjén téh sarupa) prosés catching alihan dina callback nu dilaksanakeun leres. Kaayaan ieu nyababkeun kanyataan yén sumpah ngahapus cookie anu sumpah sorangan nyayogikeun ka urang ...
Masalahna direngsekeun ku ngawangun gambar oauth anjeun nyalira nganggo patch.
Patch oauth sareng pasang deui
Jang ngalampahkeun ieu, urang bakal nganggo Dockerfile ieu:
Sarta di dieu Kang naon rd.patch patch sorangan Sigana mah
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
Ayeuna anjeun tiasa ngawangun gambar sareng nyorong kana GitLab kami. Salajengna dina manifests/kube-dashboard-oauth2-proxy.yaml nunjukkeun pamakéan gambar nu dipikahoyong (ganti ku anjeun sorangan):
image: docker.io/colemickens/oauth2_proxy:latest
Upami Anjeun gaduh pendaptaran nu ditutup ku otorisasina, ulah poho pikeun nambahkeun pamakéan rusiah pikeun narik gambar:
imagePullSecrets:
- name: gitlab-registry
... sareng tambahkeun rusiah sorangan pikeun pendaptaran:
Waktosna pikeun angkat ka Dashboard sareng milarian tombol login anu rada kuno:
Saatos ngaklik éta, GitLab bakal ngabagéakeun kami, nawiskeun log in ka halaman biasa na (tangtosna, upami kami henteu acan lebet sateuacanna):
Kami log in sareng kredensial GitLab - sareng sadayana parantos réngsé:
Ngeunaan fitur Dashboard
Upami anjeun pamekar anu teu acan damel sareng Kubernetes sateuacana, atanapi ngan kusabab sababaraha alesan teu acan mendakan Dashboard sateuacana, kuring bakal ngagambarkeun sababaraha kamampuanna.
Anu mimiti, anjeun tiasa ningali yén "sadayana héjo":
Data anu langkung lengkep ogé sayogi pikeun pods, sapertos variabel lingkungan, gambar anu diunduh, argumen peluncuran, sareng kaayaanana:
Deployments boga status katempo:
... sareng detil sanésna:
... sareng aya ogé kamampuan pikeun skala panyebaran:
Hasil tina operasi ieu:
Diantara fitur mangpaat anu parantos disebatkeun dina awal tulisan nyaéta ningali log:
... sareng fungsi pikeun asup kana konsol wadah tina pod anu dipilih:
Salaku conto, anjeun ogé tiasa ningali wates / pamundut dina titik:
Tangtosna, ieu sanés sadayana kamampuan panel, tapi kuring ngarepkeun anjeun nampi ide umum.
Kakurangan integrasi sareng Dashboard
Dina integrasi digambarkeun euweuh kontrol aksés. Kalayan éta, sadaya pangguna anu ngagaduhan aksés ka GitLab kéngingkeun aksés kana Dashboard. Aranjeunna boga aksés sarua dina Dashboard sorangan, pakait jeung hak Dashboard sorangan, nu didefinisikeun dina RBAC. Jelas, ieu henteu cocog pikeun sadayana, tapi pikeun kasus urang tétéla cukup.
Diantara kalemahan anu katingali dina Dashboard sorangan, kuring perhatikeun ieu:
mustahil pikeun asup kana konsol wadah init;
mustahil pikeun ngédit Deployments sareng StatefulSets, sanaos ieu tiasa dibenerkeun dina ClusterRole;
Kasaluyuan dasbor sareng vérsi panganyarna tina Kubernetes sareng masa depan proyék ieu nyababkeun patarosan.
Masalah panungtungan pantes perhatian husus.
Status dashboard sareng alternatif
Méja kompatibilitas dasbor sareng sékrési Kubernetes, dibere dina vérsi proyék panganyarna (v1.10.1), teu bagja pisan:
Sanajan ieu, aya (parantos diadopsi dina Januari) PR #3476, nu announces rojongan pikeun K8s 1.13. Salaku tambahan, diantara masalah proyék anjeun tiasa mendakan rujukan pikeun pangguna anu damel sareng panel dina K8s 1.14. Tungtungna, commits kana dasar kode proyék urang ulah eureun. Ku kituna (sahenteuna!) Status sabenerna proyek teu jadi goréng saperti eta mimitina sigana tina tabel kasaluyuan resmi.
Tungtungna, aya alternatif pikeun Dashboard. Diantara aranjeunna:
K8Dash - antarbeungeut ngora (kahiji commits tanggal deui Maret taun ieu), nu geus nawarkeun fitur alus, kayaning a ngagambarkeun visual ngeunaan status ayeuna tina klaster sarta manajemén objék na. Diposisikan salaku "antarmuka real-time", sabab otomatis ngamutahirkeun data nu ditampilkeun tanpa merlukeun anjeun refresh kaca dina browser nu.
Konsol OpenShift - Antarbeungeut wéb tina Red Hat OpenShift, anu, kumaha ogé, bakal nyangking pamekaran proyék anu sanés pikeun kluster anjeun, anu henteu cocog pikeun sadayana.
Kubernator mangrupa proyék metot, dijieun salaku panganteur-tingkat handap (ti Dashboard) kalawan kamampuhan pikeun nempo sakabeh objék klaster. Nanging, sigana kamekaranana parantos lirén.
Polaris - ngan dinten séjén ngumumkeun proyék nu ngagabungkeun fungsi panel a (nembongkeun kaayaan kiwari klaster, tapi teu ngatur objék na) jeung otomatis "validasi prakték pangalusna" (cék klaster pikeun correctness tina konfigurasi Deployments ngajalankeun di dinya).
Daripada kasimpulan
Dashboard mangrupikeun alat standar pikeun klaster Kubernetes anu kami layani. Integrasina sareng GitLab ogé parantos janten bagian tina pamasangan standar kami, sabab seueur pamekar anu gumbira ngeunaan kamampuan anu dipibanda ku panel ieu.
Kubernetes Dashboard périodik boga alternatif ti komunitas Open Source (jeung kami senang mertimbangkeun aranjeunna), tapi dina tahap ieu kami tetep mibanda solusi ieu.