Saltar al contenido principal

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

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.

Cree una aplicación en Casdoor Tipos de concesió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.

Agregue un usuario en Casdoor

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