Integrazione di Kubernetes Dashboard è Users GitLab

Integrazione di Kubernetes Dashboard è Users GitLab

Kubernetes Dashboard hè un strumentu faciule d'utilizà per uttene infurmazione aghjurnata nantu à u vostru cluster in esecuzione è gestione cù u minimu sforzu. Cuminciate à apprezzà ancu di più quandu l'accessu à queste funzioni hè necessariu micca solu da l'amministratori / ingegneri DevOps, ma ancu da quelli chì sò menu abituati à a cunsola è / o ùn anu micca intenzione di trattà cù tutte l'intricacies di interazzione cù kubectl è altre utilità. Questu hè accadutu cun noi: i sviluppatori vulianu un accessu rapidu à l'interfaccia web di Kubernetes, è postu chì avemu usatu GitLab, a suluzione hè stata naturale.

Perchè hè questu?

I sviluppatori diretti ponu esse interessatu in un strumentu cum'è K8s Dashboard per i travaglii di debugging. Calchì volta vulete vede logs è risorse, è à volte uccidete pods, scale Deployments/StatefulSets, è ancu andà à a cunsola di cuntainer (ci sò ancu richieste per quale, però, ci hè un altru modu - per esempiu, attraversu kubectl-debug).

Inoltre, ci hè un mumentu psicologicu per i gestori quandu volenu fighjà u cluster - per vede chì "tuttu hè verde", è cusì rassicurate chì "tuttu hè travagliatu" (chì, sicuru, hè assai relative ... ma questu hè fora di u scopu di l'articulu).

Cum'è un sistema CI standard avemu appiicatu GitLab: tutti i sviluppatori l'utilizanu ancu. Dunque, per furnisce l'accessu, era logicu integrà Dashboard cù cunti GitLab.

Aghju nutatu ancu chì usemu NGINX Ingress. Sè vo travaglià cù l'altri suluzione di ingressu, avete bisognu di truvà indipindentamente analogi di annotazioni per l'autorizazione.

Pruvate l'integrazione

Installazione di u dashboard

Attenzione: Sè vo site per ripetiri i passi sottu, allora - per evità operazioni innecessarii - leghjite prima à a subrubrica successiva.

Siccomu usemu sta integrazione in parechje installazioni, avemu automatizatu a so installazione. I fonti necessarii per questu sò publicati in repository GitHub speciale. Sò basati nantu à cunfigurazioni YAML ligeramente modificate da repository ufficiale di Dashboard, è ancu un script Bash per una implementazione rapida.

U script stalla Dashboard in u cluster è u cunfigura per l'integrazione cù 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

Tuttavia, prima di usà, avete bisognu à andà in GitLab: Admin area → Applicazioni - è aghjunghje una nova applicazione per u futuru pannellu. Chjamemu "kubernetes dashboard":

Integrazione di Kubernetes Dashboard è Users GitLab

In u risultatu di l'aghjunghje, GitLab furnisce l'hash:

Integrazione di Kubernetes Dashboard è Users GitLab

Sò quelli chì sò usati com'è argumenti à u script. In u risultatu, l'installazione s'assumiglia cusì:

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

Dopu questu, verificate chì tuttu hà cuminciatu:

$ 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

Prima o poi tuttu hà da principià, però l'autorizazione ùn funziona micca immediatamente! U fattu hè chì in l'imaghjini utilizati (a situazione in altre imagine hè simile) u prucessu di catturà una redirezzione in u callback hè implementatu incorrectamente. Sta circustanza porta à u fattu chì oauth sguassate u cookie chì oauth stessu ci furnisce...

U prublema hè risolta custruendu a vostra propria maghjina di auth cù un patch.

Patch oauth è reinstalla

Per fà questu, useremu u Dockerfile seguente:

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

È quì hè ciò chì u patch rd.patch stessu pare

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

Avà pudete custruisce l'imaghjini è spinghjela in u nostru GitLab. Next in manifests/kube-dashboard-oauth2-proxy.yaml indicà l'usu di l'imaghjini desiderate (sustituitu cù u vostru propiu):

 image: docker.io/colemickens/oauth2_proxy:latest

Se tenete un registru chì hè chjusu da l'autorizazione, ùn vi scurdate di aghjunghje l'usu di un sicretu per pull images:

      imagePullSecrets:
     - name: gitlab-registry

... è aghjunghje u sicretu stessu per u registru:

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

U lettore attentu vede chì a longa stringa sopra hè base64 da a cunfigurazione:

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

Eccu i dati di l'utilizatori in GitLab, u codice Kubernetes tirarà l'imaghjini da u registru.

Dopu chì tuttu hè fattu, pudete caccià l'installazione di Dashboard attuale (ùn funziona micca bè) cù u cumandimu:

$ ./ctl.sh -d

... è stallà tuttu di novu:

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

Hè ora di andà à u Dashboard è truvà un buttone di login piuttostu arcaicu:

Integrazione di Kubernetes Dashboard è Users GitLab

Dopu à cliccà nant'à ellu, GitLab ci salutarà, offrendu di accede à a so pagina abituale (di sicuru, s'ellu ùn avemu micca cunnessu prima):

Integrazione di Kubernetes Dashboard è Users GitLab

Entramu cù credenziali GitLab - è tuttu hè fattu:

Integrazione di Kubernetes Dashboard è Users GitLab

À propositu di e funzioni di Dashboard

Sè vo site un sviluppatore chì ùn hà micca travagliatu cù Kubernetes prima, o simpricimenti per una certa ragione ùn hà micca scontru Dashboard prima, vi illustraraghju alcune di e so capacità.

Prima, pudete vede chì "tuttu hè verde":

Integrazione di Kubernetes Dashboard è Users GitLab

Dati più detallati sò ancu dispunibili per i pods, cum'è variabili di l'ambiente, l'imagine scaricata, l'argumenti di lanciamentu è u so statu:

Integrazione di Kubernetes Dashboard è Users GitLab

E implementazioni anu stati visibili:

Integrazione di Kubernetes Dashboard è Users GitLab

... è altri dettagli:

Integrazione di Kubernetes Dashboard è Users GitLab

... è ci hè ancu a capacità di scala l'implementazione:

Integrazione di Kubernetes Dashboard è Users GitLab

U risultatu di sta operazione:

Integrazione di Kubernetes Dashboard è Users GitLab

Tra l'altri funzioni utili digià citati à u principiu di l'articulu hè a visualizazione di i logs:

Integrazione di Kubernetes Dashboard è Users GitLab

... è a funzione per accede à a cunsola di u containeru di u pod sceltu:

Integrazione di Kubernetes Dashboard è Users GitLab

Per esempiu, pudete ancu guardà i limiti / dumande nantu à i nodi:

Integrazione di Kubernetes Dashboard è Users GitLab

Di sicuru, queste ùn sò micca tutte e capacità di u pannellu, ma speru chì avete l'idea generale.

Svantaghji di integrazione è Dashboard

In l'integrazione descritta ùn ci hè micca cuntrollu di accessu. Cù questu, tutti l'utilizatori cù qualsiasi accessu à GitLab accede à u Dashboard. Hanu u listessu accessu à u Dashboard stessu, chì currisponde à i diritti di u Dashboard stessu, chì sò definiti in RBAC. Ovviamente, questu ùn hè micca adattatu per tutti, ma per u nostru casu hè diventatu abbastanza.

Trà i svantaghji notevoli in u Dashboard stessu, aghju nutatu i seguenti:

  • hè impussibile di entre in a cunsola di u containeru init;
  • hè impussibile di edità Deployments è StatefulSets, ancu s'ellu pò esse riparatu in ClusterRole;
  • A cumpatibilità di Dashboard cù l'ultime versioni di Kubernetes è u futuru di u prugettu ponenu dumande.

L'ultimu prublema meriteghja una attenzione particulari.

Status dashboard è alternative

Tavola di cumpatibilità di Dashboard cù e versioni di Kubernetes, presentata in l'ultima versione di u prugettu (v1.10.1), micca assai felice:

Integrazione di Kubernetes Dashboard è Users GitLab

Malgradu questu, ci hè (dighjà aduttatu in ghjennaghju) PR # 3476, chì annuncia u supportu per K8s 1.13. Inoltre, trà i prublemi di u prughjettu pudete truvà referenze à l'utilizatori chì travaglianu cù u pannellu in K8s 1.14. Infine, s'impegna in a basa di codice di u prughjettu ùn ferma micca. Allora (almenu!) U statutu attuale di u prugettu ùn hè micca male cum'è prima pareva da a tabella di cumpatibilità ufficiale.

Infine, ci sò alternative à Dashboard. À mezu à elli:

  1. K8 Dash - una ghjovana interfaccia (i primi cummitti datanu di marzu di questu annu), chì offre digià boni funziunalità, cum'è una rapprisintazioni visuale di u statutu attuale di u cluster è a gestione di i so ogetti. Posizionatu cum'è una "interfaccia in tempu reale", perchè aghjurnà automaticamente i dati affissati senza avè bisognu di rinfriscà a pagina in u navigatore.
  2. OpenShift Console - una interfaccia web da Red Hat OpenShift, chì, però, purterà altri sviluppi di u prugettu à u vostru cluster, chì ùn hè micca adattatu per tutti.
  3. Kubernator hè un prughjettu interessante, creatu cum'è una interfaccia di livellu più bassu (che Dashboard) cù a capacità di vede tutti l'ogetti di cluster. Tuttavia, pare chì u so sviluppu hè firmatu.
  4. Polaris - solu l'altru ghjornu annunziatu un prughjettu chì combina e funzioni di un pannellu (mostra u statu attuale di u cluster, ma ùn gestisce micca i so ogetti) è "validazione di e migliori pratiche" automatica (verifica u cluster per a correttezza di e cunfigurazioni di Deployments in esecuzione).

Invece di cunclusioni

Dashboard hè un strumentu standard per i clusters Kubernetes chì serve. A so integrazione cù GitLab hè ancu diventata parte di a nostra installazione predeterminata, postu chì parechji sviluppatori sò entusiasmati di e capacità chì anu cun questu pannellu.

Kubernetes Dashboard periodicamente hà alternative da a cumunità Open Source (è simu felici di cunsiderà elli), ma in questu stadiu fermemu cù sta suluzione.

PS

Leghjite puru nant'à u nostru blog:

Source: www.habr.com

Add a comment