Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Kubernetes Dashboard est un outil facile à utiliser pour obtenir des informations à jour sur votre cluster en cours d'exécution et le gérer avec un minimum d'effort. Vous commencez à l'apprécier encore plus lorsque l'accÚs à ces fonctionnalités est nécessaire non seulement aux administrateurs/ingénieurs DevOps, mais aussi à ceux qui sont moins habitués à la console et/ou n'ont pas l'intention de gérer toutes les subtilités de l'interaction avec kubectl et d'autres utilitaires. Cela s'est produit chez nous : les développeurs souhaitaient un accÚs rapide à l'interface web de Kubernetes, et comme nous utilisons GitLab, la solution est venue naturellement.

Pourquoi est-ce

Les dĂ©veloppeurs directs peuvent ĂȘtre intĂ©ressĂ©s par un outil tel que K8s Dashboard pour les tĂąches de dĂ©bogage. Parfois, vous souhaitez afficher les journaux et les ressources, et parfois supprimer des pods, mettre Ă  l'Ă©chelle des dĂ©ploiements/StatefulSets et mĂȘme accĂ©der Ă  la console du conteneur (il existe Ă©galement des requĂȘtes pour lesquelles, cependant, il existe un autre moyen - par exemple, via Kubectl-dĂ©bogage).

De plus, il y a un moment psychologique pour les managers oĂč ils veulent regarder le cluster : voir que « tout est vert », et ainsi se rassurer que « tout fonctionne » (ce qui, bien sĂ»r, est trĂšs relatif... mais cela dĂ©passe le cadre de l'article).

En tant que systÚme CI standard, nous avons applique GitLab : tous les développeurs l'utilisent aussi. Par conséquent, pour leur fournir un accÚs, il était logique d'intégrer Dashboard aux comptes GitLab.

Je noterai également que nous utilisons NGINX Ingress. Si vous travaillez avec d'autres solutions d'entrée, vous devrez trouver indépendamment des analogues d'annotations pour l'autorisation.

Essayer l'intégration

Installation du tableau de bord

prudence: Si vous souhaitez répéter les étapes ci-dessous, alors - pour éviter des opérations inutiles - lisez d'abord le sous-titre suivant.

Puisque nous utilisons cette intégration dans de nombreuses installations, nous avons automatisé son installation. Les sources nécessaires à cela sont publiées dans dépÎt GitHub spécial. Ils sont basés sur des configurations YAML légÚrement modifiées de référentiel officiel du tableau de bord, ainsi qu'un script Bash pour un déploiement rapide.

Le script installe Dashboard dans le cluster et le configure pour l'intĂ©gration avec 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

Cependant, avant de l'utiliser, vous devez vous rendre sur GitLab : Zone d'administration → Applications - et ajouter une nouvelle application pour le futur panel. Appelons-le « tableau de bord Kubernetes Â» :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Suite Ă  son ajout, GitLab fournira les hachages :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Ce sont eux qui servent d’arguments au script. En consĂ©quence, l'installation ressemble Ă  ceci :

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

AprĂšs cela, vĂ©rifions que tout a commencĂ© :

$ 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

Mais tĂŽt ou tard, tout commencera l'autorisation ne fonctionnera pas immĂ©diatement! Le fait est que dans l'image utilisĂ©e (la situation dans d'autres images est similaire), le processus de capture d'une redirection dans le rappel est mal implĂ©mentĂ©. Cette circonstance conduit au fait qu'oauth efface le cookie qu'oauth lui-mĂȘme nous fournit...

Le problÚme est résolu en créant votre propre image oauth avec un correctif.

Corrigez oauth et réinstallez

Pour ce faire, nous utiliserons le Dockerfile suivant :

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

Et voici Ă  quoi ressemble le patch rd.patch lui-mĂȘme

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

Vous pouvez maintenant crĂ©er l’image et la transfĂ©rer dans notre GitLab. Suivant dans manifests/kube-dashboard-oauth2-proxy.yaml indiquez l'utilisation de l'image souhaitĂ©e (remplacez-la par la vĂŽtre) :

 image: docker.io/colemickens/oauth2_proxy:latest

Si vous disposez d'un registre fermé par autorisation, n'oubliez pas d'ajouter l'utilisation d'un secret pour les pull images :

      imagePullSecrets:
     - name: gitlab-registry

... et ajoutez le secret lui-mĂȘme pour le registre :

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

Le lecteur attentif verra que la longue chaĂźne ci-dessus est en base64 de la configuration :

{"registry.company.com": {
 "username": "oauth2",
 "password": "PASSWORD",
 "auth": "AUTH_TOKEN",
 "email": "mail@company.com"
}
}

Il s'agit des données utilisateur dans GitLab, le code Kubernetes extraira l'image du registre.

Une fois que tout est terminĂ©, vous pouvez supprimer l'installation actuelle (qui ne fonctionne pas correctement) du tableau de bord avec la commande :

$ ./ctl.sh -d

... et rĂ©installez tout :

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

Il est temps d'aller sur le Dashboard et de trouver un bouton de connexion plutĂŽt archaĂŻque :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

AprÚs avoir cliqué dessus, GitLab nous accueillera en nous proposant de nous connecter à sa page habituelle (bien sûr, si nous n'y sommes pas déjà connectés) :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Nous nous connectons avec les informations d'identification GitLab - et tout est fait :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

À propos des fonctionnalitĂ©s du tableau de bord

Si vous ĂȘtes un dĂ©veloppeur qui n'a jamais travaillĂ© avec Kubernetes auparavant, ou si, pour une raison quelconque, vous n'avez jamais rencontrĂ© Dashboard auparavant, je vais illustrer certaines de ses fonctionnalitĂ©s.

Tout d’abord, vous pouvez constater que « tout est vert » :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Des donnĂ©es plus dĂ©taillĂ©es sont Ă©galement disponibles pour les pods, telles que les variables d'environnement, l'image tĂ©lĂ©chargĂ©e, les arguments de lancement et leur Ă©tat :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Les dĂ©ploiements ont des statuts visibles :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

...et d'autres détails :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

... et il y a aussi la possibilitĂ© d'adapter le dĂ©ploiement :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Le résultat de cette opération :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Parmi les autres fonctionnalitĂ©s utiles dĂ©jĂ  mentionnĂ©es au dĂ©but de l'article, citons l'affichage des journaux :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

... et la fonction pour se connecter Ă  la console du conteneur du pod sĂ©lectionnĂ© :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Par exemple, vous pouvez Ă©galement consulter les limites/requĂȘtes sur les nƓuds :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

Bien sûr, ce ne sont pas toutes les capacités du panneau, mais j'espÚre que vous comprenez l'idée générale.

Inconvénients de l'intégration et du tableau de bord

Dans l'intĂ©gration dĂ©crite, il n'y a pas contrĂŽle d'accĂšs. GrĂące Ă  lui, tous les utilisateurs ayant accĂšs Ă  GitLab ont accĂšs au tableau de bord. Ils disposent du mĂȘme accĂšs dans le Tableau de bord lui-mĂȘme, correspondant aux droits du Tableau de bord lui-mĂȘme, qui sont dĂ©finis dans RBAC. Évidemment, cela ne convient pas Ă  tout le monde, mais dans notre cas, cela s'est avĂ©rĂ© suffisant.

Parmi les inconvĂ©nients notables du tableau de bord lui-mĂȘme, je note les suivants :

  • il est impossible d'accĂ©der Ă  la console du conteneur d'initialisation ;
  • il est impossible de modifier les dĂ©ploiements et les StatefulSets, bien que cela puisse ĂȘtre corrigĂ© dans ClusterRole ;
  • La compatibilitĂ© de Dashboard avec les derniĂšres versions de Kubernetes et l'avenir du projet soulĂšvent des questions.

Le dernier problÚme mérite une attention particuliÚre.

État du tableau de bord et alternatives

Tableau de compatibilité du tableau de bord avec les versions de Kubernetes, présenté dans la derniÚre version du projet (v1.10.1), pas trÚs content :

Intégration du tableau de bord Kubernetes et des utilisateurs GitLab

MalgrĂ© cela, il existe (dĂ©jĂ  adoptĂ© en janvier) RP #3476, qui annonce le support de K8s 1.13. De plus, parmi les problĂšmes du projet, vous pouvez trouver des rĂ©fĂ©rences Ă  des utilisateurs travaillant avec le panneau dans K8s 1.14. Enfin, commet dans la base de code du projet ne vous arrĂȘtez pas. Donc (au moins !) l’état actuel du projet n’est pas aussi mauvais qu’il y paraĂźt Ă  premiĂšre vue d’aprĂšs le tableau de compatibilitĂ© officiel.

Enfin, il existe des alternatives au Dashboard. Parmi eux:

  1. K8Dash — une interface jeune (les premiers commits datent de mars de cette annĂ©e), qui offre dĂ©jĂ  de bonnes fonctionnalitĂ©s, comme une reprĂ©sentation visuelle de l'Ă©tat actuel du cluster et la gestion de ses objets. PositionnĂ© comme une « interface temps rĂ©el », car met automatiquement Ă  jour les donnĂ©es affichĂ©es sans que vous ayez Ă  actualiser la page dans le navigateur.
  2. Console OpenShift - une interface web de Red Hat OpenShift, qui amÚnera cependant d'autres développements du projet dans votre cluster, ce qui ne convient pas à tout le monde.
  3. Kubernateur est un projet intĂ©ressant, créé comme une interface de niveau infĂ©rieur (que Dashboard) avec la possibilitĂ© de visualiser tous les objets du cluster. Cependant, il semble que son dĂ©veloppement se soit arrĂȘtĂ©.
  4. Polaris - juste l'autre jour annoncé un projet qui combine les fonctions d'un panneau (affiche l'état actuel du cluster, mais ne gÚre pas ses objets) et de « validation automatique des meilleures pratiques » (vérifie le cluster pour l'exactitude des configurations des déploiements qui y sont exécutés).

Au lieu de conclusions

Dashboard est un outil standard pour les clusters Kubernetes que nous servons. Son intégration avec GitLab fait également partie de notre installation par défaut, car de nombreux développeurs sont enthousiasmés par les capacités dont ils disposent avec ce panneau.

Kubernetes Dashboard propose périodiquement des alternatives de la communauté Open Source (et nous sommes heureux de les considérer), mais à ce stade, nous restons avec cette solution.

PS

A lire aussi sur notre blog :

Source: habr.com

Achetez un hĂ©bergement fiable pour les sites avec protection DDoS, serveurs VPS VDS đŸ”„ Achetez un hĂ©bergement web fiable avec protection DDoS, serveurs VPS et VDS | ProHoster