Оператор аутентификации (auth-controller)

О сервисе

ПараметрЗначение
Название в интерфейсеМодуль управления аутентификацией
Системное название chartshturval-auth
Компонентauth-controller
Назначение в кластереСогласование объектов User и AuthOidcClient, проверка локальных пользователей через validating webhook, подготовка данных для OIDC-клиентов.
КритическийДа
Публичный репозиторий— (компонент платформы «Штурвал»)
Неймспейсshturval-backend

auth-controller входит в Helm chart shturval-auth. Этот chart также разворачивает authn-server, session-manager и ldap-cache.

Содержание

  1. Обзор
  2. Архитектура
  3. Установка / развёртывание
  4. Диагностика
  5. Жизненный цикл
  6. Параметры оператора
  7. Справочник CRD/API

1. Обзор

Назначение: автоматическая согласованность объектов интеграции с авторизационной подсистемой: регистрируемые клиентские записи AuthOidcClient с обновлением статусных условий и связанным Secret, а также объектная модель локальных пользователей User со строгостью bcrypt через validating webhook при Create/Update.

Функции

КонтурНазначение в эксплуатации
UserReconcilerПрисутствует в сборке reconcile; изменение User не приводит к автоматической правке spec/status оператором.
AuthOidcClientReconcilerСоздание и повторное согласование OIDC-клиента у провайдера, наблюдаемость через статусные поля.
Validating webhookПроверка корректности spec.passwordHash у User.
Отслеживание изменений провайдераПовторная постановка связанных CR в очередь согласования.

Сценарии инициации

Что происходитКто инициируетНаблюдаемый эффект
Согласование AuthOidcClientПлоскость Kubernetes или событие провайдераОбновление status, при необходимости Secret.
Изменение UserПлоскость KubernetesПроверку пароля выполняет webhook при create/update.
Вызов validating webhookAPI-сервер KubernetesОтклонение некорректных значений bcrypt.
Пробы живучести и готовностиkubeletHTTP /healthz, /readyz на управляемых адресах.

Ограничения и следствия

ОграничениеСледствие для администратора
UserReconciler без модифицирующей логикиОпирайтесь на webhook и смежные сервисы; не ждите автоисправления User в reconcile.
spec.providerType принимает только значение shturvalПоле задаёт связку клиента со встроенной реализацией авторизационного провайдера.
AUTHN_ISSUER должен указывать на рабочий issuerПроверяйте значение при переводе стенда в production.
Webhook зависит от TLS-материалов и ServiceПосле изменений сертификатов проверяйте доступность admission.

Место в цепочке управления

CR AuthOidcClient становится источником данных для приложения authn-server: watcher authn-server получает конфигурацию OAuth/OIDC-клиентов из согласованных ресурсов. User ограничен политикой пароля через webhook до того, как учётные данные будут использованы в login-flow.

Ключевые характеристики

ХарактеристикаЗначение
API groupauth.shturval.tech, версия v1beta1
CR типыUser, AuthOidcClient
Область CRNamespaced
Leader election ID953fa84f.shturval.tech
Пробы оператораАдрес здоровья :8081 на флагах управления
WebhookПо умолчанию порт 9443, каталог сертификатов задаётся флагами
Изоляция процессаБинарь /manager в контейнере

2. Архитектура

КомпонентKindScopeОписание
UserCustomResourceDefinition + экземплярыNamespacebcrypt hash пользователя и группы.
AuthOidcClientCustomResourceDefinition + экземплярыNamespaceРегистрируемые OAuth-клиенты.
auth-controllerDeploymentNamespaceУправляющая логика оператора.
Secretcore/v1NamespaceСвязанная с клиентом конфиденциальная информация после согласования.

Точные имена рабочих ресурсов, labels и количество реплик определяются шаблонами chart shturval-auth.

3. Установка / развёртывание

Оператор поставляется в составе Helm chart shturval-auth. Chart создаёт Deployment auth-controller, RBAC, webhook Service и связанные TLS-материалы. Пространство имён задаётся релизом платформы.

Любые изменения параметров должны выполняться через ShturvalServicePatch (SSP) над соответствующим SSC платформы, без ручного изменения сгенерированных манифестов.

4. Диагностика

kubectl get deploy,pods -n "${NAMESPACE}"
kubectl logs -n "${NAMESPACE}" deploy/auth-controller -c manager --tail=200
kubectl get authoidcclients.auth.shturval.tech -n "${NAMESPACE}" -o wide
kubectl get users.auth.shturval.tech -n "${NAMESPACE}" -o wide
kubectl get validatingwebhookconfiguration
СобытиеВозможная причинаДействие
ConditionCreateClient = False долгоНедоступен issuer, TLS или учёт клиента у провайдераПроверить AUTHN_ISSUER, сетевую связность до authn-server и связанный Secret.
Webhook недоступенОшибка сертификатов, Service или CA bundleВосстановить связность API-сервера до webhook Service.
User отклоняется при созданииbcrypt hash не прошёл validating webhookИспользовать корректный формат bcrypt hash.

5. Жизненный цикл

User

ЭтапПоведение
Create/UpdateWebhook проверяет bcrypt; объект сохраняется при успешной валидации.
Reconcile оператораЗавершается без наблюдаемых изменений spec/status.
DeleteИспользуются стандартные политики удаления Kubernetes.

AuthOidcClient

ЭтапПоведение
Стартовое согласованиеДо финального состояния выставляется Ready=false, затем выполняется сверка с менеджером провайдера.
ПовторПри ошибках reconcile возвращает ошибку controller-runtime.
Связать SecretSecret становится связанным объектом по условию CR.
УдалениеПроверяйте остаточные ресурсы у провайдера после удаления CR.

6. Параметры оператора

Флаги процесса

ФлагПо умолчаниюЗначение
--metrics-bind-address0Адрес метрик процесса.
--health-probe-bind-address:8081Пробы живучести.
--leader-electfalseLeader election.
--metrics-securetrueБезопасные метрики.
--enable-http2falseHTTP/2.
--root-ca-configmap-volume-path/root-ca/ca-bundle.pemТочка монтирования корневых CA для исходящих TLS-проверок.
--webhook-port9443Порт webhook.
--webhook-cert-dir/tmp/k8s-webhook-server/serving-certs/Каталог TLS-материалов webhook.
--debugfalseПодробная запись журнала через zap.

Переменные окружения

ПеременнаяЗначение
AUTHN_ISSUERIssuer внутреннего авторизационного провайдера.
ENABLE_WEBHOOKSПри false блокирует регистрацию webhook.
LOG_LEVELУровень записи журнала.

7. Справочник CRD/API

Группа: auth.shturval.tech, версия: v1beta1, scope CR: Namespaced.

User

Поле specТипОбязательноОписание
passwordHashstringДаbcrypt hash пароля пользователя.
groups[]stringНетГруппы локального пользователя.

AuthOidcClient

Поле specТипОбязательноОписание
clientSecretRefSecretReferenceНетSecret с client ID и client secret OAuth.
providerTypestring enum (shturval)ДаКласс управления клиентами.
Поле statusОписание
clientInfoIssuer URL, CA, claims mapping групп и username.
clientHashmd5 наблюдаемых данных конфигурации клиента для обнаружения изменений.
clientSecretRefНаблюдаемое положение секрета.
readyБулева готовность.
conditionsПоследовательность фаз согласования.
ConditionTrueFalse причины
ConditionInitClientManagerМенеджер провайдеров успешно построен.Ошибка конфигурирования.
ConditionCreateClientКлиент существует или создан.Ошибка записи конфигурации у провайдера.
ConditionValidateClientStatusВнешнее состояние клиента синхронно ожиданиям платформы.Ошибка статусной валидации.