Autentifikuokite „Kubernetes“ naudodami „GitHub OAuth“ ir „Dex“.
Pristatau jūsų dėmesiui mokymo programą, kaip sukurti prieigą prie „Kubernetes“ klasterio naudojant „Dex“, „dex-k8s-autenticator“ ir „GitHub“.
Vietinis memas iš rusų kalbos „Kubernetes“ kalbasi Telegram
įvedimas
Naudojame Kubernetes, kad sukurtume dinamišką aplinką kūrimo ir kokybės užtikrinimo komandai. Taigi norime suteikti jiems prieigą prie informacijos suvestinės ir „kubectl“ grupės. Skirtingai nei „OpenShift“, „vanilla Kubernetes“ neturi vietinio autentifikavimo, todėl tam naudojame trečiųjų šalių įrankius.
„GitHub“ – tiesiog todėl, kad savo įmonėje naudojame „GitHub“.
Bandėme naudoti Google OIDC, bet, deja, mes nepavyko pradėti juos su grupėmis, todėl integracija su GitHub mums labai tiko. Be grupės susiejimo nebus įmanoma sukurti RBAC politikos pagal grupes.
Taigi, kaip veikia mūsų „Kubernetes“ autorizacijos procesas vaizdinėje pavyzdyje:
Autorizacijos procesas
Šiek tiek detaliau ir taškas po taško:
Vartotojas prisijungia prie dex-k8s-authenticator (login.k8s.example.com)
„GitHub“ sugeneruoja reikiamą leidimo informaciją ir grąžina ją „Dex“.
Dex perduoda gautą informaciją dex-k8s-autenticatoriui
Vartotojas gauna OIDC prieigos raktą iš „GitHub“.
dex-k8s-autenticatorius prideda prieigos raktą prie kubeconfig
kubectl perduoda prieigos raktą KubeAPIServer
„KubeAPIServer“ grąžina prieigą prie „kubectl“ pagal perduotą prieigos raktą
Vartotojas gauna prieigą iš kubectl
Parengiamieji veiksmai
Žinoma, jau turime įdiegtą Kubernetes klasterį (k8s.example.com), taip pat yra iš anksto įdiegtas HELM. Mes taip pat turime organizaciją GitHub (super-org).
Jei neturite HELM, įdiekite jį labai paprasta.
Pirmiausia turime nustatyti „GitHub“.
Eikite į organizacijos nustatymų puslapį, (https://github.com/organizations/super-org/settings/applications) ir sukurkite naują programą (įgaliotą OAuth programą):
Naujos programos kūrimas „GitHub“.
Užpildykite laukus reikiamais URL, pavyzdžiui:
Pagrindinio puslapio URL: https://dex.k8s.example.com
Būkite atsargūs su nuorodomis, svarbu neprarasti pasvirųjų brūkšnių.
Atsakydamas į užpildytą formą, „GitHub“ sugeneruos Client ID и Client secret, laikykite juos saugioje vietoje, jie mums pravers (pavyzdžiui, naudojame Vault paslapčių saugojimui):
Eikite į prisijungimo puslapį (https://login.k8s.example.com) ir prisijunkite naudodami savo GitHub paskyrą:
Prisijungimo puslapis
Prisijungimo puslapis nukreiptas į „GitHub“.
Vykdykite sugeneruotas instrukcijas, kad gautumėte prieigą
Nukopijavę įklijavimą iš tinklalapio, galime naudoti kubectl savo klasterio ištekliams tvarkyti:
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"
Ir tai veikia, visi mūsų organizacijos „GitHub“ naudotojai gali matyti išteklius ir prisijungti prie podių, tačiau neturi teisės jų keisti.