Как поменять домен кластера с минимальным простоем?

Добавляем новый домен и сохраняем предыдущий:

  1. В controlPlaneManager.apiserver.certSANs прописать
    • kubernetes.default.svc.<старый clusterDomain>
    • kubernetes.default.svc.<новый clusterDomain>
  2. В kubeDns.clusterDomainAliases указать
    • старый clusterDomain.
    • новый clusterDomain.
  3. Дождаться переката kube-apiserver.
  4. Поменять 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.