Kubernetes
Selon la documentation de Kubernetes, le serveur API de Kubernetes peut être authentifié en utilisant OpenID Connect (OIDC). Cet article vous guidera sur la configuration de l'authentification dans Kubernetes en utilisant Casdoor.
Exigences de l'environnement
Avant de commencer, veuillez vous assurer que vous disposez de l'environnement suivant :
- Un cluster Kubernetes.
- Une application Casdoor comme ce site de démonstration.
- Outil de commande kubectl (facultatif).
L'URL oidc-issuer-url
de Kubernetes n'accepte que les URL qui utilisent le préfixe https://
. Donc, votre application Casdoor devrait être déployée sur un site Web HTTPS.
Étape 1 : Créer une application Casdoor et un compte utilisateur pour l'authentification
Allez dans votre application Casdoor et ajoutez une nouvelle application appelée Kubernetes. Veuillez retenir le Name
, Organization
, client ID
, client Secret
, et ajoutez quelques types de grant à cette application.
Ensuite, ajoutez un nouvel utilisateur à l'application que vous venez de créer. Veuillez noter que l'Organization
et l'Signup application
utilisées ici doivent correspondre à l'application enregistrée précédemment.
Étape 2 : Configurer le serveur API Kubernetes avec l'authentification OIDC
Pour activer le plugin OIDC, vous devez configurer les drapeaux suivants sur le serveur API :
--oidc-issuer-url
: URL du fournisseur qui permet au serveur API de découvrir les clés de signature publiques.--oidc-client-id
: Un identifiant client pour lequel tous les jetons doivent être émis.
Cet article utilise minikube à des fins de démonstration. Vous pouvez configurer le plugin OIDC pour le serveur API de minikube en utilisant la commande suivante au démarrage :
minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe
Étape 3 : Tester l'authentification OIDC
Obtenir les informations d'authentification
En raison de l'absence d'une interface utilisateur dans kubectl, l'authentification peut être effectuée en envoyant une requête POST au serveur Casdoor. Voici le code en Python qui envoie une requête POST au serveur Casdoor et récupère le id_token
et le refresh_token
:
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)
Après avoir exécuté ce code, vous devriez recevoir une réponse similaire à la suivante :
{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}
Maintenant, vous pouvez utiliser le id_token
que vous venez d'obtenir pour vous authentifier auprès du serveur API Kubernetes.
Authentification basée sur la requête HTTP
Ajoutez le jeton à l'en-tête de la requête.
curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
https://www.xxx.com
est l'adresse de déploiement du serveur API Kubernetes.
Authentification basée sur le client Kubectl
Méthode de fichier de configuration
Écrivez la configuration suivante dans le fichier ~/.kube/config
. Vous devriez remplacer chaque élément de configuration dans le fichier de configuration ci-dessus par les valeurs que vous avez obtenues précédemment.
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
Maintenant, vous pouvez accéder directement à votre serveur API en utilisant kubectl. Essayez d'exécuter une commande de test.
kubectl cluster-info
Méthode d'argument de ligne de commande
Alternativement, vous pouvez vous authentifier en ajoutant directement le id_token
aux paramètres de ligne de commande de kubectl.
kubectl --token=$(id_token) cluster-info