Модуль по умолчанию включен. Для выключения добавьте в ConfigMap deckhouse:

data:
  userAuthnEnabled: "false"

Параметры

  • controlPlaneConfiguratorобъект

    Настройки параметров для модуля автоматической настройки kube-apiserver control-plane-manager.

    • dexCAModeстрока

      Способ определения CA, который будет использован при настройке kube-apiserver:

      • Custom — использовать CA указанный в параметре dexCustomCA. Этот вариант уместен, например, если вы используете внешний HTTPS-балансировщик перед Ingress-контроллером, и на этом балансировщике используется самоподписанный сертификат.
      • DoNotNeed — CA не требуется (например, при использовании публичного TLS-провайдера Let’s Encrypt или других).
      • FromIngressSecret — извлечь CA или сам сертификат из Secret’а, который используется в Ingress-ресурсе. Если вы используете самоподписанные сертификаты в Ingress-ресурсах — это ваш вариант.

      По умолчанию: "DoNotNeed"

      Допустимые значения: Custom, DoNotNeed, FromIngressSecret

    • dexCustomCAстрока

      CA, который будет использован в случае, если dexCAMode установлен в Custom.

    • enabledбулевый

      Использовать ли control-plane-manager для настройки OIDC в kube-apiserver.

      По умолчанию: true

  • highAvailabilityбулевый

    Ручное управление режимом отказоустойчивости.

    По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.

    Примеры:

    highAvailability: true
    
    highAvailability: false
    
  • httpsобъект

    Тип сертификата, используемого для Dex/kubeconfig-generator.

    При использовании этого параметра полностью переопределяются глобальные настройки global.modules.https.

    Примеры:

    https:
      mode: CustomCertificate
      customCertificate:
        secretName: foobar
    
    https:
      mode: CertManager
      certManager:
        clusterIssuerName: letsencrypt
    
    • certManagerобъект
      • clusterIssuerNameстрока

        ClusterIssuer, используемый для Dex/kubeconfig-generator.

        Доступны letsencrypt, letsencrypt-staging, selfsigned, но вы можете определить свои.

        По умолчанию: "letsencrypt"

    • customCertificateобъект
      • secretNameстрока

        Имя Secret’а в namespace d8-system, который будет использоваться для Dex/kubeconfig-generator.

        Secret должен быть в формате kubernetes.io/tls.

        По умолчанию: "false"

    • modeстрока

      Режим работы HTTPS:

      • CertManager — Dex/kubeconfig-generator будет работать по HTTPS и заказывать сертификат с помощью ClusterIssuer, заданном в параметре certManager.clusterIssuerName.
      • CustomCertificate — Dex/kubeconfig-generator будет работать по HTTPS, используя сертификат из namespace d8-system.
      • Disabled — Dex/kubeconfig-generator будет работать только по HTTP.
      • OnlyInURI — Dex/kubeconfig-generator будет работать по HTTP (подразумевая, что перед ними стоит внешний балансировщик, который терминирует HTTPS-трафик) и все ссылки в user-authn будут генерироваться с HTTPS-схемой.

      По умолчанию: "Disabled"

      Допустимые значения: Disabled, CertManager, CustomCertificate, OnlyInURI

  • idTokenTTLстрока

    Время жизни id-токена (указывается с суффиксом s, m или h).

    По умолчанию: "10m"

    Шаблон: ^[0-9]+[smh]{1}$

  • ingressClassстрока

    Класс Ingress-контроллера, который используется для Dex/kubeconfig-generator.

    Опциональный параметр, по умолчанию используется глобальное значение modules.ingressClass.

  • kubeconfigGeneratorмассив объектов

    Массив, в котором указываются дополнительные способы доступа к API-серверу.

    Параметр может быть полезен в случае, если вы не хотите предоставить доступ к API-серверу через Ingress, а хотите предоставить доступ другими способами (например, с bastion-хоста или через OpenVPN).

    • descriptionстрока

      Текстовое описание, содержащее информацию о том, чем этот метод аутентификации отличается от других.

    • idстрока

      Обязательный параметр

      Имя способа доступа к API-серверу (без пробелов, маленькими буквами).

      Шаблон: ^[\@\.\:0-9a-z._-]+$

    • masterCAстрока

      CA для доступа к API-серверу.

      Если данный параметр не указать, то будет автоматически использован Kubernetes CA.

      При публикации API-сервера через HTTP-прокси, который терминирует HTTPS-трафик, рекомендуется использовать самоподписанный сертификат, который нужно указать в параметре masterCA.

    • masterURIстрока

      Обязательный параметр

      Если планируется использовать TCP-прокси, то для адреса TCP-прокси должен быть сконфигурирован сертификат на стороне API-сервера. Например, в случае, если API-сервер доступен по трем адресам (192.168.0.10, 192.168.0.11 и 192.168.0.12), а ходить к API-серверу клиент будет, через TCP-балансер (например, 192.168.0.15), то необходимо перегенерировать сертификаты для API-серверов:

      • отредактировать kubeadm-config: kubectl -n kube-system edit configmap kubeadm-config добавив в .apiServer.certSANs адрес 192.168.0.15;
      • сохранить получившийся конфиг: kubeadm config view > kubeadmconf.yaml;
      • удалить старые сертификаты API-сервера: mv /etc/kubernetes/pki/apiserver.* /tmp/;
      • перевыпустить новые сертификаты: kubeadm init phase certs apiserver --config=kubeadmconf.yaml;
      • перезапустить контейнер с API-сервером: docker ps -a | grep 'kube-apiserver' | grep -v pause| awk '{print $1}' | xargs docker restart;
      • повторить данное действие для всех master-узлов.
  • nodeSelectorобъект

    Структура, аналогичная spec.nodeSelector Kubernetes Pod.

    Если ничего не указано или указано false — будет использоваться автоматика.

  • publishAPIобъект

    Настройки публикации API-сервера Kubernetes через Ingress, для обеспечения его публичного доступа.

    • enableбулевый

      Если указать true, то в namespace d8-user-authn кластера будет создан Ingress-ресурс, который откроет публичный доступ к API-серверу.

      По умолчанию: false

    • httpsобъект

      Режим работы HTTPS для Ingress API-сервера.

      Примеры:

      https:
        mode: SelfSigned
      
      https:
        mode: Global
        global:
          kubeconfigGeneratorMasterCA: plainstring
      
      • globalобъект

        Дополнительный параметр для режима Global.

        • kubeconfigGeneratorMasterCAстрока

          Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик, то в этом параметре необходимо указать CA сертификата балансировщика, чтобы kubectl мог достучаться до API-сервера.

          В качестве CA можно указать сам сертификат внешнего балансировщика, если по какой-то причине вы не можете получить подписавший его CA. В таком случае нужно помнить, что после обновления сертификата на балансировщике, полученные ранее данные подключения от kubeconfig перестанут работать.

      • modeстрока

        Режим выдачи сертификатов для данного Ingress-ресурса.

        В случае использования режима SelfSigned для Ingress-ресурса будет выпущен самоподписанный сертификат.

        В случае использования режима Global, будут применены политики из глобальной настройки global.modules.https.mode. Т.е. если в глобальной настройке стоит режим CertManager с ClusterIssuer letsencrypt, то для Ingress-ресурса будет заказан сертификат Let’s Encrypt.

        По умолчанию: "SelfSigned"

        Допустимые значения: SelfSigned, Global

    • ingressClassстрока

      Ingress-класс, который будет использован для публикации API Kubernetes через Ingress.

    • whitelistSourceRangesмассив строк

      Массив CIDR, которым разрешено подключение к API-серверу.

      • Элемент массивастрока

        Шаблон: ^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/(3[0-2]|[1-2][0-9]|[0-9]))?$

  • tolerationsмассив объектов

    Структура, аналогичная spec.tolerations в Kubernetes Pod.

    Если ничего не указано или указано false — будет использоваться автоматика.

    Пример:

    tolerations:
    - key: key1
      operator: Equal
      value: value1
      effect: NoSchedule
    
    • effectстрока
    • keyстрока
    • operatorстрока
    • tolerationSecondsцелочисленный
    • valueстрока

Автоматический деплой oauth2-proxy в namespace вашего приложения и подключение его к Dex происходит при создании Custom Resource DexAuthenticator.

Важно! Так как использование OpenID Connect по протоколу HTTP является слишком значительной угрозой безопасности (что подтверждается например тем, что Kubernetes API-сервер не поддерживает работу с OIDC по HTTP), данный модуль можно установить только при включенном HTTPS (https.mode выставить в отличное от Disabled значение или на уровне кластера, или в самом модуле).

Важно! При включении данного модуля, аутентификация во всех web-интерфейсах перестанет использовать HTTP Basic Auth и переключится на Dex (который, в свою очередь, будет использовать настроенные вами внешние провайдеры). Для настройки kubectl необходимо перейти по адресу https://kubeconfig.<modules.publicDomainTemplate>/, авторизоваться в настроенном внешнем провайдере и скопировать shell команды к себе в консоль.

Важно! Для работы аутентификации в dashboard и kubectl требуется донастройка API-сервера. Для автоматизации этого процесса реализован модуль control-plane-manager, который включён по умолчанию.