Autenticati in Kubernetes utilizzando GitHub OAuth e Dex
Presento alla tua attenzione un tutorial per generare l'accesso a un cluster Kubernetes utilizzando Dex, dex-k8s-authenticator e GitHub.
Meme locale dalla chat di Kubernetes in lingua russa Telegram
Introduzione
Utilizziamo Kubernetes per creare ambienti dinamici per il team di sviluppo e QA. Vogliamo quindi dare loro l'accesso al cluster sia per il dashboard che per kubectl. A differenza di OpenShift, Kubernetes Vanilla non dispone di autenticazione nativa, quindi utilizziamo strumenti di terze parti per questo.
GitHub: semplicemente perché utilizziamo GitHub nella nostra azienda
Abbiamo provato a utilizzare Google OIDC, ma sfortunatamente noi mancato per avviarli con i gruppi, quindi l'integrazione con GitHub ci è andata abbastanza bene. Senza la mappatura dei gruppi, non sarà possibile creare policy RBAC basate sui gruppi.
Quindi, come funziona il nostro processo di autorizzazione Kubernetes in una rappresentazione visiva:
Processo di autorizzazione
Un po' più nel dettaglio e punto per punto:
L'utente accede a dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator inoltra la richiesta a Dex (dex.k8s.example.com)
Dex reindirizza alla pagina di accesso di GitHub
GitHub genera le informazioni di autorizzazione necessarie e le restituisce a Dex
Dex passa le informazioni ricevute a dex-k8s-authenticator
L'utente riceve un token OIDC da GitHub
dex-k8s-authenticator aggiunge il token a kubeconfig
kubectl passa il token a KubeAPIServer
KubeAPIServer restituisce gli accessi a kubectl in base al token passato
L'utente ottiene l'accesso da kubectl
Azioni preparatorie
Naturalmente abbiamo già installato un cluster Kubernetes (k8s.example.com), e viene fornito anche con HELM preinstallato. Abbiamo anche un'organizzazione su GitHub (super-org).
Se non hai HELM, installalo molto semplice.
Per prima cosa dobbiamo configurare GitHub.
Vai alla pagina delle impostazioni dell'organizzazione, (https://github.com/organizations/super-org/settings/applications) e creare una nuova applicazione (app OAuth autorizzata):
Creazione di una nuova applicazione su GitHub
Compila i campi con gli URL necessari, ad esempio:
URL della home page: https://dex.k8s.example.com
URL di richiamata dell'autorizzazione: https://dex.k8s.example.com/callback
Fai attenzione ai link, è importante non perdere le barre.
In risposta a un modulo completato, GitHub genererà Client ID и Client secret, conservateli in un luogo sicuro, ci saranno utili (usiamo ad esempio Volta per memorizzare i segreti):
Vai alla pagina di accesso (https://login.k8s.example.com) e accedi utilizzando il tuo account GitHub:
Pagina di login
Pagina di accesso reindirizzata a GitHub
Seguire le istruzioni generate per ottenere l'accesso
Dopo aver copiato e incollato dalla pagina web, possiamo utilizzare kubectl per gestire le risorse del nostro 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"
E funziona, tutti gli utenti GitHub nella nostra organizzazione possono vedere le risorse e accedere ai pod, ma non hanno i diritti per modificarle.