Настраивает единую систему аутентификации, интегрированную с 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, в том числе в модулях:
- prometheus
- dashboard
- openvpn
- и других…
Возможность аутентификации в 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
-запросы, будут развернуты с учетом избыточности, необходимой для обеспечения бесперебойной работы. В случае сбоя любого из экземпляров аутентификаторов пользовательские сессии аутентификации не обрываются.