Доступно в редакциях: CE, BE, SE, SE+, EE, CSE Lite (1.67), CSE Pro (1.67)
В модуле реализован 1 алерт.
Модуль включен по умолчанию в наборе модулей Default.
Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.
Конверсии
Модуль настраивается с помощью ресурса ModuleConfig, схема которого содержит номер версии. При применении в кластере старой версии схемы ModuleConfig выполняются автоматические преобразования. Чтобы обновить версию схемы ModuleConfig вручную, необходимо последовательно для каждой версии выполнить следующие действия :
- Обновление из версии 1 в 2:
Замените
publishAPI.enableнаpublishAPI.enabled.
Настройки
Чтобы настроить модуль, используйте ресурс ModuleConfig с именем user-authn (подробнее о настройке Deckhouse…).
Пример ресурса ModuleConfig/user-authn для настройки модуля:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: user-authn
spec:
version: 2
enabled: true
settings: # <-- Параметры модуля из раздела "Параметры" ниже.
Параметры
Версия схемы: 2
- объектsettings
- объектsettings.controlPlaneConfigurator
Настройки параметров для модуля автоматической настройки
kube-apiservercontrol-plane-manager.- строкаsettings.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 - строкаsettings.controlPlaneConfigurator.dexCustomCA
CA, который будет использован в случае, если
dexCAModeустановлен вCustom. - булевыйsettings.controlPlaneConfigurator.enabled
Использовать ли
control-plane-managerдля настройки OIDC вkube-apiserver.По умолчанию:
true
- булевыйsettings.highAvailability
Ручное управление режимом отказоустойчивости.
По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.
Примеры:
highAvailability: truehighAvailability: false - объектsettings.https
Тип сертификата, используемого для Dex/kubeconfig-generator.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https.Примеры:
https: mode: CustomCertificate customCertificate: secretName: foobarhttps: mode: CertManager certManager: clusterIssuerName: letsencrypt- объектsettings.https.certManager
- строкаsettings.https.certManager.clusterIssuerName
ClusterIssuer, используемый для Dex/kubeconfig-generator.
Доступны
letsencrypt,letsencrypt-staging,selfsigned, но вы можете определить свои.По умолчанию:
letsencrypt
- объектsettings.https.customCertificate
- строкаsettings.https.customCertificate.secretName
Имя Secret’а в namespace
d8-system, который будет использоваться для Dex/kubeconfig-generator.Secret должен быть в формате kubernetes.io/tls.
По умолчанию:
false
- строкаsettings.https.mode
Режим работы HTTPS:
CertManager— Dex/kubeconfig-generator будет работать по HTTPS и заказывать сертификат с помощью ClusterIssuer, заданного в параметреcertManager.clusterIssuerName;CustomCertificate— Dex/kubeconfig-generator будет работать по HTTPS, используя сертификат из namespaced8-system;Disabled— Dex/kubeconfig-generator будет работать только по HTTP;OnlyInURI— Dex/kubeconfig-generator будет работать по HTTP (подразумевая, что перед ним стоит внешний балансировщик, который терминирует HTTPS-трафик) и все ссылки в user-authn будут генерироваться с HTTPS-схемой. Балансировщик должен обеспечивать перенаправление с HTTP на HTTPS.
По умолчанию:
DisabledДопустимые значения:
Disabled,CertManager,CustomCertificate,OnlyInURI
- строкаsettings.idTokenTTL
Время жизни ID-токена.
Задается в виде строки с указанием часов, минут и секунд: 30m, 20s, 2h30m10s, 24h.
По умолчанию:
10mШаблон:
^([0-9]+h)?([0-9]+m)?([0-9]+s)?$ - строкаsettings.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])?)*$ - массив объектовsettings.kubeconfigGenerator
Массив, в котором указываются дополнительные способы доступа к API-серверу.
Параметр может быть полезен в случае, если вы хотите предоставить доступ к API-серверу не через Ingress, а другими способами (например, с bastion-хоста или через OpenVPN).
- строкаsettings.kubeconfigGenerator.description
Текстовое описание, содержащее информацию о том, чем этот метод аутентификации отличается от других.
- строкаsettings.kubeconfigGenerator.id
Обязательный параметр
Имя способа доступа к API-серверу (без пробелов, маленькими буквами).
Шаблон:
^[\@\.\:0-9a-z._-]+$ - строкаsettings.kubeconfigGenerator.masterCA
CA для доступа к API-серверу.
Если данный параметр не указать, то будет автоматически использован Kubernetes CA.
При публикации API-сервера через HTTP-прокси, который терминирует HTTPS-трафик, рекомендуется использовать самоподписанный сертификат, который нужно указать в параметре
masterCA. - строкаsettings.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:d8 k -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-узлов.
- отредактировать
- объектsettings.nodeSelector
Структура, аналогичная
spec.nodeSelectorпода Kubernetes.Если значение не указано или указано
false, будет использоваться автоматика. - объектsettings.passwordPolicy
По умолчанию:
- строкаsettings.passwordPolicy.complexityLevel
Уровень сложности пароля.
В зависимости от уровня сложности к паролю предъявляются следующие минимальные требования:
None— 1 символ.Low— 8 символов.Fair— 8 символов, 1 заглавная буква (A–Z), 1 строчная буква (a–z), 1 цифра.Good— 8 символов, 1 заглавная буква (A–Z), 1 строчная буква (a–z), 1 цифра, 1 специальный символ (!@#$%^&*).Excellent— 8 символов, 1 заглавная буква (A–Z), 1 строчная буква (a–z), 1 цифра, 1 специальный символ (!@#$%^&*), не более 2 одинаковых символов подряд.
По умолчанию:
FairДопустимые значения:
None,Low,Fair,Good,Excellent - объектsettings.passwordPolicy.lockout
Настройки временной блокировки пользователя при последовательных неуспешных попытках входа.
- строкаsettings.passwordPolicy.lockout.lockDuration
Обязательный параметр
Длительность временной блокировки. Задается в секундах, минутах, часах или днях:
10s,5m,1h,3d.Шаблон:
^(?:(?:[1-9]|[1-9][0-9]+)d)?(?:(?:[1-9]|[1-9][0-9]+)h)?(?:(?:[1-9]|[1-9][0-9]+)m)?(?:(?:[1-9]|[1-9][0-9]+)s)?$ - целочисленныйsettings.passwordPolicy.lockout.maxAttempts
Обязательный параметр
Количество последовательных неуспешных попыток входа, после которых пользователь будет временно заблокирован.
- целочисленныйsettings.passwordPolicy.passwordHistoryLimit
Количество предыдущих паролей пользователя, которые сохраняются в истории для предотвращения их повторного использования.
По умолчанию:
5Допустимые значения:
0 <= X - объектsettings.passwordPolicy.rotation
Настройки ротации паролей.
- строкаsettings.passwordPolicy.rotation.interval
Обязательный параметр
Интервал времени, после которого пароль необходимо изменить. Задается в секундах, минутах, часах или днях:
10s,5m,1h,3d.Шаблон:
^(?:(?:[1-9]|[1-9][0-9]+)d)?(?:(?:[1-9]|[1-9][0-9]+)h)?(?:(?:[1-9]|[1-9][0-9]+)m)?(?:(?:[1-9]|[1-9][0-9]+)s)?$
- объектsettings.publishAPI
Настройки публикации API-сервера Kubernetes через Ingress для обеспечения его публичного доступа.
- булевыйsettings.publishAPI.addKubeconfigGeneratorEntry
Если указать
false, будет удалена запись в kubeconfig-generator.По умолчанию:
true - булевыйsettings.publishAPI.enabled
Если указать
true, в namespaced8-user-authnкластера будет создан Ingress-ресурс, который откроет публичный доступ к API-серверу.По умолчанию:
false - объектsettings.publishAPI.https
Режим работы HTTPS для Ingress API-сервера.
Примеры:
https: mode: SelfSignedhttps: mode: Global global: kubeconfigGeneratorMasterCA: plainstring- объектsettings.publishAPI.https.global
Дополнительный параметр для режима
Global.- строкаsettings.publishAPI.https.global.kubeconfigGeneratorMasterCA
Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик с использованием непубличного сертификата, укажите цепочку CA в этом параметре. Она будет добавлена в сгенерированные kubectl-конфиги.
Если вы используете в кластере сертификаты, выдаваемые c помощью модуля
cert-managerи Let’s Encrypt, следует в качестве значения установить пустую строку"".В качестве CA допускается указать непосредственно сертификат внешнего балансировщика. В таком случае нужно помнить, что обновление сертификата на балансировщике повредит ранее сгенерированные kubectl-конфиги.
- строкаsettings.publishAPI.https.mode
Режим выдачи сертификатов для данного Ingress-ресурса.
В случае использования режима
SelfSigned, для Ingress-ресурса будет выпущен сертификат подписанный CA.Получить выпущенный сертификат можно следующей командой:
d8 k -n d8-user-authn get secrets kubernetes-api-ca-key-pair -oyaml.В случае использования режима
Globalбудут применены политики из глобальной настройкиglobal.modules.https.mode. То есть если в глобальной настройке стоит режимCertManagerс ClusterIssuerletsencrypt, для Ingress-ресурса будет заказан сертификат Let’s Encrypt.По умолчанию:
SelfSignedДопустимые значения:
SelfSigned,Global
- строкаsettings.publishAPI.ingressClass
Ingress-класс, который будет использован для публикации API Kubernetes через Ingress.
Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - массив строкsettings.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]))?$
- объектsettings.staticUsers2FA
- булевыйsettings.staticUsers2FA.enabled
Обязательный параметр
Если указано
true, статические пользователи должны будут использовать двухфакторную аутентификацию (2FA) при входе в систему. Эта опция полезна для повышения безопасности, так как требует дополнительного шага проверки при авторизации.По умолчанию:
false - строкаsettings.staticUsers2FA.issuerName
Имя издателя для токенов двухфакторной аутентификации (2FA). Это имя отображается пользователям в приложении для 2FA (например, Google Authenticator). Используется для идентификации источника токенов и может быть настроено в соответствии с вашими предпочтениями.
По умолчанию:
Deckhouse
- массив объектовsettings.tolerations
Структура, аналогичная
spec.tolerationsпода Kubernetes.Если значение не указано или указано
false, будет использоваться автоматика.Пример:
tolerations: - key: key1 operator: Equal value: value1 effect: NoSchedule- строкаsettings.tolerations.effect
- строкаsettings.tolerations.key
- строкаsettings.tolerations.operator
- целочисленныйsettings.tolerations.tolerationSeconds
- строкаsettings.tolerations.value
Автоматический деплой oauth2-proxy в namespace вашего приложения и подключение его к Dex происходят при создании custom resource DexAuthenticator.
Важно! Так как использование OpenID Connect по протоколу HTTP является слишком значительной угрозой безопасности (что подтверждается, например, тем, что Kubernetes API-сервер не поддерживает работу с OIDC по HTTP), данный модуль можно установить только при включенном HTTPS (https.mode выставить в отличное от Disabled значение или на уровне кластера, или в самом модуле).
Важно! При включении данного модуля аутентификация во всех веб-интерфейсах перестанет использовать HTTP Basic Auth и переключится на Dex (который, в свою очередь, будет использовать настроенные вами внешние провайдеры).
Для настройки kubectl необходимо перейти по адресу https://kubeconfig.<modules.publicDomainTemplate>/, авторизоваться в настроенном внешнем провайдере и скопировать shell-команды к себе в консоль.
Важно! Для работы аутентификации в dashboard и kubectl требуется донастройка API-сервера. Для автоматизации этого процесса реализован модуль control-plane-manager, который включен по умолчанию.