Веб-интерфейсы, связанные с модулем: kubeconfig
Настраивает единую систему аутентификации, интегрированную с Kubernetes и веб-интерфейсами, используемыми в других модулях (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.
Одновременно можно подключить более одного внешнего провайдера аутентификации.
Возможности интеграции
Возможность аутентификации в API Kubernetes по логину и паролю
Аутентификация по логину и паролю в API Kubernetes сейчас доступна только для провайдера Crowd. В ближайшее время ожидается появление поддержки этой возможности для статических пользователей и провайдеров с поддержкой LDAP.
Интеграция с приложениями
Для закрытия аутентификацией любого пользовательского веб-приложения достаточно создать в Kubernetes ресурс DexAuthenticator
в необходимом namespace и добавить несколько аннотаций к Ingress-ресурсу. При этом появляются возможности:
- ограничить перечень групп, которым разрешено подключаться;
- ограничить перечень адресов, с которых разрешено проходить аутентификацию.
Если приложение поддерживает OIDC-аутентификацию, оно может быть просто проинтегрировано с единой аутентификацией. Для этого в Kubernetes создается ресурс DexClient
в необходимом namespace. В том же namespace будет создан Secret с данными для подключения к Dex по OIDC.
Возможности, которые открываются после такой интеграции:
- возможность ограничить перечень групп, которым разрешено подключаться;
- возможность указать перечень доверенных клиентов, OIDC-токенам которых можно доверять (
trustedPeers
).
Веб-интерфейс для генерации готовых kubeconfig’ов
Модуль позволяет автоматически генерировать конфигурацию для kubectl или других утилит работы с Kubernetes. Для этого в веб-интерфейсе генератора 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
-запросы, — будут развернуты с учетом избыточности, необходимой для обеспечения бесперебойной работы. В случае сбоя любого из экземпляров аутентификаторов пользовательские сессии аутентификации не обрываются.