Jeg præsenterer for din opmærksomhed en vejledning til generering af adgang til en Kubernetes-klynge ved hjælp af Dex, dex-k8s-authenticator og GitHub.
Lokal meme fra den russisksprogede Kubernetes chatter ind Telegram
Indledning
Vi bruger Kubernetes til at skabe dynamiske miljøer for udviklingsteamet og QA. Så vi ønsker at give dem adgang til klyngen til både dashboard og kubectl. I modsætning til den samme OpenShift har vanilla Kubernetes ikke indbygget godkendelse, så vi bruger tredjepartsværktøjer til dette.
GitHub - simpelthen fordi vi bruger GitHub i vores virksomhed
Vi forsøgte at bruge Google OIDC, men desværre mislykkedes at starte dem med grupper, så integrationen med GitHub passede os fint. Uden gruppekortlægning vil det ikke være muligt at oprette gruppebaserede RBAC-politikker.
Så hvordan fungerer vores Kubernetes-godkendelsesproces i en visuel repræsentation:
Autorisationsproces
Lidt flere detaljer og punkt for punkt:
Bruger logger på dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator omdirigerer anmodningen til Dex (dex.k8s.example.com)
Dex omdirigerer til GitHub-loginsiden
GitHub genererer de nødvendige autorisationsoplysninger og returnerer dem til Dex
Dex videregiver den modtagne information til dex-k8s-authenticator
Brugeren får OIDC-token fra GitHub
dex-k8s-authenticator tilføjer token til kubeconfig
kubectl sender token til KubeAPIServer
KubeAPIServer baseret på det beståede token returnerer adgang til kubectl
Brugeradgange fra kubectl
Forberedende handlinger
Selvfølgelig har vi allerede en Kubernetes-klynge installeret (k8s.example.com), samt HELM forudinstalleret. Vi har også en organisation på GitHub (super-org).
Hvis du ikke har HELM, skal du installere det meget enkel.
Først skal vi konfigurere GitHub.
Gå til siden med organisationsindstillinger, (https://github.com/organizations/super-org/settings/applications) og opret en ny applikation (Authorized OAuth App):
Opret en ny app på GitHub
Udfyld felterne med de påkrævede URL'er, for eksempel:
Vær forsigtig med links, det er vigtigt ikke at miste skråstreger.
Som svar på den udfyldte formular vil GitHub generere Client ID и Client secret, gem dem et sikkert sted, de vil være nyttige for os (f.eks. bruger vi Vault for at holde på hemmeligheder):
Gå til login-sidenhttps://login.k8s.example.com) og log ind med en GitHub-konto:
Autorisationsside
Autorisationsside omdirigeret til GitHub
Følg de genererede instruktioner for at få adgang
Efter at have kopieret og indsat fra websiden kan vi bruge kubectl til at administrere vores klyngresourcer:
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 virker, alle GitHub-brugere i vores organisation kan se ressourcer og logge ind på pods, men de har ikke tilladelse til at ændre dem.