Authenticeer in Kubernetes met GitHub OAuth en Dex
Ik presenteer onder uw aandacht een tutorial voor het genereren van toegang tot een Kubernetes-cluster met behulp van Dex, dex-k8s-authenticator en GitHub.
Lokale meme van de Russischtalige Kubernetes-chat Telegram
Introductie
We gebruiken Kubernetes om dynamische omgevingen te creëren voor het ontwikkelings- en QA-team. We willen ze dus toegang geven tot het cluster voor zowel het dashboard als kubectl. In tegenstelling tot OpenShift beschikt vanilla Kubernetes niet over native authenticatie, daarom gebruiken we hiervoor tools van derden.
GitHub - simpelweg omdat we GitHub in ons bedrijf gebruiken
We hebben geprobeerd Google OIDC te gebruiken, maar helaas mislukt om ze met groepen te starten, dus de integratie met GitHub beviel ons prima. Zonder groepstoewijzing is het niet mogelijk om RBAC-beleid te maken op basis van groepen.
Hoe werkt ons Kubernetes-autorisatieproces in een visuele weergave:
Autorisatieproces
Iets gedetailleerder en punt voor punt:
Gebruiker logt in op dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator stuurt het verzoek door naar Dex (dex.k8s.example.com)
Dex verwijst door naar de GitHub-inlogpagina
GitHub genereert de benodigde autorisatie-informatie en stuurt deze terug naar Dex
Dex geeft de ontvangen informatie door aan dex-k8s-authenticator
De gebruiker ontvangt een OIDC-token van GitHub
dex-k8s-authenticator voegt een token toe aan kubeconfig
kubectl geeft het token door aan KubeAPIServer
KubeAPIServer retourneert toegang tot kubectl op basis van het doorgegeven token
De gebruiker krijgt toegang van kubectl
Voorbereidende acties
Natuurlijk hebben we al een Kubernetes-cluster geïnstalleerd (k8s.example.com), en wordt ook geleverd met HELM vooraf geïnstalleerd. We hebben ook een organisatie op GitHub (super-org).
Als u geen HELM heeft, installeer deze dan eenvoudige.
Eerst moeten we GitHub instellen.
Ga naar de pagina met organisatie-instellingen (https://github.com/organizations/super-org/settings/applications) en maak een nieuwe applicatie (Authorized OAuth App):
Een nieuwe applicatie maken op GitHub
Vul de velden in met de benodigde URL's, bijvoorbeeld:
Wees voorzichtig met links, het is belangrijk dat er geen schuine strepen verloren gaan.
Als reactie op een ingevuld formulier genereert GitHub Client ID и Client secret, bewaar ze op een veilige plaats, ze zullen ons van pas komen (wij gebruiken bijvoorbeeld Gewelf voor het opslaan van geheimen):
Laten we de functionaliteit van de services controleren (Dex zou code 400 moeten retourneren, en dex-k8s-authenticator zou code 200 moeten retourneren):
curl -sI https://dex.k8s.example.com/callback | head -1
HTTP/2 400
curl -sI https://login.k8s.example.com/ | head -1
HTTP/2 200
RBAC-configuratie
We maken een ClusterRole voor de groep, in ons geval met alleen-lezen toegang:
Ga naar de inlogpagina (https://login.k8s.example.com) en log in met uw GitHub-account:
Login pagina
Inlogpagina doorgestuurd naar GitHub
Volg de gegenereerde instructies om toegang te krijgen
Na het kopiëren en plakken vanaf de webpagina kunnen we kubectl gebruiken om onze clusterbronnen te beheren:
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"
En het werkt, alle GitHub-gebruikers in onze organisatie kunnen bronnen zien en inloggen op pods, maar ze hebben geen rechten om deze te wijzigen.