Kubernetes
Згідно з документацією Kubernetes, сервер API Kubernetes може бути аутентифікований за допомогою OpenID Connect (OIDC). Ця стаття допоможе вам налаштувати аутентифікацію в Kubernetes за допомогою Casdoor.
Вимоги до середовища
Перед початком, будь ласка, переконайтеся, що у вас є наступне середовище:
- Кластер Kubernetes.
- Додаток Casdoor, подібний до цього демо-сайту.
- Інструмент командного рядка kubectl (необов'язково).
Kubernetes oidc-issuer-url
приймає лише URL-адреси, які використовують префікс https://
. Отже, ваш додаток Casdoor має бути розгорнутий на веб-сайті з HTTPS.
Крок 1: Створення додатку Casdoor та облікового запису користувача для аутентифікації
Перейдіть до вашого додатку Casdoor та додайте новий додаток під назвою Kubernetes. Будь ласка, запам'ятайте Name
, Organization
, client ID
, client Secret
та додайте деякі типи надання доступу до цього додатку.
Далі додайте нового користувача до додатку, який ви щойно створили. Зверніть увагу, що Organization
та Signup application
, які використовуються тут, мають відповідати додатку, зареєстрованому раніше.
Крок 2: Налаштування сервера API Kubernetes з аутентифікацією OIDC
Щоб увімкнути плагін OIDC, вам потрібно налаштувати наступні прапорці на сервері API:
--oidc-issuer-url
: URL провайдера, який дозволяє серверу API виявляти публічні ключі підпису.--oidc-client-id
: Ідентифікатор клієнта, для якого мають бути видані всі токени.
Ця стаття використовує minikube для демонстрації. Ви можете налаштувати плагін OIDC для сервера API minikube, використовуючи наступну команду при запуску:
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": ""
}
Тепер ви можете використовувати id_token
, який ви щойно отримали, для аутентифікації з сервером API Kubernetes.
Аутентифікація на основі 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
Тепер ви можете безпосередньо доступити до вашого сервера API, використовуючи kubectl. Спробуйте виконати тестову команду.
kubectl cluster-info
Метод аргументу командного рядка
Крім того, ви можете аутентифікуватися, безпосередньо додавши id_token
до параметрів командного рядка kubectl.
kubectl --token=$(id_token) cluster-info