Kubernetes
De acuerdo con la documentación de Kubernetes, el Servidor API de Kubernetes puede autenticarse usando OpenID Connect (OIDC). Este artículo le guiará sobre cómo configurar la autenticación en Kubernetes usando Casdoor.
Requisitos del entorno
Antes de comenzar, asegúrese de tener el siguiente entorno:
- Un clúster de Kubernetes.
- Una aplicación Casdoor como este sitio de demostración.
- herramienta de comando kubectl (opcional).
Kubernetes oidc-issuer-url
solo acepta URLs que usan el prefijo https://
. Por lo tanto, su aplicación Casdoor debe estar desplegada en un sitio web HTTPS.
Paso 1: Crear una Aplicación Casdoor y una Cuenta de Usuario para Autenticación
Vaya a su aplicación Casdoor y agregue una nueva aplicación llamada Kubernetes. Por favor, recuerde el Name
, Organization
, client ID
, client Secret
, y agregue algunos tipos de concesión a esta aplicación.
A continuación, agregue un nuevo usuario a la aplicación que acaba de crear. Tenga en cuenta que la Organization
y la Signup application
utilizadas aquí deben corresponder a la aplicación registrada anteriormente.
Paso 2: Configurar el Servidor API de Kubernetes con Autenticación OIDC
Para habilitar el complemento OIDC, necesita configurar las siguientes banderas en el servidor API:
--oidc-issuer-url
: URL del proveedor que permite al servidor API descubrir claves de firma públicas.--oidc-client-id
: Un id de cliente para el cual todos los tokens deben ser emitidos.
Este artículo utiliza minikube para la demostración. Puede configurar el complemento OIDC para el servidor API de minikube usando el siguiente comando al inicio:
minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe
Paso 3: Probar la Autenticación OIDC
Obtener Información de Autenticación
Debido a la falta de un frontend en kubectl, la autenticación se puede realizar enviando una solicitud POST al servidor de Casdoor. Aquí está el código en Python que envía una solicitud POST al servidor de Casdoor y recupera el id_token
y 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)
Después de ejecutar este código, debería recibir una respuesta similar a la siguiente:
{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}
Ahora, puede usar el id_token
que acaba de obtener para autenticarse con el servidor API de Kubernetes.
Autenticación Basada en Solicitud HTTP
Agregue el token al encabezado de la solicitud.
curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
https://www.xxx.com
es la dirección de despliegue del servidor API de Kubernetes.
Autenticación Basada en Cliente Kubectl
Método de Archivo de Configuración
Escriba la siguiente configuración en el archivo ~/.kube/config
. Debe reemplazar cada elemento de configuración en el archivo de configuración anterior con los valores que obtuvo anteriormente.
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
Ahora, puede acceder directamente a su servidor API usando kubectl. Intente ejecutar un comando de prueba.
kubectl cluster-info
Método de Argumento de Línea de Comando
Alternativamente, puede autenticarse agregando directamente el id_token
a los parámetros de línea de comando de kubectl.
kubectl --token=$(id_token) cluster-info