Перейти до основного вмісту

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 та додайте деякі типи надання доступу до цього додатку.

Створіть додаток у Casdoor Типи надання доступу

Далі додайте нового користувача до додатку, який ви щойно створили. Зверніть увагу, що Organization та Signup application, які використовуються тут, мають відповідати додатку, зареєстрованому раніше.

Додайте користувача в Casdoor

Крок 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