Integrasi Dashboard Kubernetes sareng Pamaké GitLab

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

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Salaku hasil tina nambahkeun éta, GitLab bakal nyadiakeun hashes:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Éta nu dipaké salaku argumen pikeun naskah. Hasilna, pamasangan sapertos kieu:

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

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:

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

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:

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

Pamaca anu ati-ati bakal ningali yén senar panjang di luhur nyaéta base64 tina konfigurasi:

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

Ieu mangrupikeun data pangguna dina GitLab, kode Kubernetes bakal narik gambar tina pendaptaran.

Saatos sadayana réngsé, anjeun tiasa ngahapus pamasangan Dashboard ayeuna (henteu jalan leres) kalayan paréntah:

$ ./ctl.sh -d

... sareng pasang sadayana deui:

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

Waktosna pikeun angkat ka Dashboard sareng milarian tombol login anu rada kuno:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Saatos ngaklik éta, GitLab bakal ngabagéakeun kami, nawiskeun log in ka halaman biasa na (tangtosna, upami kami henteu acan lebet sateuacanna):

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Kami log in sareng kredensial GitLab - sareng sadayana parantos réngsé:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

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

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Data anu langkung lengkep ogé sayogi pikeun pods, sapertos variabel lingkungan, gambar anu diunduh, argumen peluncuran, sareng kaayaanana:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Deployments boga status katempo:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

... sareng detil sanésna:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

... sareng aya ogé kamampuan pikeun skala panyebaran:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Hasil tina operasi ieu:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Diantara fitur mangpaat anu parantos disebatkeun dina awal tulisan nyaéta ningali log:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

... sareng fungsi pikeun asup kana konsol wadah tina pod anu dipilih:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

Salaku conto, anjeun ogé tiasa ningali wates / pamundut dina titik:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

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:

Integrasi Dashboard Kubernetes sareng Pamaké GitLab

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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.

PS

Baca ogé dina blog urang:

sumber: www.habr.com

Tambahkeun komentar