Перейти к содержанию

Установка пользовательских сертификатов для Web панели

Предварительная подготовка

Вам понадобится:

  • Админский kubeconfig управляющего кластера
  • Админский kubeconfig всех подчинённых кластеров
  • Предварительно сгенерированные сертификат, ключ, CA сертификат
  • Настроенный kubectl
  • Обязательно!!! При выписывании сертификата указать доменное имя в CN и SAN.

Внимание!

При использовании промежуточных центров сертификации (Intermediate CAs) необходимо включить всю цепочку доверия (включая все промежуточные сертификаты), в файл cacerts.pem в формате PEM-bundle.

Заметка

Все действия выполняйте, используя админский kubeconfig, так как в момент обновления Боцман может быть недоступен.
Админский kubeconfig можно получить:
1. С АРМ Администратора из директории .bootsmanctl/management/
2. С любого мастер-узла управляющего кластера по пути /etc/kubernetes/admin.conf

Обновление сертификатов

Перейдите в директорию с сертификатами и переименуйте файлы:

  • Сертификат - tls.crt
  • Закрытый ключ - tls.key
  • CA - cacerts.pem

Обновите секрет с CA

kubectl -n cattle-system create secret generic tls-ca \
  --from-file=cacerts.pem \
  --dry-run=client --save-config -o yaml | kubectl apply -f -

Обновите конфигурацию модуля Web панели

Задайте имя управляющего кластера для будущих команд

MGMT_CLUSTER_NAME=example-cluster-name

Выполните команду

kubectl patch Config.addon.bootsman.tech $MGMT_CLUSTER_NAME-rancher --type=merge \
--patch="{\"spec\": {\"values\": {\"ingress\": {\"tls\": {\"source\": \"secret\"}},\"privateCA\": true }}}"

Дождитесь перезагрузки подов rancher и rancher-webhook

Текущий статус:

kubectl get pods -n cattle-system

Обновление сертификата Web панели

Закодируйте содержимое в base64

base64ca=$(cat cacerts.pem | base64 -w0)
base64cert=$(cat tls.crt | base64 -w0)
base64key=$(cat tls.key | base64 -w0)

Далее потребуется изменить значение в secret tls-rancher-ingress в namespace cattle-system. Это можно сделать с помощью kubectl, Web панели

kubectl patch secret tls-rancher-ingress -n cattle-system --patch="{\"data\":{\"ca.crt\":\"$base64ca\",\"tls.crt\":\"$base64cert\",\"tls.key\":\"$base64key\" }}"

Перезапуск Provisioning-operator

kubectl rollout restart -n provisioning-system deployment provisioning-controller-manager

Обновление сертификатов в подчинённых кластерах

Предупреждения!

Действия из этого раздела повторите для всех подчинённых кластеров
Используйте команду для определение на каком кластере проводятся работы

kubectl cluster-info

После обновления сертификатов Web панели через некоторое время подчинённые кластеры отключатся от него.

Для восстановления соединения требуется обновить CA хеш сумму для агента на каждом подчиненном кластере

Задайте параметр URL Web панели

BOOTSMAN_WEB_URL=https://example.com

Получите Хеш суммы нового CA сертификата и примените это значение к агенту

CATTLE_CA_CHECKSUM=$(curl -k -s -fL ${BOOTSMAN_WEB_URL}/v3/settings/cacerts | jq -r .value | sha256sum | awk '{print $1}')
kubectl set env -n cattle-system deployment/cattle-cluster-agent -c cluster-register CATTLE_CA_CHECKSUM=${CATTLE_CA_CHECKSUM}

Немного подождите, и кластер вновь станет доступным в web-панели rancher.

Связанные статьи