Kubernetes
Laut der Kubernetes-Dokumentation, kann der API-Server von Kubernetes mit OpenID Connect (OIDC) authentifiziert werden. Dieser Artikel wird Sie anleiten, wie Sie die Authentifizierung in Kubernetes unter Verwendung von Casdoor konfigurieren.
Systemanforderungen
Bevor Sie beginnen, stellen Sie bitte sicher, dass Sie folgende Umgebung haben:
- Ein Kubernetes-Cluster.
- Eine Casdoor-Anwendung wie diese Demo-Website.
- kubectl-Befehlswerkzeug (optional).
Kubernetes oidc-issuer-url
akzeptiert nur URLs, die das https://
-Präfix verwenden. Ihre Casdoor-Anwendung sollte also auf einer HTTPS-Website bereitgestellt werden.
Schritt 1: Erstellen einer Casdoor-App und eines Benutzerkontos für die Authentifizierung
Gehen Sie zu Ihrer Casdoor-Anwendung und fügen Sie eine neue Anwendung namens Kubernetes hinzu. Bitte merken Sie sich den Name
, Organization
, client ID
, client Secret
und fügen Sie einige Grant-Typen zu dieser App hinzu.
Als Nächstes fügen Sie einen neuen Benutzer zu der Anwendung hinzu, die Sie gerade erstellt haben. Bitte beachten Sie, dass die Organization
und Signup application
, die hier verwendet werden, der zuvor registrierten App entsprechen sollten.
Schritt 2: Konfigurieren des Kubernetes API-Servers mit OIDC-Authentifizierung
Um das OIDC-Plugin zu aktivieren, müssen Sie die folgenden Flags auf dem API-Server konfigurieren:
--oidc-issuer-url
: URL des Anbieters, der es dem API-Server ermöglicht, öffentliche Signaturschlüssel zu entdecken.--oidc-client-id
: Eine Client-ID, für die alle Token ausgestellt sein müssen.
Dieser Artikel verwendet Minikube zur Demonstration. Sie können das OIDC-Plugin für den API-Server von Minikube mit dem folgenden Befehl beim Start konfigurieren:
minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe
Schritt 3: OIDC-Authentifizierung testen
Authentifizierungsinformationen abrufen
Aufgrund des Fehlens einer Frontend in kubectl kann die Authentifizierung durch Senden einer POST-Anfrage an den Casdoor-Server durchgeführt werden. Hier ist der Code in Python, der eine POST-Anfrage an den Casdoor-Server sendet und das id_token
und refresh_token
abruft:
import requests
import json
url = "https://demo.casdoor.com/api/login/oauth/access_token"
payload = json.dumps({
"grant_type": "password",
"client_id": "Kubernetes",
"client_secret": "72c65c3912aec24a9f3ec41b65a7577114ed2bae",
"username": "user_3u94sf",
"password": "123456"
})
response = requests.request("POST", url, data=payload)
print(response.text)
Nachdem Sie diesen Code ausgeführt haben, sollten Sie eine ähnliche Antwort wie die folgende erhalten:
{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}
Jetzt können Sie das id_token
, das Sie gerade erhalten haben, verwenden, um sich beim Kubernetes API-Server zu authentifizieren.
HTTP-Anfragebasierte Authentifizierung
Fügen Sie das Token zum Anfrageheader hinzu.
curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
https://www.xxx.com
ist die Bereitstellungsadresse des Kubernetes API-Servers.
Kubectl-Client-basierte Authentifizierung
Konfigurationsdatei-Methode
Schreiben Sie die folgende Konfiguration in die Datei ~/.kube/config
. Sie sollten jedes Konfigurationselement in der obigen Konfigurationsdatei durch die Werte ersetzen, die Sie zuvor erhalten haben.
users:
- name: minikube
user:
auth-provider:
config:
client-id: Kubernetes
client-secret: 72c65c3912aec24a9f3ec41b65a7577114ed2bae
id-token: $(id_token)
idp-issuer-url: https://demo.casdoor.com
refresh-token: $(refresh_token)
name: oidc
Jetzt können Sie direkt mit kubectl auf Ihren API-Server zugreifen. Versuchen Sie, einen Testbefehl auszuführen.
kubectl cluster-info
Kommandozeilenargument-Methode
Alternativ können Sie sich authentifizieren, indem Sie das id_token
direkt zu den Kommandozeilenparametern von kubectl hinzufügen.
kubectl --token=$(id_token) cluster-info