Kubernetes
Згідно з документацією Kubernetes, сервер API Kubernetes може бути аутентифікований за допомогою OpenID Connect (OIDC). Ця стаття допоможе вам налаштувати аутентифікацію в Kubernetes за допомогою Casdoor.
Вимоги до середовища
Prerequisites:
- Кластер Kubernetes.
- Додаток Casdoor, подібний до цього демо-сайту.
- Інструмент командного рядка kubectl (необов'язково).
Kubernetes oidc-issuer-url приймає лише URL-адреси, які використовують префікс https://. Отже, ваш додаток Casdoor має бути розгорнутий на веб-сайті з HTTPS.
Крок 1: Створення додатку Casdoor та облікового запису користувача для аутентифікації
In Casdoor add an application (e.g. Kubernetes). Note Name, Organization, Client ID, and Client secret. Enable the grant types the cluster will use.
Add a user; set Organization and Signup application to the application you created.

Крок 2: Налаштування сервера API Kubernetes з аутентифікацією OIDC
To enable the OIDC plugin, set the following flags on the API server:
--oidc-issuer-url: URL провайдера, який дозволяє серверу API виявляти публічні ключі підпису.--oidc-client-id: Ідентифікатор клієнта, для якого мають бути видані всі токени.
Ця стаття використовує minikube для демонстрації. Configure the OIDC plugin for the minikube API server using the following command at startup:
minikube start --extra-config=apiserver.oidc-issuer-url=https://demo.casdoor.com --extra-config=apiserver.oidc-client-id=294b09fbc17f95daf2fe
Крок 3: Тестування аутентифікації OIDC
Отримання інформації для аутентифікації
Через відсутність фронтенду в kubectl, аутентифікацію можна виконати, надіславши POST-запит на сервер Casdoor. Ось код на Python, який надсилає POST-запит на сервер Casdoor та отримує id_token та 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)
Після виконання цього коду ви маєте отримати відповідь, подібну до наступної:
{
"access_token": "xxx",
"id_token": "yyy",
"refresh_token": "zzz",
"token_type": "Bearer",
"expires_in": 72000,
"scope": ""
}
Use the obtained id_token to authenticate with the Kubernetes API server.
Аутентифікація на основі HTTP-запиту
Додайте токен до заголовка запиту.
curl https://www.xxx.com -k -H "Authorization: Bearer $(id_token)"
https://www.xxx.com- це адреса розгортання сервера API Kubernetes.
Аутентифікація на основі клієнта Kubectl
Метод файлу конфігурації
Запишіть наступну конфігурацію до файлу ~/.kube/config. Вам слід замінити кожен елемент конфігурації у файлі конфігурації вище на значення, які ви отримали раніше.
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
Access the API server with kubectl. Спробуйте виконати тестову команду.
kubectl cluster-info
Метод аргументу командного рядка
Alternatively, pass the id_token in kubectl command-line parameters.
kubectl --token=$(id_token) cluster-info