Настраивает единую систему аутентификации, интегрированную с Kubernetes и Web-интерфейсами, используемыми в других модулях (Grafana, Dashboard и др.).

Модуль состоит из следующих компонентов:

  • dex — федеративный OpenID Connect провайдер, который обеспечивает работу со статическими пользователями и может быть подключен к одному или нескольким внешним провайдерам аутентификации (например, он поддерживает SAML, Gitlab и Github);
  • kubeconfig-generator (на самом деле dex-k8s-authenticator) — веб-приложение, которое после авторизации в dex генерирует команды для настройки локального kubectl;
  • dex-authenticator (на самом деле oauth2-proxy) — приложение, которое принимает запросы от nginx ingress (auth_request) и производит их аутентификацию в dex.

Управление статическими пользователями осуществляется с помощью Custom Resource User, в котором содержится вся информация о пользователе, включая пароль.

Поддерживаются следующие внешние провайдеры/протоколы аутентификации:

  • Github
  • Gitlab
  • BitBucket Cloud
  • Crowd
  • LDAP
  • OIDC

Одновременно можно подключить более одного внешнего провайдера аутентификации.

Возможности интеграции

Интеграция с Kubernetes и Deckhouse

Модуль генерирует настройки для модуля control-plane-manager, в зависимости от версии Kubernetes и Deckhouse.

Соответственно, один из этих модулей производит настройку kube-apiserver таким образом, что он становится OIDC-клиентом dex. В ряде других модулей Deckhouse также будет автоматически включена интеграция с dex, в том числе в модулях:

Возможность аутентификации в API Kubernetes по логину и паролю

Аутентификация по логину и паролю в API Kubernetes сейчас доступна только для провайдера Crowd. В ближайшее время ожидается появление поддержки этой возможности для статических пользователей и провайдеров с поддержкой LDAP.

Интеграция с приложениями

Для закрытия аутентификацией любого пользовательского web-приложения достаточно создать в Kubernetes ресурс DexAuthenticator в необходимом namespace и добавить несколько аннотаций к Ingress-ресурсу. При этом появляются возможности:

  • ограничить перечень групп, которым разрешено подключаться
  • ограничить перечень адресов, с которых разрешено проходить аутентификацию

Если приложение поддерживает OIDC-аутентификацию, оно может быть просто проинтегрировано с единой аутентификацией. Для этого в Kubernetes создается ресурс DexClient в необходимом namespace. В том же namespace будет создан secret с данными для подключения к dex по OIDC.

Возможности, которые открываются после такой интеграции:

  • возможность ограничить перечень групп, которым разрешено подключаться
  • возможность указать перечень доверенных клиентов, OIDC-токенам которых можно доверять (trustedPeers).

Web-интерфейс для генерации готовых kubeconfig’ов

Модуль позволяет автоматически генерировать конфигурацию для kubectl или других утилит работы с Kubernetes. Для этого в web-интерфейсе генератора kubeconfig’ов после прохождения аутентификации будет доступен набор команд, который настраивает kubectl на работу с кластером. Достаточно вставить их в консоль и можно использовать kubectl.

Механизм аутентификации для kubeconfig использует OIDC-токен. OIDC-сессия может продлеваться автоматически, если использованный в dex провайдер аутентификации поддерживает продление сессий. Для этого в kubeconfig будет указан refresh token.

Дополнительно возможна настройка нескольких адресов kube-apiserver и CA для каждого из них. Это может потребоваться, например, если доступ организуется через VPN и напрямую.

Публикация API kubernetes через Ingress

Как известно, kube-apiserver без дополнительных настроек, по умолчанию доступен только во внутренней сети кластера. Данный модуль может помочь решить задачу простого и безопасного доступа к API снаружи кластера. При этом происходит публикация apiserver на служебном домене (см. подробнее шаблон служебных доменов в global).

При настройке можно указать:

  • перечень сетевых адресов, с которых будет разрешено осуществлять подключение;
  • перечень групп,которым разрешен доступ к apiserver;
  • Ingress-контроллер, на котором производится аутентификация.

По умолчанию будет сгенерирован специальный CA и автоматически настроен генератор kubeconfig’ов.

Расширения от Флант

Модуль использует модифицированную версию dex, которая содержит следующий дополненный и исправленный функционал:

  • поддержка групп для статических пользователей и для провайдера bitbucketCloud
  • поддержка передачи параметра group клиентам
  • поддержка механизма obsolete tokens, который позволяет избежать состояния гонки при продлении токена OIDC-клиентом

Отказоустойчивый режим

Модуль также поддерживает режим highAvailability. При его включении, аутентификаторы — элементы, которые отвечают на auth request-запросы, будут развернуты с учетом избыточности, необходимой для обеспечения бесперебойной работы. В случае сбоя любого из экземпляров аутентификаторов пользовательские сессии аутентификации не обрываются.