Смена сертификатов в Службе Azure Kubernetes (AKS)

Служба Azure Kubernetes (AKS) использует сертификаты для проверки подлинности множества своих компонентов. Кластеры с управлением доступом на основе ролей Azure (Azure RBAC), созданные после марта 2022 года, включены с автоматической сменой сертификата. Возможно, вам потребуется периодически повернуть эти сертификаты по соображениям безопасности или политики. Например, может использоваться политика ротации всех сертификатов каждые 90 дней.

Примечание.

Автоматическое поворот сертификата по умолчанию включается только для кластеров AKS с поддержкой RBAC.

В этой статье показано, как работает смена сертификатов в кластере AKS.

Подготовка к работе

Для этой статьи требуется Azure CLI версии 2.0.77 или более поздней. Чтобы узнать версию, выполните команду az --version. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0.

Сертификаты AKS, центры сертификации и учетные записи служб

AKS создает и использует следующие сертификаты, центры сертификации (ЦС) и учетные записи служб (SA):

  • Сервер API AKS создает ЦС с именем ЦС кластера.
  • Сервер API использует ЦС кластера, который подписывает сертификаты для односторонней связи от сервера API к модулям kubelet.
  • Каждый kubelet создает запрос на подпись сертификата (CSR), который подписывает ЦС кластера для связи с kubelet на сервер API.
  • Агрегатор API использует ЦС кластера для выдачи сертификатов для взаимодействия с другими API. Агрегатор API также может использовать собственный ЦС для выдачи этих сертификатов, однако в настоящее время используется ЦС кластера.
  • Каждый узел использует маркер SA, который подписывает ЦС кластера.
  • Клиент kubectl использует сертификат для взаимодействия с кластером AKS.

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

Примечание.

  • Кластеры AKS, созданные до мая 2019 года, имеют сертификаты, срок действия которых истекает через два года.
  • Кластеры AKS, созданные после мая 2019 года, имеют сертификаты ЦС кластера, срок действия которых истекает через 30 лет.

Вы можете проверить, когда кластер был создан с помощью kubectl get nodes команды, которая показывает возраст пулов узлов.

Проверка дат окончания срока действия сертификата

Проверка срока действия сертификата кластера

  • Проверьте дату окончания срока действия сертификата кластера с помощью kubectl config view команды.

    kubectl config view --raw -o jsonpath="{.clusters[?(@.name == '')].cluster.certificate-authority-data}" | base64 -d | openssl x509 -text | grep -A2 Validity
    

Проверка срока действия сертификата сервера API

  • Проверьте дату окончания срока действия сертификата сервера API с помощью следующей curl команды.

    curl https://{apiserver-fqdn} -k -v 2>&1 | grep expire
    

Проверка срока действия сертификата узла агента VMAS

  • Проверьте дату окончания срока действия сертификата узла агента VMAS с помощью az vm run-command invoke команды.

    az vm run-command invoke --resource-group MC_rg_myAKSCluster_region --name vm-name --command-id RunShellScript --query 'value[0].message' -otsv --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate"
    

Проверка срока действия сертификата для узла агента масштабируемого набора виртуальных машин

  • Проверьте дату окончания срока действия сертификата узла агента масштабируемого набора виртуальных машин с помощью az vmss run-command invoke команды.

    az vmss run-command invoke --resource-group "MC_rg_myAKSCluster_region" --name "vmss-name" --command-id RunShellScript --instance-id 1 --scripts "openssl x509 -in  /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate" --query "value[0].message"
    

Автоматическая смена сертификата

Для автоматической смены сертификатов, отличных от ЦС, кластер должен иметь начальную загрузку TLS, которая включена по умолчанию во всех регионах Azure.

Примечание.

  • Если у вас есть существующий кластер, необходимо обновить этот кластер, чтобы включить автоматическую смену сертификатов.
  • Не отключайте начальную загрузку, чтобы включить автоматическую смену.
  • Если кластер находится в остановленном состоянии во время смены автоматических сертификатов, то вращаются только сертификаты плоскости управления. В этом случае необходимо повторно создать пул узлов после смены сертификатов, чтобы инициировать смену сертификата пула узлов.

Для всех кластеров AKS, созданных или обновленных после марта 2022 года, Служба Azure Kubernetes автоматически поворачивает сертификаты, отличные от ЦС, как на уровне управления, так и на узлах агента в пределах 80 % допустимого времени сертификата клиента до истечения срока их действия без простоя кластера.

Как проверить, включена ли начальная загрузка TLS для текущего пула узлов агента?

  1. Убедитесь, что в кластере включена загрузка TLS, перейдя по одному из следующих путей:

    • На узле Linux: /var/lib/kubelet/bootstrap-kubeconfig или /host/var/lib/kubelet/bootstrap-kubeconfig
    • На узле Windows: C:\k\bootstrap-config

    Дополнительные сведения см. в разделе "Подключение к узлам кластера Служба Azure Kubernetes" для обслуживания или устранения неполадок.

    Примечание.

    Путь к файлу может измениться по мере развития версий Kubernetes.

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

Смена сертификатов кластера вручную

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

Смена сертификатов с помощью az aks rotate-certs повторного создания всех узлов, масштабируемых наборов виртуальных машин и дисков может привести к простою кластера AKS до 30 минут.

  1. Подключитесь к кластеру az aks get-credentials с помощью команды.

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    
  2. Смена всех сертификатов, центров сертификации и SAs в кластере az aks rotate-certs с помощью команды.

    az aks rotate-certs --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
    

    Внимание

    Выполнение команды az aks rotate-certs может занимать до 30 минут. Если команду не удалось выполнить, используйте az aks show, чтобы проверить, что кластер имеет статус Ротация сертификата. Если для кластера отображается статус сбоя, повторно выполните az aks rotate-certs, чтобы снова выполнить ротацию сертификатов.

  3. Убедитесь, что старые сертификаты больше не являются допустимыми с помощью любой kubectl команды, например kubectl get nodes.

    kubectl get nodes
    

    Если вы не обновили сертификаты, используемые kubectl, вы увидите ошибку, аналогичную следующему примеру выходных данных:

    Unable to connect to the server: x509: certificate signed by unknown authority (possibly because of "crypto/rsa: verification error" while trying to verify candidate authority certificate "ca")
    
  4. Обновите сертификат, используемый kubectl az aks get-credentials с помощью команды с флагом --overwrite-existing .

    az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
    
  5. Убедитесь, что сертификаты обновлены с помощью kubectl get команды.

    kubectl get nodes
    

    Примечание.

    Если у вас есть службы, запущенные поверх AKS, вам может потребоваться также обновить их сертификаты.

Следующие шаги

В этой статье показано, как вручную и автоматически повернуть сертификаты кластера, центры сертификации и единые узлы. Дополнительные сведения см. в рекомендациях по обеспечению безопасности кластера и обновлений в Служба Azure Kubernetes (AKS).