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