Integratioun vu Kubernetes Dashboard a GitLab Benotzer

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:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Als Resultat vun der bäigefüügt gëtt GitLab d'Hashes:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Si sinn déi, déi als Argumenter zum Skript benotzt ginn. Als Resultat gesäit d'Installatioun esou aus:

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

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:

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

An hei ass wéi de rd.patch Patch selwer ausgesäit

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:

      imagePullSecrets:
     - name: gitlab-registry

... a füügt d'Geheimnis selwer fir de Registry:

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

Den opmierksam Lieser wäert gesinn datt de laange String uewen ass base64 aus der Configuratioun:

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

Dëst sinn d'Benotzerdaten am GitLab, de Kubernetes Code zitt d'Bild aus der Registry.

Nodeems alles gemaach ass, kënnt Dir déi aktuell (net funktionnéiert) Dashboard Installatioun mam Kommando erofhuelen:

$ ./ctl.sh -d

... an alles erëm installéieren:

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

Et ass Zäit op den Dashboard ze goen an en zimlech archaesche Login Knäppchen ze fannen:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

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

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Mir aloggen mat GitLab Umeldungsinformatiounen - an alles ass gemaach:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

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

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Méi detailléiert Donnéeën sinn och fir Pods verfügbar, sou wéi Ëmfeldvariablen, erofgeluede Bild, Startargumenter an hiren Zoustand:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Deployementer hu siichtbar Statusen:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

...an aner Detailer:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

... an et gëtt och d'Fäegkeet fir d'Deployment ze skaléieren:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

D'Resultat vun dëser Operatioun:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Ënner anerem nëtzlech Funktiounen, déi schonn am Ufank vum Artikel ernimmt goufen, ass d'Logbicher kucken:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

... an d'Funktioun fir an d'Containerkonsole vum gewielten Pod ze loggen:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

Zum Beispill kënnt Dir och d'Limiten / Ufroen op Noden kucken:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

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:

Integratioun vu Kubernetes Dashboard a GitLab Benotzer

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:

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

PS

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire