Изменить доменное имя в кластере

В инсталлированном кластере (управления, клиентском кластере) при необходимости вы можете изменить доменно имя. Это может быть необходимо в случае, когда требуется использовать внутренний балансировщик нагрузки для Ingress-контроллера и корпоративный домен вместо shturval.link.

Домен кластера управления

Обратите внимание!

  • Изменение доменного имени кластера управления заблокирует доступ к его клиентским кластерам с помощью kubeconfig. Для восстановления доступа потребуется изменить доменные имена или повторно создать кластеры.
  • Все действия по смене доменного имени выполняются в интерфейсе командной строки.

Чтобы изменить доменное имя:

  1. Подключитесь к кластеру управления со статическим kubeconfig. В графическом интерфейсе вы можете найти его в неймспейсе кластера управления, в Secret с именем clustername-kubeconfig или получить его с любого Control Plane узла кластера по пути /etc/kubernetes/admin.conf.

  2. Создайте резервные копии всех ресурсов, в которые будут вноситься правки:

  • профили кластеров (ClusterProfile);
  • ShturvalServicePatch и ShturvalServiceConfig;
  • конфигурация узлов (NCI).

В случае ошибки изменения доменного имени в кластере, вы сможете использовать бэкап для отката изменений.

Команды резервного копирования
mkdir bak
kubectl get clusterprofile -n kube-system -o yaml >./bak/clusterprofile.yaml
kubectl get shturvalservicepatch -o yaml >./bak/shturvalservicepatch.yaml
kubectl get shturvalserviceconfig -o yaml >./bak/shturvalserviceconfig.yaml
kubectl get nodeconfigitem -o yaml >./bak/nodeconfigitem.yaml
  1. Измените доменное имя в:
  • дефолтном профиле кластера - default-client-cluster-profile;
  • ShturvalServicePatch: shturval-ingress-controller-common и shturval-frontend-oidc-client;
  • NCI - controlplane-oidc-nci;
  • ShturvalServiceConfig: shturval-auth, shturval-backend, shturval-cd, shturval-dashboards, shturval-frontend, shturval-metrics-collector, shturval-monitoring, как приведено далее.
Подготовка переменных
export KUBECONFIG=<Ваше значение>
export OLD="<Ваше значение>"
export NEW="<Ваше значение>"
Переменная Описание Пример
OLD Текущее доменное имя кластера управления mgmtcluster.ip-10-11-12-14.shturval.link
NEW Новое (корпоративное) доменное имя кластера управления mgmtcluster.mydomain.ru
KUBECONFIG Статический kubeconfig кластера управления mgmtcluster.conf
Команды изменения домена
# Замените на новое доменное имя значения домена в кастомных ресурсах
kubectl patch clusterprofile default-client-cluster-profile -n kube-system --type=json -p='[{"op": "replace", "path": "/spec/loggingEndpoint", "value": "logs.'$NEW'"}, {"op": "replace", "path": "/spec/monitoringEndpoint", "value": "vminsert.'$NEW'"}]'
kubectl patch shturvalservicepatch shturval-ingress-controller-common --type=json -p='[{"op": "replace", "path": "/spec/customvalues/controller/shturval/commonName", "value": "'"$NEW"'"}]'
kubectl patch shturvalservicepatch shturval-frontend-oidc-client --type=json -p='[{"op": "replace", "path": "/spec/customvalues/auth_url_production", "value": "//shturval.'"$NEW"'"}]'
kubectl patch nodeconfigitem controlplane-oidc-nci --type=json -p='[{"op": "replace", "path": "/spec/kubeapi/oidc/issuerurl", "value": "https://shturval.'"$NEW"'"}]'

# Замените на новое доменное имя в ShturvalServiceConfig
for resource in shturval-auth shturval-backend shturval-cd shturval-dashboards shturval-frontend shturval-metrics-collector shturval-monitoring; do echo "Processing $resource..."; NEW_VALUES=$(kubectl get shturvalserviceconfig "$resource" -o jsonpath='{.spec.customvalues}' | jq --arg old "$OLD" --arg new "$NEW" 'tostring | gsub($old; $new) | fromjson'); kubectl patch shturvalserviceconfig "$resource" --type=json -p="[{'op': 'replace', 'path': '/spec/customvalues', 'value': $NEW_VALUES}]"; done

# Обновите аннотации для доступа в ArgoCD из неймспейса
for resource in $(kubectl get namespace -o jsonpath='{.items[*].metadata.name}'); do 
   echo "Processing $resource..."; \
   NEW_VALUES=$(kubectl get namespace "$resource" -o jsonpath='{.metadata.annotations}' | jq --arg old "$OLD" --arg new "$NEW" 'tostring | gsub($old; $new) | fromjson'); kubectl patch namespace "$resource" --type=json -p="[{'op': 'replace', 'path': '/metadata/annotations', 'value': $NEW_VALUES}]"; \
done 

# Ожидание на 5 минут для применения изменений
sleep 5m
  1. Перезапустите поды в неймспейсах shturval-backend, shturval-cd и ingress, как приведено далее:
Команда перезапуска подов
for ns in shturval-backend shturval-cd ingress;do for i in $(kubectl -n $ns get deployments.apps,statefulset.apps -o name);do kubectl -n $ns rollout restart $i;done; done

Дождитесь перезапуска подов. При необходимости установки корпоративного сертификата после изменения домена выполните инструкцию из раздела Сценарий добавления корпоративного сертификата в кластер.

Домен клиентского кластера

Чтобы изменить доменное имя в клиентском кластере:

  1. Подключитесь к кластеру со статическим kubeconfig. В графическом интерфейсе вы можете найти его в кластере управления, в неймспейсе с именем клиентского кластера (Secret с именем clustername-kubeconfig) или получить его с любого Control Plane узла кластера по пути /etc/kubernetes/admin.conf.

  2. Создайте резервные копии всех ресурсов, которые будут изменены:

  • ShturvalServicePatch;
  • ShturvalServiceConfig;
  • конфигурация узлов (NCI).

В случае ошибки изменения доменного имени в кластере, вы сможете использовать бэкап для отката изменений.

Команда
mkdir bak_client
kubectl get shturvalservicepatch -o yaml >./bak_client/shturvalservicepatch.yaml
kubectl get shturvalserviceconfig -o yaml >./bak_client/shturvalserviceconfig.yaml
kubectl get nodeconfigitem -o yaml >./bak_client/nodeconfigitem.yaml
  1. Измените доменное имя в:
  • ShturvalServicePatch - shturval-ingress-controller-common;
  • NCI - controlplane-oidc-nci, как приведено далее.
Подготовка переменных
export KUBECONFIG=<Ваше значение>
export OLD="<Ваше значение>"
export NEW="<Ваше значение>"
export OLDMGMT="<Ваше значение>"
export NEWMGMT="<Ваше значение>"
export CA=<Ваше значение> # Переменная нужна, только если в кластере управления изменен корневой сертификат
Переменная Описание Пример
OLD Текущее доменное имя клиентского кластера mycluster.ip-10-11-12-13.shturval.link
NEW Новое (корпоративное) доменное имя клиентского кластера mycluster.mydomain.ru
KUBECONFIG Статический kubeconfig клиентского кластера mycluster.conf
OLDMGMT Текущее доменное имя кластера управления mgmtcluster.ip-10-11-12-14.shturval.link
NEWMGMT Новое (корпоративное) доменное имя кластера управления mgmtcluster.mydomain.ru
CA Путь до корневого сертификата. Если в кластере управления не был изменен корневой сертификат, не экспортируйте эту переменную /path/to/ca.crt
Команды изменения доменного имени в кастомных ресурсах
kubectl patch shturvalservicepatch shturval-ingress-controller-common --type=json -p='[{"op": "replace", "path": "/spec/customvalues/controller/shturval/commonName", "value": "'"$NEW"'"}]'
kubectl patch nodeconfigitem controlplane-oidc-nci --type=json -p='[{"op": "replace", "path": "/spec/kubeapi/oidc/issuerurl", "value": "https://shturval.'"$NEWMGMT"'"}]'

Если в кластере управления был изменен корневой CA сертификат, замените его в настройках OIDC, выполнив команду приведенную далее:

Команда замены корневого сертификата
CAVALUE=$(base64 -w0 -i $CA); kubectl patch nodeconfigitem controlplane-oidc-nci --type=json -p='[{"op": "replace", "path": "/spec/kubeapi/oidc/cafile", "value": "'"$CAVALUE"'"}]'
  1. Измените доменное имя в ShturvalServiceConfig:
  • shturval-cd;
  • shturval-dashboards;
  • shturval-metrics-collector;
  • shturval-monitoring;
  • shturval-log-collector.
Команда
for resource in shturval-cd shturval-dashboards shturval-metrics-collector shturval-monitoring shturval-log-collector; do 
   echo "Processing $resource..."; \
   NEW_VALUES=$(kubectl get shturvalserviceconfig "$resource" -o jsonpath='{.spec.customvalues}' | jq --arg old "$OLD" --arg new "$NEW" 'tostring | gsub($old; $new) | fromjson'); kubectl patch shturvalserviceconfig "$resource" --type=json -p="[{'op': 'replace', 'path': '/spec/customvalues', 'value': $NEW_VALUES}]"; \
   NEW_VALUES=$(kubectl get shturvalserviceconfig "$resource" -o jsonpath='{.spec.customvalues}' | jq --arg old "$OLDMGMT" --arg new "$NEWMGMT" 'tostring | gsub($old; $new) | fromjson'); kubectl patch shturvalserviceconfig "$resource" --type=json -p="[{'op': 'replace', 'path': '/spec/customvalues', 'value': $NEW_VALUES}]"; \
done

# Обновите аннотации для доступа в ArgoCD из неймспейса
for resource in $(kubectl get namespace -o jsonpath='{.items[*].metadata.name}'); do 
   echo "Processing $resource..."; \
   NEW_VALUES=$(kubectl get namespace "$resource" -o jsonpath='{.metadata.annotations}' | jq --arg old "$OLD" --arg new "$NEW" 'tostring | gsub($old; $new) | fromjson'); kubectl patch namespace "$resource" --type=json -p="[{'op': 'replace', 'path': '/metadata/annotations', 'value': $NEW_VALUES}]"; \
done 

# Ожидание на 5 минут для применения изменений
sleep 5m
  1. Перезапустите поды в неймспейсах ingress и shturval-cd, как приведено далее:
Команда
for ns in shturval-cd ingress;do for i in $(kubectl -n $ns get deployments.apps,statefulset.apps -o name);do kubectl -n $ns rollout restart $i;done; done

Дождитесь перезапуска подов.

×