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

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.

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

Add a user; set Organization and Signup application to the application you created.

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

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