Jeg presenterer for din oppmerksomhet en veiledning for å generere tilgang til en Kubernetes-klynge ved hjelp av Dex, dex-k8s-autenticator og GitHub.
Lokal meme fra den russiskspråklige Kubernetes chatter inn Telegram
Innledning
Vi bruker Kubernetes for å skape dynamiske miljøer for utviklings- og QA-teamet. Så vi ønsker å gi dem tilgang til klyngen for både dashbordet og kubectl. I motsetning til OpenShift har ikke vanilla Kubernetes innebygd autentisering, så vi bruker tredjepartsverktøy for dette.
GitHub – rett og slett fordi vi bruker GitHub i selskapet vårt
Vi prøvde å bruke Google OIDC, men dessverre mislyktes å starte dem med grupper, så integrasjonen med GitHub passet oss ganske bra. Uten gruppekartlegging vil det ikke være mulig å lage RBAC-policyer basert på grupper.
Så hvordan fungerer Kubernetes-autorisasjonsprosessen vår i en visuell representasjon:
Autorisasjonsprosess
Litt mer detaljert og punkt for punkt:
Bruker logger på dex-k8s-autenticator (login.k8s.example.com)
dex-k8s-authenticator videresender forespørselen til Dex (dex.k8s.example.com)
Dex omdirigerer til GitHub-påloggingssiden
GitHub genererer nødvendig autorisasjonsinformasjon og returnerer den til Dex
Dex sender den mottatte informasjonen til dex-k8s-authenticator
Brukeren mottar et OIDC-token fra GitHub
dex-k8s-authenticator legger til token til kubeconfig
kubectl sender tokenet til KubeAPIServer
KubeAPIServer returnerer tilganger til kubectl basert på det passerte tokenet
Brukeren får tilgang fra kubectl
Forberedende handlinger
Selvfølgelig har vi allerede en Kubernetes-klynge installert (k8s.example.com), og leveres også med HELM forhåndsinstallert. Vi har også en organisasjon på GitHub (super-org).
Hvis du ikke har HELM, installer det meget enkel.
Først må vi sette opp GitHub.
Gå til siden for organisasjonsinnstillinger, (https://github.com/organizations/super-org/settings/applications) og opprett en ny applikasjon (Autorisert OAuth-app):
Opprette en ny applikasjon på GitHub
Fyll ut feltene med de nødvendige nettadressene, for eksempel:
Hjemmeside-URL: https://dex.k8s.example.com
Nettadresse for tilbakeringing av autorisasjon: https://dex.k8s.example.com/callback
Vær forsiktig med lenker, det er viktig å ikke miste skråstreker.
Som svar på et utfylt skjema vil GitHub generere Client ID и Client secret, oppbevar dem på et trygt sted, vil de være nyttige for oss (for eksempel bruker vi Vault for lagring av hemmeligheter):
Gå til påloggingssiden (https://login.k8s.example.com) og logg på med GitHub-kontoen din:
Påloggingsside
Påloggingsside omdirigert til GitHub
Følg de genererte instruksjonene for å få tilgang
Etter å ha kopiert og limt inn fra nettsiden, kan vi bruke kubectl til å administrere klyngressursene våre:
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"
Og det fungerer, alle GitHub-brukere i organisasjonen vår kan se ressurser og logge på pods, men de har ikke rettigheter til å endre dem.