Uwierzytelnij się w Kubernetes przy użyciu GitHub OAuth i Dex
Zwracam uwagę na tutorial dotyczący generowania dostępu do klastra Kubernetes przy użyciu Dexa, dex-k8s-authenticator i GitHub.
Lokalny mem z rosyjskojęzycznego czatu Kubernetes Telegram
Wprowadzenie
Używamy Kubernetesa do tworzenia dynamicznych środowisk dla zespołu deweloperskiego i QA. Chcemy więc dać im dostęp do klastra zarówno dla dashboardu, jak i kubectl. W odróżnieniu od OpenShift, waniliowy Kubernetes nie posiada natywnego uwierzytelniania, dlatego używamy do tego narzędzi innych firm.
GitHub - po prostu dlatego, że w naszej firmie korzystamy z GitHuba
Próbowaliśmy użyć Google OIDC, ale niestety nie powiodło się aby rozpocząć je od grup, więc integracja z GitHubem całkiem nam odpowiadała. Bez mapowania grup nie będzie możliwe tworzenie polityk RBAC w oparciu o grupy.
Jak zatem działa nasz proces autoryzacji Kubernetes w formie wizualnej:
Proces autoryzacji
Trochę więcej szczegółów i punkt po punkcie:
Użytkownik loguje się do dex-k8s-authenticator (login.k8s.example.com)
dex-k8s-authenticator przekazuje żądanie do Dex (dex.k8s.example.com)
Dex przekierowuje do strony logowania GitHub
GitHub generuje niezbędne informacje autoryzacyjne i zwraca je do Dex
Dex przekazuje otrzymane informacje do dex-k8s-authenticator
Użytkownik otrzymuje token OIDC z GitHuba
dex-k8s-authenticator dodaje token do kubeconfig
kubectl przekazuje token do KubeAPIServer
KubeAPIServer zwraca dostęp do kubectl na podstawie przekazanego tokena
Użytkownik uzyskuje dostęp z kubectl
Działania przygotowawcze
Oczywiście mamy już zainstalowany klaster Kubernetes (k8s.example.com), a także jest wyposażony w preinstalowany HELM. Mamy także organizację na GitHubie (super-org).
Jeśli nie masz HELM, zainstaluj go bardzo proste.
Najpierw musimy skonfigurować GitHuba.
Przejdź do strony ustawień organizacji, (https://github.com/organizations/super-org/settings/applications) i utwórz nową aplikację (Authorized OAuth App):
Tworzenie nowej aplikacji na GitHubie
Wypełnij pola niezbędnymi adresami URL, na przykład:
Uważaj na linki, ważne jest, aby nie zgubić ukośników.
W odpowiedzi na wypełniony formularz GitHub wygeneruje Client ID и Client secret, trzymaj je w bezpiecznym miejscu, przydadzą się nam (np. używamy Sklepienie do przechowywania tajemnic):
Przejdź do strony logowania (https://login.k8s.example.com) i zaloguj się przy użyciu swojego konta GitHub:
Strona logowania
Strona logowania przekierowana do GitHub
Postępuj zgodnie z wygenerowanymi instrukcjami, aby uzyskać dostęp
Po skopiowaniu i wklejeniu ze strony internetowej możemy użyć kubectl do zarządzania zasobami naszego klastra:
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 to działa, wszyscy użytkownicy GitHuba w naszej organizacji mogą widzieć zasoby i logować się do podów, ale nie mają uprawnień do ich zmiany.