Изменить доменное имя в кластере
На этой странице
В инсталлированном кластере (управления, клиентском кластере) при необходимости вы можете изменить доменно имя. Это может быть необходимо в случае, когда требуется использовать внутренний балансировщик нагрузки для Ingress-контроллера и корпоративный домен вместо shturval.link.
Домен кластера управления
Обратите внимание!
- Изменение доменного имени кластера управления заблокирует доступ к его клиентским кластерам с помощью kubeconfig. Для восстановления доступа потребуется изменить доменные имена или повторно создать кластеры.
- Все действия по смене доменного имени выполняются в интерфейсе командной строки.
Чтобы изменить доменное имя:
-
Подключитесь к кластеру управления со статическим kubeconfig. В графическом интерфейсе вы можете найти его в неймспейсе кластера управления, в Secret с именем
clustername-kubeconfigили получить его с любого Control Plane узла кластера по пути/etc/kubernetes/admin.conf. -
Создайте резервные копии всех ресурсов, в которые будут вноситься правки:
- профили кластеров (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
- Измените доменное имя в:
- дефолтном профиле кластера -
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
- Перезапустите поды в неймспейсах
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
Дождитесь перезапуска подов. При необходимости установки корпоративного сертификата после изменения домена выполните инструкцию из раздела Сценарий добавления корпоративного сертификата в кластер.
Домен клиентского кластера
Чтобы изменить доменное имя в клиентском кластере:
-
Подключитесь к кластеру со статическим kubeconfig. В графическом интерфейсе вы можете найти его в кластере управления, в неймспейсе с именем клиентского кластера (Secret с именем
clustername-kubeconfig) или получить его с любого Control Plane узла кластера по пути/etc/kubernetes/admin.conf. -
Создайте резервные копии всех ресурсов, которые будут изменены:
- 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
- Измените доменное имя в:
- 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"'"}]'
- Измените доменное имя в 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
- Перезапустите поды в неймспейсах
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
Дождитесь перезапуска подов.