Модуль включен по умолчанию в наборе модулей Default
.
Модуль выключен по умолчанию в наборах модулей: Managed
, Minimal
.
Чтобы настроить модуль используйте 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
- controlPlaneConfigurator.dexCAModeстрока
- 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.certManager.clusterIssuerNameстрока
- https.customCertificateобъект
- https.customCertificate.secretNameстрока
Имя Secret’а в namespace
d8-system
, который будет использоваться для Dex/kubeconfig-generator.Secret должен быть в формате kubernetes.io/tls.
По умолчанию:
"false"
- https.customCertificate.secretNameстрока
- 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-схемой.
По умолчанию:
"Disabled"
Допустимые значения:
Disabled
,CertManager
,CustomCertificate
,OnlyInURI
- https.certManagerобъект
- 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-узлов.
- отредактировать
- kubeconfigGenerator.descriptionстрока
- nodeSelectorобъект
Структура, аналогичная
spec.nodeSelector
Kubernetes Pod.Если ничего не указано или указано
false
— будет использоваться автоматика. - publishAPIобъект
Настройки публикации API-сервера Kubernetes через Ingress, для обеспечения его публичного доступа.
- publishAPI.enableбулевый
Если указать
true
, то в namespaced8-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.global.kubeconfigGeneratorMasterCAстрока
- publishAPI.https.modeстрока
Режим выдачи сертификатов для данного Ingress-ресурса.
В случае использования режима
SelfSigned
для Ingress-ресурса будет выпущен самоподписанный сертификат.В случае использования режима
Global
, будут применены политики из глобальной настройкиglobal.modules.https.mode
. Т.е. если в глобальной настройке стоит режимCertManager
с ClusterIssuerletsencrypt
, то для Ingress-ресурса будет заказан сертификат Let’s Encrypt.По умолчанию:
"SelfSigned"
Допустимые значения:
SelfSigned
,Global
- publishAPI.https.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]))?$
- Элемент массивастрока
- publishAPI.enableбулевый
- 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, который включён по умолчанию.