Модуль включен по умолчанию в наборе модулей Default
.
Модуль выключен по умолчанию в наборах модулей: Managed
, Minimal
.
Чтобы настроить модуль, используйте custom resource ModuleConfig
с именем user-authn
(подробнее о настройке Deckhouse…).
Пример ресурса ModuleConfig/user-authn
для настройки модуля:
1apiVersion: deckhouse.io/v1alpha1
2kind: ModuleConfig
3metadata:
4 name: user-authn
5spec:
6 version: 1
7 enabled: true
8 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булевый
Ручное управление режимом отказоустойчивости.
По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.
Примеры:
1highAvailability: true
1highAvailability: false
- httpsобъект
Тип сертификата, используемого для Dex/kubeconfig-generator.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https
.Примеры:
1https: 2 mode: CustomCertificate 3 customCertificate: 4 secretName: foobar
1https: 2 mode: CertManager 3 certManager: 4 clusterIssuerName: letsencrypt
- https.certManagerобъект
- 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-схемой. Балансировщик должен обеспечивать перенаправление с HTTP на 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-узлов.
- отредактировать
- kubeconfigGenerator.descriptionстрока
- nodeSelectorобъект
Структура, аналогичная
spec.nodeSelector
пода Kubernetes.Если ничего не указано или указано
false
, будет использоваться автоматика. - publishAPIобъект
Настройки публикации API-сервера Kubernetes через Ingress для обеспечения его публичного доступа.
- publishAPI.enableбулевый
Если указать
true
, в namespaced8-user-authn
кластера будет создан Ingress-ресурс, который откроет публичный доступ к API-серверу.По умолчанию:
false
- publishAPI.httpsобъект
Режим работы HTTPS для Ingress API-сервера.
Примеры:
1https: 2 mode: SelfSigned
1https: 2 mode: Global 3 global: 4 kubeconfigGeneratorMasterCA: plainstring
- publishAPI.https.globalобъект
Дополнительный параметр для режима
Global
.- publishAPI.https.global.kubeconfigGeneratorMasterCAстрока
Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик с использованием непубличного сертификата, укажите цепочку CA в этом параметре. Она будет добавлена в сгенерированные kubectl-конфиги.
Если вы используете в кластере сертификаты, выдаваемые c помощью модуля
cert-manager
и Let’s Encrypt, следует в качестве значения установить пустую строку""
.В качестве CA допускается указать непосредственно сертификат внешнего балансировщика. В таком случае нужно помнить, что обновление сертификата на балансировщике повредит ранее сгенерированные kubectl-конфиги.
- publishAPI.https.global.kubeconfigGeneratorMasterCAстрока
- publishAPI.https.modeстрока
Режим выдачи сертификатов для данного Ingress-ресурса.
В случае использования режима
SelfSigned
, для Ingress-ресурса будет выпущен сертификат подписанный CA.Получить выпущенный сертификат можно следующей командой:
kubectl -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
- 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-серверу.
- publishAPI.enableбулевый
- tolerationsмассив объектов
Структура, аналогичная
spec.tolerations
пода Kubernetes.Если ничего не указано или указано
false
, будет использоваться автоматика.Пример:
1tolerations: 2- key: key1 3 operator: Equal 4 value: value1 5 effect: NoSchedule
Автоматический деплой 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, который включен по умолчанию.