Passer au contenu principal

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).
note

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.

Créer une application dans Casdoor Types de grant

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.

Ajouter un utilisateur dans Casdoor

É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