Модуль включен по умолчанию в наборе модулей Default. Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.

Как явно включить или отключить модуль…

Обратите внимание, что при установке Deckhouse для явного включения/отключения и настройки модуля используется параметр configOverrides ресурса InitConfiguration, а не ModuleConfig.

Чтобы явно включить или выключить модуль user-authn при установке Deckhouse, укажите userAuthnEnabled: true или userAuthnEnabled: false в секции configOverrides.

Чтобы задать настройки модуля при установке Deckhouse, используйте секцию userAuthn параметра configOverrides.

Чтобы явно включить или выключить модуль user-authn, установите spec.enabled в true или false в ModuleConfig/user-authn.

Пример включения модуля user-authn:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  enabled: true

Пример выключения модуля user-authn:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  enabled: false

Чтобы настроить модуль используйте custom resource ModuleConfig с именем user-authn (подробнее о настройке Deckhouse…).

Пример ресурса ModuleConfig/user-authn для настройки модуля:

apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
  name: user-authn
spec:
  version: 1
  enabled: true
  settings: # <-- Параметры модуля из раздела "Параметры" ниже.

Параметры

Версия схемы: 1

  • controlPlaneConfiguratorобъект

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

    • controlPlaneConfigurator.dexCAModeстрока

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

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

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

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

    • controlPlaneConfigurator.dexCustomCAстрока

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

    • controlPlaneConfigurator.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
    
    • https.certManagerобъект
      • https.certManager.clusterIssuerNameстрока

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

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

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

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

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

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

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

    • https.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-токена.

    Задаётся в виде строки с указанием часов, минут и секунд: 30m, 20s, 2h30m10s, 24h.

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

    Шаблон: ^([0-9]+h)?([0-9]+m)?([0-9]+s)?$

  • ingressClassстрока

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

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

    Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

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

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

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

    • kubeconfigGenerator.descriptionстрока

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

    • kubeconfigGenerator.idстрока

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

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

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

    • kubeconfigGenerator.masterCAстрока

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

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

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

    • kubeconfigGenerator.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, для обеспечения его публичного доступа.

    • publishAPI.enableбулевый

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

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

    • publishAPI.httpsобъект

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

      Примеры:

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

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

        • publishAPI.https.global.kubeconfigGeneratorMasterCAстрока

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

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

      • publishAPI.https.modeстрока

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

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

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

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

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

    • publishAPI.ingressClassстрока

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

      Шаблон: ^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$

    • publishAPI.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
    
    • tolerations.effectстрока
    • tolerations.keyстрока
    • tolerations.operatorстрока
    • tolerations.tolerationSecondsцелочисленный
    • tolerations.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, который включён по умолчанию.