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ò":
Kòm rezilta ajoute li, GitLab pral bay hashes yo:
Se yo menm ki itilize kòm agiman nan script la. Kòm yon rezilta, enstalasyon an sanble sa a:
$ 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.
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:
Li lè pou ale nan Dashboard la epi jwenn yon bouton login olye akayik:
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):
Nou konekte ak kalifikasyon GitLab - epi tout bagay fèt:
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":
Done plis detay disponib tou pou gous, tankou varyab anviwònman, imaj telechaje, agiman lansman, ak eta yo:
Deplwaman yo gen estati vizib:
... ak lòt detay:
... epi gen tou kapasite nan echèl deplwaman an:
Rezilta operasyon sa a:
Pami lòt karakteristik itil ki deja mansyone nan kòmansman atik la se gade mòso bwa:
... ak fonksyon pou konekte nan konsole veso ki nan gous yo chwazi a:
Pou egzanp, ou ka gade tou nan limit yo / demann sou nœuds:
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:
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:
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.
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.
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.
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.