Integratioun vu Kubernetes Dashboard a GitLab Benotzer
Kubernetes Dashboard ass en einfach ze benotzen Tool fir aktuell Informatioun iwwer e lafende Cluster a minimal Gestioun dovun ze kréien. Dir fänkt et nach méi ze schätzen wann Zougang zu dëse Fäegkeeten net nëmme vun Administrateuren / DevOps Ingenieuren gebraucht gëtt, awer och vun deenen, déi manner mat der Konsole gewinnt sinn an / oder net wëlles hunn mat all de Schwieregkeete vun der Interaktioun mat kubectl an aner Utilities. Dëst ass mat eis geschitt: d'Entwéckler wollte séier Zougang zu der Kubernetes Webinterface, a well mir GitLab benotzen, ass d'Léisung natierlech komm.
Firwat ass dat?
Direkten Entwéckler kënnen interesséiert sinn an engem Tool wéi K8s Dashboard fir Debugging Aufgaben. Heiansdo wëllt Dir Logbicher a Ressourcen kucken, an heiansdo Pods ëmbréngen, Skala Deployments/StatefulSets, a souguer op d'Containerkonsole goen (et ginn och Ufroe fir déi et awer eng aner Manéier gëtt - zum Beispill duerch kubectl-debug).
Ausserdeem gëtt et e psychologesche Moment fir d'Manager, wann se de Cluster kucke wëllen - ze gesinn, datt "alles gréng ass", a sech domat berouegen, datt "alles funktionnéiert" (wat natierlech ganz relativ ass... awer dëst ass iwwer den Ëmfang vum Artikel).
Als Standard CI System hu mir applizéiert GitLab: all Entwéckler benotzen et och. Dofir, fir hinnen Zougang ze ginn, war et logesch Dashboard mat GitLab Konten z'integréieren.
Ech wäert och feststellen datt mir NGINX Ingress benotzen. Wann Dir mat aneren schafft ingress Léisungen, Dir musst onofhängeg Analoge vun Annotatiounen fir Autorisatioun fannen.
Probéieren Integratioun
Dashboard Installatioun
Opgepasst: Wann Dir d'Schrëtt hei ënnen widderhuelen, da - fir onnéideg Operatiounen ze vermeiden - liest d'éischt op déi nächst Ënnertitel.
Well mir dës Integratioun a ville Installatiounen benotzen, hu mir hir Installatioun automatiséiert. D'Quellen, déi fir dëst néideg sinn, ginn am publizéiert spezielle GitHub Repository. Si baséieren op liicht geännert YAML Konfiguratiounen aus offiziellen Dashboard Repository, wéi och e Bash Skript fir séier Deployment.
De Skript installéiert Dashboard am Cluster a konfiguréiert et fir Integratioun mat 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
Wéi och ëmmer, ier Dir se benotzt, musst Dir op GitLab goen: Admin Beräich → Uwendungen - an eng nei Applikatioun fir den zukünftegen Panel derbäi. Loosst eis et "kubernetes Dashboard" nennen:
Als Resultat vun der bäigefüügt gëtt GitLab d'Hashes:
Si sinn déi, déi als Argumenter zum Skript benotzt ginn. Als Resultat gesäit d'Installatioun esou aus:
Duerno, loosst eis kontrolléieren ob alles ugefaang huet:
$ 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
Fréier oder spéider fänkt awer alles un Autorisatioun wäert net direkt schaffen! D'Tatsaach ass datt am benotzte Bild (d'Situatioun an anere Biller ass ähnlech) de Prozess fir e Viruleedung am Callback ze fangen ass falsch ëmgesat. Dësen Ëmstänn féiert zu der Tatsaach datt oauth de Cookie läscht deen oauth selwer eis liwwert ...
De Problem gëtt geléist andeems Dir Äert eegent oauth Bild mat engem Patch baut.
Patch oauth an nei installéieren
Fir dëst ze maachen, benotze mir déi folgend Dockerfile:
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
Elo kënnt Dir d'Bild bauen an et an eise GitLab drécken. Nächst an manifests/kube-dashboard-oauth2-proxy.yaml gitt d'Benotzung vum gewënschten Bild un (ersetzt et mat Ärem eegenen):
image: docker.io/colemickens/oauth2_proxy:latest
Wann Dir e Registry hutt deen duerch Autorisatioun zougemaach ass, vergiesst net d'Benotzung vun engem Geheimnis fir Pull Biller ze addéieren:
Et ass Zäit op den Dashboard ze goen an en zimlech archaesche Login Knäppchen ze fannen:
Nodeems Dir drop geklickt hutt, begréisst GitLab eis, bitt Iech op seng gewéinlech Säit unzemellen (natierlech, wa mir net virdrun ageloggt sinn):
Mir aloggen mat GitLab Umeldungsinformatiounen - an alles ass gemaach:
Iwwer Dashboard Features
Wann Dir en Entwéckler sidd deen net virdru mat Kubernetes geschafft huet, oder einfach aus irgendege Grënn net virdrun op Dashboard begéint ass, wäert ech e puer vu senge Fäegkeeten illustréieren.
Als éischt kënnt Dir gesinn datt "Alles gréng ass":
Méi detailléiert Donnéeën sinn och fir Pods verfügbar, sou wéi Ëmfeldvariablen, erofgeluede Bild, Startargumenter an hiren Zoustand:
Deployementer hu siichtbar Statusen:
...an aner Detailer:
... an et gëtt och d'Fäegkeet fir d'Deployment ze skaléieren:
D'Resultat vun dëser Operatioun:
Ënner anerem nëtzlech Funktiounen, déi schonn am Ufank vum Artikel ernimmt goufen, ass d'Logbicher kucken:
... an d'Funktioun fir an d'Containerkonsole vum gewielten Pod ze loggen:
Zum Beispill kënnt Dir och d'Limiten / Ufroen op Noden kucken:
Natierlech sinn dat net all d'Fäegkeeten vum Panel, awer ech hoffen datt Dir déi allgemeng Iddi kritt.
Nodeeler vun Integratioun an Dashboard
An der beschriwwener Integratioun gëtt et keng Zougang Kontroll. Mat et kréien all Benotzer mat all Zougang zu GitLab Zougang zum Dashboard. Si hunn dee selwechten Zougang am Dashboard selwer, entspriechend de Rechter vum Dashboard selwer, wat sinn am RBAC definéiert. Natierlech ass dëst net fir jiddereen gëeegent, awer fir eist Fall ass et duergaang.
Ënnert de merkbare Nodeeler am Dashboard selwer notéieren ech déi folgend:
et ass onméiglech an d'Konsole vum Init Container ze kommen;
et ass onméiglech Deployments a StatefulSets z'änneren, obwuel dëst an ClusterRole fixéiert ka ginn;
D'Kompatibilitéit vum Dashboard mat de leschte Versioune vu Kubernetes an d'Zukunft vum Projet stellen Froen op.
De leschte Problem verdéngt besonnesch Opmierksamkeet.
Dashboard Status an Alternativen
Dashboard Kompatibilitéitstabell mat Kubernetes Verëffentlechungen, presentéiert an der leschter Versioun vum Projet (v1.10.1), net ganz frou:
Trotzdem gëtt et (schon am Januar ugeholl) PR #3476, déi Ënnerstëtzung fir K8s 1.13. Zousätzlech, ënnert de Projetsprobleemer fannt Dir Referenzen op Benotzer déi mam Panel an K8s 1.14 schaffen. Endlech, engagéiert an de Code Basis vum Projet net ophalen. Also (op d'mannst!) Den aktuellen Zoustand vum Projet ass net sou schlecht wéi et fir d'éischt aus der offizieller Kompatibilitéitstabelle schénge kéint.
Endlech ginn et Alternativen zum Dashboard. Ënnert hinnen:
K8 Daach - eng jonk Interface (déi éischt Verpflichtungen daten zréck op Mäerz vun dësem Joer), déi scho gutt Fonctiounen bitt, wéi eng visuell Representatioun vun der aktueller Status vun der Cluster an Gestioun vun hiren Objeten. Positionéiert als "Echtzäit Interface", well aktualiséiert automatesch déi ugewisen Donnéeën ouni datt Dir d'Säit am Browser erfrëscht.
OpenShift Konsol - e Web-Interface vum Red Hat OpenShift, deen awer aner Entwécklunge vum Projet op Äre Cluster bréngt, wat net fir jiddereen gëeegent ass.
Kubernator ass en interessante Projet, erstallt als e méi nidderegen Niveau (wéi Dashboard) Interface mat der Fäegkeet fir all Clusterobjekter ze gesinn. Wéi och ëmmer, et gesäit aus wéi seng Entwécklung gestoppt ass.
Polaris - just den aneren Dag ugekënnegt e Projet deen d'Funktioune vun engem Panel kombinéiert (den aktuellen Zoustand vum Stärekoup weist, awer seng Objekter net verwalten) an automatesch "Validatioun vu beschten Praktiken" (kontrolléiert de Stärekoup fir d'Korrektheet vun de Konfiguratiounen vun Deployments déi dra lafen).
Amplaz vu Conclusiounen
Dashboard ass e Standardinstrument fir de Kubernetes Cluster déi mir servéieren. Seng Integratioun mat GitLab ass och Deel vun eiser Standardinstallatioun ginn, well vill Entwéckler begeeschtert sinn iwwer d'Fäegkeeten, déi se mat dësem Panel hunn.
Kubernetes Dashboard huet periodesch Alternativen aus der Open Source Gemeinschaft (a mir si frou se ze berücksichtegen), awer op dëser Etapp bleiwen mir mat dëser Léisung.