Integrimi i përdoruesve të Kubernetes Dashboard dhe GitLab
Paneli i Kubernetes është një mjet i lehtë për t'u përdorur për marrjen e informacionit të përditësuar në lidhje me grupin tuaj të funksionimit dhe menaxhimin e tij me përpjekje minimale. Ju filloni ta vlerësoni edhe më shumë kur aksesi në këto aftësi është i nevojshëm jo vetëm nga administratorët/inxhinierët e DevOps, por edhe nga ata që janë më pak të mësuar me konsolën dhe/ose nuk kanë ndërmend të merren me të gjitha ndërlikimet e ndërveprimit me kubectl dhe shërbimet e tjera. Kjo ndodhi me ne: zhvilluesit donin qasje të shpejtë në ndërfaqen e internetit të Kubernetes, dhe meqenëse ne përdorim GitLab, zgjidhja erdhi natyrshëm.
Pse eshte kjo?
Zhvilluesit e drejtpërdrejtë mund të jenë të interesuar për një mjet si K8s Dashboard për korrigjimin e detyrave. Ndonjëherë ju dëshironi të shikoni regjistrat dhe burimet, dhe ndonjëherë të vrisni pods, të shkallëzoni Deployments/StatefulSets dhe madje të shkoni te konsola e kontejnerit (ka edhe kërkesa për të cilat, megjithatë, ekziston një mënyrë tjetër - për shembull, përmes kubectl-debug).
Për më tepër, ka një moment psikologjik për menaxherët kur duan të shikojnë grupin - të shohin se "gjithçka është e gjelbër", dhe kështu të sigurojnë veten se "gjithçka po funksionon" (që, natyrisht, është shumë relative ... por kjo është përtej qëllimit të artikullit).
Si një sistem standard CI kemi aplikuar GitLab: të gjithë zhvilluesit e përdorin gjithashtu. Prandaj, për t'u siguruar atyre akses, ishte logjike të integrohej Dashboard me llogaritë e GitLab.
Do të vërej gjithashtu se ne përdorim NGINX Ingress. Nëse punoni me të tjerët zgjidhjet hyrëse, do t'ju duhet të gjeni në mënyrë të pavarur analoge të shënimeve për autorizim.
Duke u përpjekur për integrim
Instalimi i pultit
Kujdes: Nëse do të përsërisni hapat e mëposhtëm, atëherë - për të shmangur veprimet e panevojshme - së pari lexoni në nëntitullin tjetër.
Meqenëse ne e përdorim këtë integrim në shumë instalime, ne kemi automatizuar instalimin e tij. Burimet e nevojshme për këtë janë publikuar në depo speciale GitHub. Ato bazohen në konfigurime paksa të modifikuara YAML nga depoja zyrtare e Panelit, si dhe një skript Bash për vendosje të shpejtë.
Skripti instalon Dashboard në grup dhe e konfiguron atë për t'u integruar me 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
Sidoqoftë, përpara se ta përdorni, duhet të shkoni te GitLab: Zona e administratorit → Aplikacionet - dhe të shtoni një aplikacion të ri për panelin e ardhshëm. Le ta quajmë "pulti i kubernetes":
Si rezultat i shtimit të tij, GitLab do të sigurojë hash-et:
Janë ato që përdoren si argumente për skenarin. Si rezultat, instalimi duket si ky:
$ 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
Megjithatë, herët a vonë gjithçka do të fillojë autorizimi nuk do të funksionojë menjëherë! Fakti është se në imazhin e përdorur (situata në imazhet e tjera është e ngjashme) procesi i kapjes së një ridrejtimi në kthimin e thirrjes zbatohet gabimisht. Kjo rrethanë çon në faktin se oauth fshin cookie-n që na ofron vetë oauth...
Problemi zgjidhet duke ndërtuar imazhin tuaj të oauth me një patch.
Patch oauth dhe riinstaloje
Për ta bërë këtë, ne do të përdorim skedarin e mëposhtëm Docker:
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
Tani mund ta ndërtoni imazhin dhe ta shtyni atë në GitLab tonë. Më pas në manifests/kube-dashboard-oauth2-proxy.yaml tregoni përdorimin e imazhit të dëshiruar (zëvendësoni atë me tuajin):
image: docker.io/colemickens/oauth2_proxy:latest
Nëse keni një regjistër që është i mbyllur me autorizim, mos harroni të shtoni përdorimin e një sekreti për tërheqjen e imazheve:
Është koha për të shkuar te Paneli dhe për të gjetur një buton mjaft arkaik të hyrjes:
Pasi të klikojmë mbi të, GitLab do të na përshëndesë, duke ofruar hyrjen në faqen e tij të zakonshme (natyrisht, nëse nuk kemi hyrë më parë atje):
Ne regjistrohemi me kredencialet e GitLab - dhe gjithçka është bërë:
Rreth veçorive të Panelit
Nëse jeni një zhvillues që nuk keni punuar më parë me Kubernetes, ose thjesht për ndonjë arsye nuk keni hasur më parë në Dashboard, unë do t'i ilustroj disa nga aftësitë e tij.
Së pari, ju mund të shihni se "gjithçka është e gjelbër":
Të dhëna më të detajuara janë gjithashtu të disponueshme për pods, të tilla si variablat e mjedisit, imazhi i shkarkuar, argumentet e nisjes dhe gjendja e tyre:
Vendosjet kanë statuse të dukshme:
...dhe detaje të tjera:
... dhe ekziston gjithashtu aftësia për të shkallëzuar vendosjen:
Rezultati i këtij operacioni:
Ndër veçoritë e tjera të dobishme të përmendura tashmë në fillim të artikullit është shikimi i regjistrave:
... dhe funksioni për t'u identifikuar në tastierën e kontejnerit të podit të zgjedhur:
Për shembull, mund të shikoni edhe kufijtë/kërkesat në nyje:
Sigurisht, këto nuk janë të gjitha aftësitë e panelit, por shpresoj që të keni idenë e përgjithshme.
Disavantazhet e integrimit dhe Paneli
Në integrimin e përshkruar nuk ka kontrolli i aksesit. Me të, të gjithë përdoruesit me çdo akses në GitLab fitojnë akses në Panel. Ata kanë të njëjtin akses në vetë Panelin, që korrespondon me të drejtat e vetë Panelit, i cili janë të përcaktuara në RBAC. Natyrisht, kjo nuk është e përshtatshme për të gjithë, por për rastin tonë doli të jetë e mjaftueshme.
Ndër disavantazhet e dukshme në vetë Panelin, vërej sa vijon:
është e pamundur të futesh në tastierën e kontejnerit fillestar;
është e pamundur të modifikosh Deployments dhe StatefulSets, megjithëse kjo mund të rregullohet në ClusterRole;
Pajtueshmëria e pultit me versionet më të fundit të Kubernetes dhe e ardhmja e projektit ngre pyetje.
Problemi i fundit meriton vëmendje të veçantë.
Statusi i panelit dhe alternativat
Tabela e përputhshmërisë së panelit me publikimet e Kubernetes, e paraqitur në versionin më të fundit të projektit (v1.10.1), jo shumë i lumtur:
Përkundër kësaj, ekziston (i miratuar tashmë në janar) PR #3476, i cili njofton mbështetje për K8s 1.13. Përveç kësaj, midis çështjeve të projektit mund të gjeni referenca për përdoruesit që punojnë me panelin në K8s 1.14. Së fundi, kryen në bazën e kodit të projektit mos u ndal. Pra (të paktën!) statusi aktual i projektit nuk është aq i keq sa mund të duket fillimisht nga tabela zyrtare e përputhshmërisë.
Më në fund, ka alternativa për Pult. Midis tyre:
K8Dash — një ndërfaqe e re (kryerjet e para datojnë në mars të këtij viti), e cila tashmë ofron veçori të mira, të tilla si një paraqitje vizuale e statusit aktual të grupit dhe menaxhimi i objekteve të tij. Pozicionuar si një "ndërfaqe në kohë reale", sepse përditëson automatikisht të dhënat e shfaqura pa kërkuar që ju të rifreskoni faqen në shfletues.
OpenShift Console - një ndërfaqe në internet nga Red Hat OpenShift, e cila, megjithatë, do të sjellë zhvillime të tjera të projektit në grupin tuaj, i cili nuk është i përshtatshëm për të gjithë.
Kubernator është një projekt interesant, i krijuar si një ndërfaqe e nivelit më të ulët (se Paneli) me aftësinë për të parë të gjitha objektet e grupimit. Megjithatë, duket se zhvillimi i tij ka ndaluar.
Ylli Polar - vetëm ditën tjetër i shpallur një projekt që kombinon funksionet e një paneli (tregon gjendjen aktuale të grupimit, por nuk menaxhon objektet e tij) dhe "vlefshmërinë e praktikave më të mira" automatike (kontrollon grupin për korrektësinë e konfigurimeve të vendosjeve që ekzekutohen në të).
Në vend të konkluzioneve
Paneli është një mjet standard për grupimet Kubernetes që ne ofrojmë. Integrimi i tij me GitLab është bërë gjithashtu pjesë e instalimit tonë të paracaktuar, pasi shumë zhvillues janë të ngazëllyer për aftësitë që kanë me këtë panel.
Paneli i Kubernetes ka periodikisht alternativa nga komuniteti me burim të hapur (dhe ne jemi të lumtur t'i konsiderojmë ato), por në këtë fazë ne mbetemi me këtë zgjidhje.