Доступно в редакциях: CE, BE, SE, SE+, EE, CSE Lite (1.73), CSE Pro (1.73)
Стадия жизненного цикла модуля: General Availability
Некоторые параметры кластера, влияющие на управление control plane, также берутся из ресурса ClusterConfiguration.
В модуле реализовано 30 алертов.
Модуль включен по умолчанию в наборе модулей Default.
Модуль выключен по умолчанию в наборах модулей: Managed, Minimal.
Конверсии
Модуль настраивается с помощью ресурса ModuleConfig, схема которого содержит номер версии. При применении в кластере старой версии схемы ModuleConfig выполняются автоматические преобразования. Чтобы обновить версию схемы ModuleConfig вручную, необходимо последовательно для каждой версии выполнить следующие действия :
- Обновление из версии 1 в 2:
Удалите
etcd.externalMembersNames - Обновление из версии 2 в 3:
Замените
.apiserver.loadBalancerна.apiserver.publishAPI.loadBalancer.
Параметры
Версия схемы: 3
Пример:
apiVersion: deckhouse.io/v1alpha1
kind: ModuleConfig
metadata:
name: control-plane-manager
spec:
version: 3
enabled: true
settings:
resourcesRequests:
cpu: 1000m
memory: 500Mi
apiserver:
bindToWildcard: true
certSANs:
- bakery.infra
- devs.infra
publishAPI: {}
- объектsettings
- объектsettings.apiserver
Параметры
kube-apiserver.- массив строкsettings.apiserver.admissionPlugins
Список включенных дополнительных admission-плагинов.
Обратите внимание, что, помимо включенных по умолчанию в Kubernetes admission-плагинов, также всегда включены (без возможности отключения) следующие admission-плагины:
ExtendedResourceToleration;PodNodeSelector;PodTolerationRestriction;-
EventRateLimit, который использует следующую конфигурацию:apiVersion: eventratelimit.admission.k8s.io/v1alpha1 kind: Configuration limits: - type: Namespace qps: 50 burst: 100 cacheSize: 2000
Admission-плагин
PodNodeSelectorне требует указания глобальной конфигурации, он использует только аннотации на пространстве имен (namespace’ах).Пример:
admissionPlugins: - AlwaysPullImages - NamespaceAutoProvision- строкаЭлемент массива
Допустимые значения:
AlwaysPullImages,NamespaceAutoProvision,OwnerReferencesPermissionEnforcement,PodNodeSelector,PodTolerationRestriction
- объектsettings.apiserver.auditLog
Параметры аудита.
По умолчанию:
{"output":"File"}- строкаsettings.apiserver.auditLog.output
Обязательный параметр
Тип потока для вывода журнала аудита.
По умолчанию:
FileДопустимые значения:
File,StdoutПример:
output: Stdout - строкаsettings.apiserver.auditLog.path
Путь к директории. Действует только в случае
output: "File".По умолчанию:
/var/log/kube-auditШаблон:
^[a-zA-Z0-9_/.-]+[a-zA-Z0-9_.-]$
- булевыйsettings.apiserver.auditPolicyEnabled
Применяет дополнительные политики аудита с конфигурацией из Secret’а
kube-system/audit-policy.По умолчанию:
false - объектsettings.apiserver.authn
Опциональные параметры аутентификации клиентов Kubernetes API.
По умолчанию используются данные из ConfigMap, устанавливаемого модулем user-authn.
- строкаsettings.apiserver.authn.oidcCA
CA OIDC-провайдера.
- строкаsettings.apiserver.authn.oidcIssuerAddress
Сетевой адрес OIDC-провайдера.
Примеры:
oidcIssuerAddress: 1.2.3.4oidcIssuerAddress: '' - строкаsettings.apiserver.authn.oidcIssuerURL
URL OIDC-провайдера.
Пример:
oidcIssuerURL: https://my-super-site.tech/ - строкаsettings.apiserver.authn.webhookCA
CA аутентификационного webhook’a.
- строкаsettings.apiserver.authn.webhookCacheTTL
Продолжительность кеширования ответов от аутентификационного webhook’a.
Задается в виде строки с указанием часов и минут: 30m, 1h, 2h30m, 24h.
Шаблон:
^([0-9]+h)?([0-9]+m)?([0-9]+s)?$Пример:
webhookCacheTTL: 5m - строкаsettings.apiserver.authn.webhookURL
URL аутентификационного webhook’а.
Пример:
webhookURL: https://127.0.0.1:40443/
- объектsettings.apiserver.authz
Параметры авторизации клиентов Kubernetes API.
По умолчанию используются данные из ConfigMap, устанавливаемого модулем user-authz.
- строкаsettings.apiserver.authz.webhookCA
CA webhook’а авторизации.
- строкаsettings.apiserver.authz.webhookURL
URL webhook’а авторизации.
Пример:
webhookURL: https://127.0.0.1:40443/
- булевыйsettings.apiserver.basicAuditPolicyEnabled
Применяет базовые политики аудита Deckhouse.
По умолчанию:
true - булевыйsettings.apiserver.bindToWildcard
Прослушивание на
0.0.0.0.По умолчанию API-сервер слушает на hostIP, который обычно соответствует Internal-адресу узла, но это зависит от типа кластера (Static или Cloud) и выбранной схемы размещения (layout).
По умолчанию:
false - массив строкsettings.apiserver.certSANs
Массив строк, список дополнительных SANs, с которыми будет сгенерирован сертификат API-сервера.
Кроме переданного списка, всегда используется и следующий список:
kubernetes;kubernetes.default;kubernetes.default.svc;kubernetes.default.svc.cluster.local;- Адрес API-сервера кластера;
127.0.0.1;- DNS-имя хоста (hostname);
- IP-адрес хоста.
Пример:
certSANs: - my-site.com - 192.168.67.76- строкаЭлемент массива
Шаблон:
^[0-9a-zA-Z\.-]+$
- булевыйsettings.apiserver.encryptionEnabled
Включает шифрование данных в etcd (Encrypting secret data at rest).
При включении создаётся Secret
kube-system/d8-secret-encryption-keyс ключом шифрования.Поля кастомных ресурсов, помеченные маркером
x-kubernetes-sensitive-data: true, защищаются feature gateCRDSensitiveDataдляkube-apiserver, который включён по умолчанию. Включение этого параметра добавляет шифрование в etcd к фильтрации полей через субресурс<resource>/sensitiveна основе RBAC и маскировке значений в журнале аудита.Внимание. После включения этот параметр нельзя отключить.
По умолчанию:
false - объектsettings.apiserver.publishAPI
Настройки публикации доступа к API-серверу Kubernetes.
- объектsettings.apiserver.publishAPI.ingress
Настройки для публикации API через Ingress.
- булевыйsettings.apiserver.publishAPI.ingress.addKubeconfigGeneratorEntry
Если указать
false, будет удалена запись в kubeconfig-generator.По умолчанию:
true - булевыйsettings.apiserver.publishAPI.ingress.enabled
Если указать
true, в namespacekube-systemкластера будет создан Ingress-ресурсkubernetes-api, который откроет публичный доступ к API-серверу.По умолчанию:
false - объектsettings.apiserver.publishAPI.ingress.https
Режим работы HTTPS для Ingress API-сервера.
Примеры:
https: mode: SelfSignedhttps: mode: Global global: kubeconfigGeneratorMasterCA: plainstring- объектsettings.apiserver.publishAPI.ingress.https.global
Дополнительный параметр для режима
Global.- строкаsettings.apiserver.publishAPI.ingress.https.global.kubeconfigGeneratorMasterCA
Если перед Ingress-контроллером есть внешний балансировщик, который терминирует HTTPS-трафик с использованием непубличного сертификата, укажите цепочку CA в этом параметре. Она будет добавлена в сгенерированные файлы конфигурации kubectl.
Если вы используете в кластере сертификаты, выдаваемые c помощью модуля
cert-managerи Let’s Encrypt, следует в качестве значения установить пустую строку"".В качестве CA допускается указать непосредственно сертификат внешнего балансировщика. В таком случае нужно помнить, что обновление сертификата на балансировщике сделает невалидными ранее сгенерированные файлы конфигурации kubectl.
- строкаsettings.apiserver.publishAPI.ingress.https.mode
Режим выдачи сертификатов для данного Ingress-ресурса.
В случае использования режима
SelfSigned, для Ingress-ресурса будет выпущен сертификат подписанный CA.Получить выпущенный сертификат можно следующей командой:
d8 k -n kube-system get secrets kubernetes-api-ca-key-pair -oyaml.В случае использования режима
Globalбудут применены политики из глобальной настройкиglobal.modules.https.mode. То есть если в глобальной настройке стоит режимCertManagerс ClusterIssuerletsencrypt, для Ingress-ресурса будет заказан сертификат Let’s Encrypt.По умолчанию:
SelfSignedДопустимые значения:
SelfSigned,Global
- строкаsettings.apiserver.publishAPI.ingress.ingressClass
Ingress-класс, который будет использован для публикации API Kubernetes через Ingress.
Шаблон:
^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$ - массив строкsettings.apiserver.publishAPI.ingress.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.apiserver.publishAPI.loadBalancer
Настройки для публикации API через service с типом LoadBalancer.
- объектsettings.apiserver.publishAPI.loadBalancer.annotations
Аннотации, которые будут проставлены сервису для гибкой настройки балансировщика.
Внимание. Модуль не учитывает особенности указания аннотаций в различных облаках. Если аннотации для заказа LoadBalancer’а применяются только при создании сервиса, для обновления подобных параметров вам необходимо будет удалить и добавить параметр
apiserver.loadBalancer. - булевыйsettings.apiserver.publishAPI.loadBalancer.enabled
Если указать
true, будет создан сервисkube-system/d8-control-plane-apiserverс типомLoadBalancer.По умолчанию:
false - целочисленныйsettings.apiserver.publishAPI.loadBalancer.port
Внешний порт TCP-балансировщика.
По умолчанию:
443Допустимые значения:
1 <= X <= 65534 - массив строкsettings.apiserver.publishAPI.loadBalancer.sourceRanges
Список CIDR, которым разрешен доступ к API.
Облачный провайдер может не поддерживать данную опцию и игнорировать ее.
- строкаЭлемент массива
Шаблон:
^[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\.[0-9]{1,}\/[0-9]+$
- объектsettings.apiserver.serviceAccount
Настройки выпуска ServiceAccount’ов.
Примеры:
serviceAccount: {}serviceAccount: additionalAPIAudiences: - istio-ca- массив строкsettings.apiserver.serviceAccount.additionalAPIAudiences
Список дополнительных API audience’ов, которые следует добавить при создании токенов ServiceAccount.
Список audience’ов по умолчанию содержит:
serviceAccount.issuer, eсли указаноserviceAccount.additionalAPIIssuers, eсли указаноhttps://kubernetes.default.svc.${clusterDomain}, например,https://kubernetes.default.svc.cluster.local- этот audience добавляется всегда для обратной совместимости.
Аутентификатор токенов ServiceAccount проверяет, что токены, использованные с API, привязаны как минимум к одной из этих audiences.
Этот вариант полезен при переходе от одного издателя API к другому.
- массив строкsettings.apiserver.serviceAccount.additionalAPIIssuers
Список дополнительных издателей API токенов ServiceAccount, которые нужно включить при их создании.
Эти издатели (iss) используются для проверки источника токенов, чтобы гарантировать, что они поступают от доверенных сущностей.
Когда указано несколько издателей, то первый используется для генерации токенов, а все указанные издатели принимаются для валидации токенов.
Этот вариант полезен при переходе от одного API издателя к другому.
- строкаsettings.apiserver.serviceAccount.issuer
Издатель ServiceAccount’ов. Это URL API-сервера. Значения этого поля используются как
issclaim токена и для проверки JWT-токенов ServiceAccount.Издатель по умолчанию автоматически генерируется по шаблону
https://kubernetes.default.svc.${clusterDomain}, например,https://kubernetes.default.svc.cluster.localОбратите внимание, что все поды в кластере, использующие токены ServiceAccount, должны быть перезапущены при изменении этой опции.
Пример:
issuer: https://api.example.com
- массив строкsettings.enabledFeatureGates
Список включенных в control plane экспериментальных функций (feature gates).
Описание отдельных feature gates доступно в документации Kubernetes. Список поддерживаемых в DKP feature gates доступен на странице описания модуля.
По умолчанию:
[]- строкаЭлемент массива
Шаблон:
^[a-zA-Z]+$
- строкаsettings.encryptionAlgorithm
Алгоритм асимметричного шифрования, используемый при генерации ключей и сертификатов для следующих компонентов control-plane:
apiserver;apiserver-kubelet-client;apiserver-etcd-client;front-proxy-client;etcd-server;etcd-peer;etcd-healthcheck-client.
Сертификаты для перечисленных выше компонентов будут перевыпущены с выбранным алгоритмом и длиной ключа.
Если параметр не задан, используется значение из
ClusterConfiguration.encryptionAlgorithm(по умолчаниюRSA-2048).Внимание. При перевыпуске сертификатов корневой сертификат (CA) не ротируется. Корневой сертификат создаётся с выбранным алгоритмом только при первичном бутстрапе кластера.
По умолчанию:
RSA-2048Допустимые значения:
RSA-2048,RSA-3072,RSA-4096,ECDSA-P256Пример:
encryptionAlgorithm: ECDSA-P256 - объектsettings.etcd
Параметры etcd.
- объектsettings.etcd.backup
Параметры резервного копирования etcd.
- строкаsettings.etcd.backup.cronSchedule
Расписание резервного копирования etcd в формате cron. Используется локальный часовой пояс
kube-controller-manager.По умолчанию:
0 0 * * *Пример:
cronSchedule: 0 1 * * * - булевыйsettings.etcd.backup.enabled
Включение резервного копирование etcd.
По умолчанию:
true - строкаsettings.etcd.backup.hostPath
Путь для хранения резервных копий etcd на master-узлах.
По умолчанию:
/var/lib/etcd
- объектsettings.etcd.defrag
Параметры дефрагментации etcd.
По умолчанию:
{"cronSchedule":"0 1 * * *"}- строкаsettings.etcd.defrag.cronSchedule
Расписание дефрагментации etcd в формате cron (UTC).
По умолчанию:
0 1 * * *Шаблон:
^(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)\s+(\*(\/[0-9]+)?|[0-9]+(-[0-9]+)?(\/[0-9]+)?(,[0-9]+(-[0-9]+)?(\/[0-9]+)?)*)$Пример:
cronSchedule: 0 1 * * * - булевыйsettings.etcd.defrag.enabled
Включение периодической дефрагментации etcd.
По умолчанию
true, если в кластере три и более членов etcd (мастер-узлов ≥ 3 или мастер-узлов = 2 при наличии etcd-арбитра); в остальных случаях —false. Явно заданное значение всегда имеет приоритет над вычисленным по умолчанию.Внимание. Включение дефрагментации в кластере с одним master-узлом приведёт к кратковременной недоступности control plane на время выполнения дефрагментации.
- числоsettings.etcd.maxDbSize
quota-backend-bytes параметр. Deckhouse автоматически управляет
quota-backend-bytesпараметром. Если параметрmaxDbSizeустановлен, Deckhouse будет использовать это значение для параметраquota-backend-bytesetcd.Минимальное значение: 512MB.
Максимальное значение: 8GB.
Экспериментальный. Может быть удален в будущем.
Допустимые значения:
536870912 <= X <= 8589934592
- целочисленныйsettings.failedNodePodEvictionTimeoutSeconds
Количество секунд, по прошествии которых с узла в статусе
Unreachableбудут удалены поды.Важно! При изменении этого параметра потребуется перезапуск подов.
По умолчанию:
300 - целочисленныйsettings.nodeMonitorGracePeriodSeconds
Число секунд, через которое узел перейдет в состояние
Unreachableпри потере с ним связи.По умолчанию:
40 - объектsettings.resourcesRequests
Количество ресурсов CPU и памяти, выделяемых компонентам control plane на каждом master-узле.
Эти настройки не применяются, если control plane кластера управляется облачным провайдером, например Google Kubernetes Engine или Azure Kubernetes Service. Подробнее об единицах измерения ресурсов — в документации Kubernetes.
Пример:
resourcesRequests: cpu: 1000m memory: 500Mi- строка or числоsettings.resourcesRequests.cpu
Суммарные запросы CPU для компонентов control plane на каждом master-узле.
Шаблон:
^[0-9]+m?$ - строкаsettings.resourcesRequests.memory
Суммарные запросы памяти для компонентов control plane на каждом master-узле.
Шаблон:
^[0-9]+(\.[0-9]+)?(E|P|T|G|M|K|Ei|Pi|Ti|Gi|Mi|Ki)?$
- булевыйsettings.rootKubeconfigSymlink
Поддерживать ли символическую ссылку
/root/.kube/configна/etc/kubernetes/admin.confна узлах control-plane.Когда включён модуль user-authz и этот параметр равен
false, символическая ссылка удаляется, в подахcontrol-plane-managerвыставляется переменная окруженияNODE_ADMIN_KUBECONFIGсоответствующим образом. Для доступа к API с узла используйтеd8 kс--kubeconfig=/etc/kubernetes/admin.conf(или другие учётные данные).Если модуль
user-authzвыключен,control-plane-managerэтот параметр не учитывает и сохраняет поведение по умолчанию (симлинк создаётся).Переключение обратно на
trueвосстанавливает симлинк при следующем цикле согласования.По умолчанию:
trueПримеры:
rootKubeconfigSymlink: truerootKubeconfigSymlink: false

