Predstavljam vašoj pažnji tutorijal za generisanje pristupa Kubernetes klasteru koristeći Dex, dex-k8s-authenticator i GitHub.
Lokalni meme iz Kubernetes chata na ruskom jeziku telegram
Uvod
Koristimo Kubernetes za kreiranje dinamičnih okruženja za razvojni i QA tim. Dakle, želimo im dati pristup klasteru i za kontrolnu ploču i za kubectl. Za razliku od OpenShift-a, vanilla Kubernetes nema izvornu autentifikaciju, pa za to koristimo alate treće strane.
GitHub - jednostavno zato što koristimo GitHub u našoj kompaniji
Pokušali smo koristiti Google OIDC, ali nažalost nije uspio da ih započnemo sa grupama, tako da nam je integracija sa GitHub-om sasvim odgovarala. Bez grupnog mapiranja, neće biti moguće kreirati RBAC politike zasnovane na grupama.
Dakle, kako naš Kubernetes proces autorizacije funkcionira u vizualnom prikazu:
Proces autorizacije
Malo više detalja i tačku po tačku:
Korisnik se prijavljuje na dex-k8s-authenticator (login.k8s.example.com)
GitHub generiše potrebne informacije o autorizaciji i vraća ih u Dex
Dex prosljeđuje primljene informacije dex-k8s-authenticatoru
Korisnik prima OIDC token od GitHub-a
dex-k8s-authenticator dodaje token u kubeconfig
kubectl prosljeđuje token KubeAPIServeru
KubeAPIServer vraća pristup kubectl-u na osnovu proslijeđenog tokena
Korisnik dobija pristup iz kubectl
Pripremne radnje
Naravno, već imamo instaliran Kubernetes klaster (k8s.example.com), a također dolazi s unaprijed instaliranim HELM-om. Imamo i organizaciju na GitHubu (super-org).
Ako nemate HELM, instalirajte ga vrlo jednostavno.
Prvo moramo postaviti GitHub.
Idite na stranicu postavki organizacije, (https://github.com/organizations/super-org/settings/applications) i kreirajte novu aplikaciju (Authorized OAuth App):
Kreiranje nove aplikacije na GitHub-u
Popunite polja potrebnim URL-ovima, na primjer:
URL početne stranice: https://dex.k8s.example.com
URL za povratni poziv autorizacije: https://dex.k8s.example.com/callback
Budite oprezni sa vezama, važno je da ne izgubite kose crte.
Kao odgovor na popunjen obrazac, GitHub će generirati Client ID и Client secret, čuvajte ih na sigurnom mjestu, bit će nam korisni (npr svod za čuvanje tajni):
Idite na stranicu za prijavu (https://login.k8s.example.com) i prijavite se koristeći svoj GitHub račun:
Stranica za prijavu
Stranica za prijavu je preusmjerena na GitHub
Slijedite generirana uputstva za pristup
Nakon kopiranja sa web stranice, možemo koristiti kubectl za upravljanje našim resursima klastera:
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"
I funkcionira, svi korisnici GitHub-a u našoj organizaciji mogu vidjeti resurse i prijaviti se na podove, ali nemaju prava da ih mijenjaju.