Доступно в редакциях: CE, BE, SE, SE+, EE, CSE Lite (1.67), CSE Pro (1.67)
В модуле реализован 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
- объект
Настройки параметров для модуля автоматической настройки
kube-apiserver
control-plane-manager.- строка
Способ определения CA, который будет использован при настройке
kube-apiserver
:Custom
— использовать CA, указанный в параметреdexCustomCA
. Этот вариант уместен, например, если вы используете внешний HTTPS-балансировщик перед Ingress-контроллером и на этом балансировщике используется самоподписанный сертификат.DoNotNeed
— CA не требуется (например, при использовании публичного TLS-провайдера Let’s Encrypt или других).FromIngressSecret
— извлечь CA или сам сертификат из Secret’а, который используется в Ingress-ресурсе. Если вы используете самоподписанные сертификаты в Ingress-ресурсах — это ваш вариант.
По умолчанию:
"DoNotNeed"
Допустимые значения:
Custom
,DoNotNeed
,FromIngressSecret
- булевый
Ручное управление режимом отказоустойчивости.
По умолчанию режим отказоустойчивости определяется автоматически. Подробнее про режим отказоустойчивости.
Примеры:
highAvailability: true
highAvailability: false
- объект
Тип сертификата, используемого для Dex/kubeconfig-generator.
При использовании этого параметра полностью переопределяются глобальные настройки
global.modules.https
.Примеры:
https: mode: CustomCertificate customCertificate: secretName: foobar
https: mode: CertManager certManager: clusterIssuerName: letsencrypt
- строка
Имя Secret’а в namespace
d8-system
, который будет использоваться для Dex/kubeconfig-generator.Secret должен быть в формате kubernetes.io/tls.
По умолчанию:
"false"
- строка
Режим работы 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
- массив объектов
Массив, в котором указываются дополнительные способы доступа к API-серверу.
Параметр может быть полезен в случае, если вы хотите предоставить доступ к API-серверу не через Ingress, а другими способами (например, с bastion-хоста или через OpenVPN).
- строка
CA для доступа к API-серверу.
Если данный параметр не указать, то будет автоматически использован Kubernetes CA.
При публикации API-сервера через HTTP-прокси, который терминирует HTTPS-трафик, рекомендуется использовать самоподписанный сертификат, который нужно указать в параметре
masterCA
. - строка
Обязательный параметр
Если планируется использовать 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-узлов.
- отредактировать
- объект
Структура, аналогичная
spec.nodeSelector
пода Kubernetes.Если значение не указано или указано
false
, будет использоваться автоматика. - объект
Настройки публикации API-сервера Kubernetes через Ingress для обеспечения его публичного доступа.
- объект
Режим работы HTTPS для Ingress API-сервера.
Примеры:
https: mode: SelfSigned
https: mode: Global global: kubeconfigGeneratorMasterCA: plainstring
- строка
Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик с использованием непубличного сертификата, укажите цепочку CA в этом параметре. Она будет добавлена в сгенерированные kubectl-конфиги.
Если вы используете в кластере сертификаты, выдаваемые c помощью модуля
cert-manager
и Let’s Encrypt, следует в качестве значения установить пустую строку""
.В качестве CA допускается указать непосредственно сертификат внешнего балансировщика. В таком случае нужно помнить, что обновление сертификата на балансировщике повредит ранее сгенерированные kubectl-конфиги.
- строка
Режим выдачи сертификатов для данного 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
- массив строк
Список адресов в формате CIDR, которым разрешено подключение к API-серверу.
- массив объектов
Структура, аналогичная
spec.tolerations
пода Kubernetes.Если значение не указано или указано
false
, будет использоваться автоматика.Пример:
tolerations: - key: key1 operator: Equal value: value1 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, который включен по умолчанию.