В модуле реализован 1 алерт.
Модуль включен по умолчанию в наборе модулей Default
.
Модуль выключен по умолчанию в наборах модулей: Managed
, Minimal
.
Чтобы настроить модуль, используйте ресурс 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-apiserver
control-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: true
highAvailability: false
- settings.https
Тип сертификата, используемого для Dex/kubeconfig-generator.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https
.Примеры:
https: mode: CustomCertificate customCertificate: secretName: foobar
https: 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
: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-узлов.
- отредактировать
- settings.nodeSelector
Структура, аналогичная
spec.nodeSelector
пода Kubernetes.Если значение не указано или указано
false
, будет использоваться автоматика. - 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: SelfSigned
https: 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.Получить выпущенный сертификат можно следующей командой:
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
- 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.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, который включен по умолчанию.