Authentification Kubernetes avec GitHub OAuth et Dex
Je présente à votre attention un tutoriel pour générer un accès à un cluster Kubernetes en utilisant Dex, dex-k8s-authenticator et GitHub.
Mème local du chat Kubernetes en russe dans Telegram
introduction
Nous utilisons Kubernetes pour créer des environnements dynamiques pour l'équipe de développement et l'AQ. Nous voulons donc leur donner accès au cluster à la fois pour le tableau de bord et kubectl. Contrairement au même OpenShift, vanilla Kubernetes n'a pas d'authentification native, nous utilisons donc des outils tiers pour cela.
GitHub - simplement parce que nous utilisons GitHub dans notre entreprise
Nous avons essayé d'utiliser Google OIDC, mais malheureusement nous manqué pour les démarrer avec des groupes, donc l'intégration avec GitHub nous convenait parfaitement. Sans mappage de groupe, il ne sera pas possible de créer des stratégies RBAC basées sur des groupes.
Alors, comment fonctionne notre processus d'autorisation Kubernetes dans une représentation visuelle :
Processus d'autorisation
Un peu plus de détails et point par point :
L'utilisateur se connecte à dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator redirige la requête vers Dex (dex.k8s.example.com)
Dex redirige vers la page de connexion GitHub
GitHub génère les informations d'autorisation requises et les renvoie à Dex
Dex transmet les informations reçues à dex-k8s-authenticator
L'utilisateur obtient le jeton OIDC de GitHub
dex-k8s-authenticator ajoute un jeton à kubeconfig
kubectl transmet le jeton à KubeAPIServer
KubeAPIServer basé sur le jeton transmis renvoie l'accès à kubectl
Accès utilisateur depuis kubectl
Actions préparatoires
Bien sûr, nous avons déjà installé un cluster Kubernetes (k8s.example.com), ainsi que HELM préinstallé. Nous avons également une organisation sur GitHub (super-org).
Si vous n'avez pas HELM, installez-le très simple.
Nous devons d'abord configurer GitHub.
Accédez à la page des paramètres de l'organisation, (https://github.com/organizations/super-org/settings/applications) et créez une nouvelle application (application OAuth autorisée) :
Créer une nouvelle application sur GitHub
Remplissez les champs avec les URL requises, par exemple :
Page d'accueil URL: https://dex.k8s.example.com
URL de rappel d'autorisation : https://dex.k8s.example.com/callback
Attention aux liens, il est important de ne pas perdre les slashs.
En réponse au formulaire rempli, GitHub générera Client ID и Client secret, conservez-les en lieu sûr, elles nous seront utiles (par exemple, nous utilisons Voûte pour garder des secrets):
Aller à la page de connexionhttps://login.k8s.example.com) et connectez-vous avec un compte GitHub :
Page d'autorisation
Page d'autorisation redirigée vers GitHub
Suivez les instructions générées pour accéder
Après avoir copié-collé depuis la page Web, nous pouvons utiliser kubectl pour gérer nos ressources de cluster :
kubectl get po
NAME READY STATUS RESTARTS AGE
mypod 1/1 Running 0 3d
kubectl delete po mypod
Error from server (Forbidden): pods "mypod" is forbidden: User "[email protected]" cannot delete pods in the namespace "default"
Et cela fonctionne, tous les utilisateurs GitHub de notre organisation peuvent voir les ressources et se connecter aux pods, mais ils n'ont pas l'autorisation de les modifier.