Kubernetes-Authentifizierung mit GitHub OAuth und Dex
Ich präsentiere Ihnen ein Tutorial zum Generieren des Zugriffs auf einen Kubernetes-Cluster mithilfe von Dex, dex-k8s-authenticator und GitHub.
Lokales Meme aus dem russischsprachigen Kubernetes-Chat Telegram
Einführung
Wir verwenden Kubernetes, um dynamische Umgebungen für das Entwicklungsteam und die Qualitätssicherung zu erstellen. Deshalb möchten wir ihnen Zugriff auf den Cluster sowohl für das Dashboard als auch für kubectl gewähren. Im Gegensatz zum gleichen OpenShift verfügt Vanilla Kubernetes nicht über eine native Authentifizierung, daher verwenden wir hierfür Tools von Drittanbietern.
GitHub – einfach weil wir GitHub in unserem Unternehmen nutzen
Wir haben versucht, Google OIDC zu verwenden, aber leider haben wir gescheitert um sie mit Gruppen zu starten, daher hat uns die Integration mit GitHub sehr gut gefallen. Ohne Gruppenzuordnung ist es nicht möglich, gruppenbasierte RBAC-Richtlinien zu erstellen.
Wie funktioniert also unser Kubernetes-Autorisierungsprozess in einer visuellen Darstellung:
Autorisierungsprozess
Etwas detaillierter und Punkt für Punkt:
Benutzer meldet sich bei dex-k8s-authenticator an (login.k8s.example.com)
dex-k8s-authenticator leitet die Anfrage an Dex weiter (dex.k8s.example.com)
Dex leitet zur GitHub-Anmeldeseite weiter
GitHub generiert die erforderlichen Autorisierungsinformationen und gibt sie an Dex zurück
Dex übergibt die empfangenen Informationen an dex-k8s-authenticator
Der Benutzer erhält ein OIDC-Token von GitHub
dex-k8s-authenticator fügt kubeconfig ein Token hinzu
kubectl übergibt das Token an KubeAPIServer
KubeAPIServer gibt basierend auf dem übergebenen Token Zugriff auf kubectl zurück
Benutzerzugriffe über kubectl
Vorbereitende Maßnahmen
Natürlich haben wir bereits einen Kubernetes-Cluster installiert (k8s.example.com), sowie HELM vorinstalliert. Wir haben auch eine Organisation auf GitHub (super-org).
Wenn Sie HELM nicht haben, installieren Sie es sehr einfach.
Zuerst müssen wir GitHub einrichten.
Gehen Sie zur Seite mit den Organisationseinstellungen (https://github.com/organizations/super-org/settings/applications) und erstellen Sie eine neue Anwendung (Autorisierte OAuth-App):
Erstellen Sie eine neue App auf GitHub
Füllen Sie die Felder mit den erforderlichen URLs aus, zum Beispiel:
Seien Sie vorsichtig mit Links, es ist wichtig, dass Schrägstriche nicht verloren gehen.
Als Antwort auf das ausgefüllte Formular generiert GitHub Client ID и Client secret, bewahren Sie sie an einem sicheren Ort auf, sie werden uns nützlich sein (z. B. verwenden wir Gewölbe zum Bewahren von Geheimnissen):
Gehen Sie zur Anmeldeseitehttps://login.k8s.example.com) und melden Sie sich mit einem GitHub-Konto an:
Autorisierungsseite
Autorisierungsseite auf GitHub umgeleitet
Befolgen Sie die generierten Anweisungen, um Zugriff zu erhalten
Nach dem Kopieren und Einfügen von der Webseite können wir kubectl verwenden, um unsere Clusterressourcen zu verwalten:
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"
Und es funktioniert: Alle GitHub-Benutzer in unserer Organisation können Ressourcen sehen und sich bei Pods anmelden, haben aber keine Berechtigung, diese zu ändern.