Как поменять домен кластера с минимальным простоем?
Добавьте новый домен и сохраните предыдущий. Для этого измените конфигурацию параметров:
-
В controlPlaneManager.apiserver:
- controlPlaneManager.apiserver.certSANs,
- apiserver.serviceAccount.additionalAPIAudiences,
- apiserver.serviceAccount.additionalAPIIssuers.
Пример:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: control-plane-manager spec: version: 1 enabled: true settings: apiserver: certSANs: - kubernetes.default.svc.<старый clusterDomain> - kubernetes.default.svc.<новый clusterDomain> serviceAccount: additionalAPIAudiences: - https://kubernetes.default.svc.<старый clusterDomain> - https://kubernetes.default.svc.<новый clusterDomain> additionalAPIIssuers: - https://kubernetes.default.svc.<старый clusterDomain> - https://kubernetes.default.svc.<новый clusterDomain>
-
В kubeDns.clusterDomainAliases:
Пример:
apiVersion: deckhouse.io/v1alpha1 kind: ModuleConfig metadata: name: kube-dns spec: version: 1 enabled: true settings: clusterDomainAliases: - <старый clusterDomain> - <новый clusterDomain>
- Дождитесь перезапуска
kube-apiserver
. - Поменяйте
clusterDomain
на новый вdhctl config edit cluster-configuration
.
Важно! Если версия вашего Kubernetes 1.20 и выше, контроллеры для работы с API-server гарантированно используют расширенные токены для ServiceAccount’ов. Это означает, что каждый такой токен содержит дополнительные поля iss:
и aud:
, которые включают в себя старый clusterDomain
(например, "iss": "https://kubernetes.default.svc.cluster.local"
).
При смене clusterDomain
API-server начнет выдавать токены с новым service-account-issuer
, но благодаря произведенной конфигурации additionalAPIAudiences
и additionalAPIIssuers
по-прежнему будет принимать старые токены. По истечении 48 минут (80% от 3607 секунд) Kubernetes начнет обновлять выпущенные токены, при обновлении будет использован новый service-account-issuer
. Через 90 минут (3607 секунд и немного больше) после перезагрузки kube-apiserver можете удалить конфигурацию serviceAccount
из конфигурации control-plane-manager
.
Важно! Если вы используете модуль istio, после смены clusterDomain
обязательно потребуется рестарт всех прикладных подов под управлением Istio.