Смена сертификатов Kubernetes в Azure Stack Hub

В этом документе содержатся рекомендации по смене сертификатов в существующем кластере обработчика AKS и рекомендации по использованию в aks-engine rotate-certs качестве инструмента.

Важно!

Эта функция сейчас доступна в виде общедоступной предварительной версии. Эта предварительная версия предоставляется без соглашения об уровне обслуживания и не рекомендована для использования рабочей среде. Некоторые функции могут не поддерживаться или их возможности могут быть ограничены. Дополнительные сведения см. в статье Дополнительные условия использования предварительных выпусков Microsoft Azure.

Предварительные требования

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

Планирование смены сертификатов

При использовании этой функции следует помнить, что уровень управления Kubernetes будет недоступен во время действий по обновлению, проверке и перезапуску. Планируйте эту операцию обслуживания соответствующим образом. Кроме того, планируйте выполнение этой операции в промежуточной среде с равной конфигурацией рабочей среды перед попыткой в рабочей среде.

Прежде чем пытаться выполнить эту операцию, ознакомьтесь со следующими рекомендациями.

  • Вам потребуется доступ к модели API (apimodel.json), созданной командами aks-engine deploy или aks-engine generate. По умолчанию этот файл помещается в относительный каталог, _output/<clustername>/например .

  • Операция aks-engine rotate-certs приводит к простою сервера API.

  • aks-engine rotate-certs ожидает модель API, соответствующую текущему состоянию кластера. aks-engine rotate-certs выполняет удаленные команды на узлах кластера и использует сведения о модели API для установления безопасного SSH-подключения. aks-engine rotate-certs также использует некоторые ресурсы для именования в соответствии с исходным aks-engine развертыванием, например виртуальные машины должны соответствовать именованию, предоставленному aks-engine.

  • aks-engine rotate-certs использует рабочее подключение к плоскости управления кластером во время смены сертификатов:

    • Проверка каждого шага процесса.
    • Чтобы перезапустить или повторно создать ресурсы кластера, такие как модули pod kube-system и маркеры учетной записи службы.

    При смене сертификатов кластера в виртуальной сети, закрытой для внешнего доступа, необходимо запустить aks-engine rotate-certs с виртуальной машины узла, которая имеет сетевой доступ к плоскости управления, например виртуальную машину jumpbox, которая находится в той же виртуальной сети, что и главные виртуальные машины.

  • При использовании aks-engine rotate-certs в рабочей среде рекомендуется выполнить тестирование смены сертификатов в кластере, созданном в соответствии с теми же спецификациями. То есть кластер создается с той же конфигурацией кластера, той же версией программы командной строки обработчика AKS и тем же набором включенных надстроек, что и рабочий кластер перед сменой сертификата. Подсистема AKS поддерживает различные конфигурации кластера и степень сквозного тестирования, которое команда обработчика AKS не может практически охватывать каждую возможную конфигурацию. Поэтому рекомендуется убедиться в промежуточной среде, с которой работает aks-engine rotate-certs конкретная конфигурация кластера, прежде чем пытаться выполнить операцию в рабочем кластере.

  • aks-engine rotate-certsне гарантирует обратную совместимость. Если вы развернули с помощью aks-engine версии 0.60.x, следует предпочесть выполнение процесса смены сертификатов с версией 0.60.x.

  • На данный момент выборка нового набора сертификатов из Key Vault не поддерживается.

  • Используйте надежное сетевое подключение. aks-engine rotate-certs требует выполнения нескольких удаленных команд, которые подвержены потенциальным сбоям, в основном если подключение к узлам кластера не является надежным. Запуск aks-engine rotate-certs с виртуальной машины, работающей на целевой метке Azure Stack, может уменьшить возникновение временных проблем.

Параметры

Параметр Обязательно Описание
--api-model yes Относительный путь к модели API (определению кластера), которая объявляет ожидаемую конфигурацию кластера.
--ssh-host yes Полное доменное имя (FQDN) или IP-адрес прослушивателя SSH, который может связаться со всеми узлами в кластере.
--linux-ssh-private-key yes Путь к допустимому закрытому ключу SSH для доступа к узлам Linux кластера.
--location yes Расположение Azure, в котором развернут кластер.
--subscription-id yes Подписка Azure, в которой развернута инфраструктура кластера.
--resource-group yes Группа ресурсов Azure, в которой развернута инфраструктура кластера.
--client-id зависит Идентификатор клиента субъекта-службы. Требуется, если для метода проверки подлинности задано значение client_secret или client_certificate.
--client-secret зависит Секрет клиента субъекта-службы. Требуется, если для метода проверки подлинности задано значение client_secret.
--azure-env зависит Имя целевого облака. Необязательно, если целевое облако — AzureCloud.
--certificate-profile Нет Относительный путь к JSON-файлу с новым набором сертификатов.
--force Нет Принудительное выполнение, даже если сервер API не отвечает.

Простые шаги по смене сертификатов

После чтения всех требований выполните команду aks-engine rotate-certs с соответствующими аргументами:

./bin/aks-engine rotate-certs \
  --location <resource-group-location> \
  --api-model <generated-apimodel.json> \
  --linux-ssh-private-key <private-SSH-key> \
  --ssh-host <apiserver-URI> \
  --resource-group <resource-group-name> \
  --client-id <service-principal-id> \
  --client-secret <service-principal-secret> \
  --subscription-id <subscription-id> \
  --azure-env <cloud-name>

Пример:

./bin/aks-engine rotate-certs \
  --location "westus2" \
  --api-model "_output/my-cluster/apimodel.json" \
  --linux-ssh-private-key "~/.ssh/id_rsa" \
  --ssh-host "my-cluster.westus2.cloudapp.azure.com"\
  --resource-group "my-cluster" \
  --client-id "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
  --client-secret "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
  --subscription-id "12345678-XXXX-YYYY-ZZZZ-1234567890ab" \
  --azure-env "AzureStackCloud" # optional if targeting AzureCloud

Смена front-proxy сертификатов

Подсистема AKS создает отдельный PKI для front-proxy процесса начальной загрузки узла и доставляет их всем узлам через etcd. Чтобы эффективно использовать эту функцию, необходимо заменить сертификаты, rotate-certs хранящиеся в etcd. Срок front-proxy действия сертификатов истекает через 30 лет. aks-engine rotate-certs поворачивает сертификаты переднего прокси-сервера.

Диагностика

Если процесс смены сертификатов останавливается до завершения из-за сбоя или временной проблемы, например сетевого подключения, можно повторно запустить aks-engine rotate-certs с помощью флага --force .

Также обратите внимание, что aks-engine rotate-certs регистрирует выходные данные каждого шага в файле /var/log/azure/rotate-certs.log (Linux) и c:\\k\\rotate-certs.log (Windows).

Дополнительные сведения о том, что происходит под капотом при выполнении этой операции или для дальнейшей настройки, см. в разделе "Под капотом".

Дальнейшие действия