Как поменять домен кластера с минимальным простоем?
Добавляем новый домен и сохраняем предыдущий:
- В 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
обязательно потребуется рестарт всех прикладных Pod’ов под управлением Istio.