Předkládám vaší pozornosti tutoriál pro generování přístupu ke clusteru Kubernetes pomocí Dex, dex-k8s-authenticator a GitHub.
Místní meme z ruskojazyčného chatu Kubernetes Telegram
úvod
Kubernetes používáme k vytváření dynamických prostředí pro vývojový tým a QA. Chceme jim tedy poskytnout přístup ke clusteru jak pro palubní desku, tak pro kubectl. Na rozdíl od stejného OpenShiftu nemá vanilla Kubernetes nativní ověřování, takže k tomu používáme nástroje třetích stran.
GitHub – jednoduše proto, že GitHub v naší společnosti používáme
Zkoušeli jsme použít Google OIDC, ale bohužel jsme selhalo spustit je se skupinami, takže integrace s GitHub nám vyhovovala. Bez mapování skupin nebude možné vytvářet zásady RBAC založené na skupinách.
Jak tedy funguje náš autorizační proces Kubernetes ve vizuální reprezentaci:
Autorizační proces
Trochu podrobněji a bod po bodu:
Uživatel se přihlásí do dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator přesměruje požadavek na Dex (dex.k8s.example.com)
Dex přesměruje na přihlašovací stránku GitHub
GitHub vygeneruje požadované informace o autorizaci a vrátí je společnosti Dex
Dex předá přijaté informace do dex-k8s-authenticator
Uživatel získá token OIDC z GitHubu
dex-k8s-authenticator přidá token do kubeconfig
kubectl předá token KubeAPIServeru
KubeAPIServer na základě předaného tokenu vrátí přístup ke kubectl
Uživatel přistupuje z kubectl
Přípravné akce
Samozřejmě již máme nainstalovaný cluster Kubernetes (k8s.example.com), stejně jako předinstalovaný HELM. Máme také organizaci na GitHubu (super-org).
Pokud nemáte HELM, nainstalujte si ji velmi jednoduché.
Nejprve musíme nastavit GitHub.
Přejděte na stránku nastavení organizace, (https://github.com/organizations/super-org/settings/applications) a vytvořte novou aplikaci (autorizovaná aplikace OAuth):
Vytvořte novou aplikaci na GitHubu
Vyplňte pole požadovanými adresami URL, například:
V reakci na vyplněný formulář GitHub vygeneruje Client ID и Client secret, uložte si je na bezpečné místo, budou se nám hodit (používáme např Klenba pro zachování tajemství):
Přejděte na přihlašovací stránkuhttps://login.k8s.example.com) a přihlaste se pomocí účtu GitHub:
Autorizační stránka
Autorizační stránka přesměrována na GitHub
Chcete-li získat přístup, postupujte podle vygenerovaných pokynů
Po zkopírování a vložení z webové stránky můžeme použít kubectl ke správě našich zdrojů clusteru:
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šichni uživatelé GitHubu v naší organizaci mohou vidět zdroje a přihlásit se do podů, ale nemají oprávnění je měnit.