Как поменять домен кластера с минимальным простоем?
Добавляем новый домен и сохраняем предыдущий:
- В controlPlaneManager.apiserver.certSANs прописать:
kubernetes.default.svc.<старый clusterDomain>
;kubernetes.default.svc.<новый clusterDomain>
.
- В kubeDns.clusterDomainAliases указать:
- старый clusterDomain;
- новый clusterDomain.
- Дождаться переката kube-apiserver.
- Поменять
clusterDomain
на новый вdhctl config edit cluster-configuration
.
Важно! Если версия вашего Kubernetes 1.20 и выше, контроллеры для работы с apiserver гарантированно используют расширенные токены для ServiceAccount’ов. Это означает, что каждый такой токен содержит дополнительные поля iss:
и aud:
, которые включают в себя старый clusterDomain
(например, "iss": "https://kubernetes.default.svc.cluster.local"
). При смене clusterDomain
apiserver перестанет принимать запросы со старыми токенами, что приведет к ошибкам в работе всех контроллеров, включая deckhouse. Решение — дождаться ротации токенов, которая произойдет раньше, чем expiration time токена, либо рестартнуть все поды со всеми контроллерами.
Важно! Если вы используете модуль istio, после смены clusterDomain
обязательно потребуется рестарт всех прикладных подов под управлением Istio.