Predstavujem vám návod na generovanie prístupu do klastra Kubernetes pomocou Dex, dex-k8s-authenticator a GitHub.
Miestny meme z chatu Kubernetes v ruskom jazyku telegram
Úvod
Kubernetes používame na vytváranie dynamických prostredí pre vývojový a QA tím. Chceme im teda poskytnúť prístup do klastra pre palubnú dosku aj kubectl. Vanilla Kubernetes na rozdiel od OpenShift nemá natívnu autentifikáciu, takže na to používame nástroje tretích strán.
GitHub – jednoducho preto, že v našej spoločnosti používame GitHub
Snažili sme sa použiť Google OIDC, ale bohužiaľ sme neúspešný začať ich so skupinami, takže integrácia s GitHub nám celkom vyhovovala. Bez mapovania skupín nebude možné vytvárať politiky RBAC založené na skupinách.
Ako teda funguje náš autorizačný proces Kubernetes vo vizuálnej reprezentácii:
Autorizačný proces
Trochu podrobnejšie a bod po bode:
Používateľ sa prihlási do dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator prepošle požiadavku spoločnosti Dex (dex.k8s.example.com)
Dex presmeruje na prihlasovaciu stránku GitHub
GitHub vygeneruje potrebné informácie o autorizácii a vráti ich spoločnosti Dex
Dex odovzdá prijaté informácie dex-k8s-authenticator
Používateľ dostane token OIDC z GitHubu
dex-k8s-authenticator pridá token do kubeconfig
kubectl odovzdá token KubeAPIServeru
KubeAPIServer vracia prístupy do kubectl na základe odovzdaného tokenu
Používateľ získa prístup z kubectl
Prípravné akcie
Samozrejme už máme nainštalovaný klaster Kubernetes (k8s.example.com) a tiež sa dodáva s predinštalovaným HELM. Máme tiež organizáciu na GitHub (super-org).
Ak nemáte HELM, nainštalujte si ho veľmi jednoduché.
Najprv musíme nastaviť GitHub.
Prejdite na stránku nastavení organizácie, (https://github.com/organizations/super-org/settings/applications) a vytvorte novú aplikáciu (autorizovaná aplikácia OAuth):
Webová adresa pre spätné volanie autorizácie: https://dex.k8s.example.com/callback
Pozor na odkazy, dôležité je nestratiť lomítka.
Ako odpoveď na vyplnený formulár vygeneruje GitHub Client ID и Client secret, uschovajte ich na bezpečnom mieste, budú nám užitočné (používame napr Klenba na ukladanie tajomstiev):
Prejdite na prihlasovaciu stránku (https://login.k8s.example.com) a prihláste sa pomocou svojho účtu GitHub:
Prihlasovacia stránka
Prihlasovacia stránka bola presmerovaná na GitHub
Ak chcete získať prístup, postupujte podľa vygenerovaných pokynov
Po skopírovaní a vložení z webovej stránky môžeme použiť kubectl na správu našich klastrových zdrojov:
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"
A funguje to, všetci používatelia GitHubu v našej organizácii môžu vidieť zdroje a prihlásiť sa do modulov, ale nemajú právo ich meniť.