Веб-интерфейсы, связанные с модулем: kubeconfig
Модуль отвечает за единую систему аутентификации, интегрированную с Kubernetes и веб-интерфейсами, используемыми в других модулях, например, Grafana и Dashboard.
Модуль состоит из следующих компонентов:
dex
— федеративный OpenID Connect провайдер, поддерживающий работу со статическими пользователями и с возможностью подключения к различным внешним провайдерам аутентификации, например, SAML, GitLab, GitHub.kubeconfig-generator
(он жеdex-k8s-authenticator
) — веб-приложение, генерирующее команды для настройки локальногоkubectl
после аутентификации в Dex;dex-authenticator
(он жеoauth2-proxy
) — приложение, получающее запросы от компонента NGINX Ingress (через модуль auth_request) и выполняющее их авторизацию с помощью сервиса Dex.
Управление статическими пользователями осуществляется с помощью custom ресурс User, в котором хранится вся информация о пользователе, включая его пароль.
Поддерживаются следующие внешние провайдеры/протоколы аутентификации:
- GitHub;
- GitLab;
- BitBucket Cloud;
- Crowd;
- LDAP;
- OIDC.
Одновременно можно подключить более одного внешнего провайдера аутентификации.
Возможности интеграции
Базовая аутентификация в API Kubernetes
Базовая аутентификация в API Kubernetes на данный момент доступна только для провайдера Crowd (с включением параметра enableBasicAuth
).
К API Kubernetes можно подключаться и через другие поддерживаемые внешние провайдеры.
Интеграция с приложениями
Чтобы обеспечить аутентификацию в любом веб-приложении, работающем в Kubernetes, можно создать ресурс DexAuthenticator в пространстве имен (Namespace) приложения и добавить несколько аннотаций к ресурсу Ingress. Это позволит:
- ограничить список групп, которым разрешен доступ;
- ограничить список адресов, с которых разрешена аутентификация;
- интегрировать приложение в единую систему аутентификации, если приложение поддерживает OIDC. Для этого в Kubernetes создается ресурс DexClient в Namespace приложения. В том же Namespace создается секрет с данными для подключения в Dex по OIDC.
После такой интеграции можно:
- ограничить перечень групп, которым разрешено подключаться;
- указать перечень клиентов, OIDC-токенам которых можно доверять (
trustedPeers
).
Веб-интерфейс для генерации готовых kubeconfig-файлов
Модуль позволяет автоматически создавать конфигурацию для kubectl или других утилит Kubernetes.
Пользователь получит набор команд для настройки kubectl после авторизации в веб-интерфейсе генератора. Эти команды можно скопировать и вставить в консоль для использования kubectl.
Механизм аутентификации для kubeconfig использует OIDC-токен. OIDC-сессия может продлеваться автоматически, если использованный в Dex провайдер аутентификации поддерживает продление сессий. Для этого в kubeconfig указывается refresh token
.
Дополнительно можно настроить несколько адресов kube-apiserver
и сертификаты ЦС (CA) для каждого из них. Например, это может потребоваться, если доступ к кластеру Kubernetes осуществляется через VPN или прямое подключение.
Публикация API kubernetes через Ingress
Компонент kube-apiserver без дополнительных настроек доступен только во внутренней сети кластера. Этот модуль решает проблему простого и безопасного доступа к API Kubernetes извне кластера. При этом API-сервер публикуется на специальном домене (подробнее см. раздел о служебных доменах в документации).
При настройке можно указать:
- перечень сетевых адресов, с которых разрешено подключение;
- перечень групп, которым разрешен доступ к API-серверу;
- Ingress-контроллер, на котором производится аутентификация.
По умолчанию будет сгенерирован специальный сертификат ЦС (CA) и автоматически настроен генератор kubeconfig.
Расширения от Фланта
Модуль использует модифицированную версию Dex для поддержки:
- групп для статических учетных записей пользователей и провайдера Bitbucket Cloud (параметр
bitbucketCloud
); - передачи параметра
group
клиентам; - механизма
obsolete tokens
, который позволяет избежать состояния гонки при продлении токена OIDC-клиентом.
Отказоустойчивый режим
Модуль поддерживает режим высокой доступности highAvailability
. При его включении аутентификаторы, отвечающие на auth request
-запросы, развертываются с учетом требуемой избыточности для обеспечения непрерывной работы. В случае отказа любого из экземпляров аутентификаторов пользовательские аутентификационные сессии не прерываются.