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