Перейти к основному содержанию

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: 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