Поделиться через


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

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

Внимание

Начиная с 30 марта 2026 г. служба Azure Kubernetes (AKS) больше не поддерживает тег пула узлов aks-disable-kubelet-serving-certificate-rotation=true, отключающий ротацию обслуживающего сертификата Kubelet (KSCR). Вы можете создать пулы узлов с помощью этого тега, но AKS не будет уважать его. Это поведение означает, что пулы узлов будут созданы с включенной функцией KSCR. Для существующих пулов узлов KSCR будет автоматически включен в следующей операции повторного создания образа. До этой даты можно обновить пулы узлов с помощью команды [][az aks nodepool updateaz-aks-nodepool-update] с тегом aks-disable-kubelet-serving-certificate-rotation=true . Чтобы подготовиться к удалению, необходимо обновить системные нагрузки с правильным путем к сертификату. Дополнительные сведения см. в вопросе на GitHub о завершении поддержки. Чтобы быть в курсе объявлений и обновлений, ознакомьтесь с заметками о выпуске AKS.

Предпосылки

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

  • Настройте kubectl для подключения к кластеру AKS с помощью команды az aks get-credentials:

    az aks get-credentials --resource-group <resource-group> --name <cluster-name>
    

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

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

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

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

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

Внимание

Дата окончания срока действия сертификатов зависит от того, когда был создан кластер AKS:

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

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

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

  • Проверьте дату окончания срока действия сертификата кластера с помощью 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
    

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

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

    Ключевые параметры в этой команде: — --resource-group <node-resource-group>группа ресурсов, содержащая узел агента виртуальной машины. - --name <vm-name>: имя узла агента виртуальной машины. - --scripts "openssl x509 -in /etc/kubernetes/certs/apiserver.crt -noout -enddate": скрипт, который получает дату окончания срока действия сертификата сервера API, расположенного по адресу /etc/kubernetes/certs/apiserver.crt.

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

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

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

    Ключевые параметры в этой команде: — --resource-group <node-resource-group>группа ресурсов, содержащая узел агента масштабируемого набора виртуальных машин Azure. - --name <vmss-name>: имя масштабируемого набора виртуальных машин Azure. - --instance-id 1: идентификатор экземпляра узла агента масштабируемого набора виртуальных машин Azure. - --scripts "openssl x509 -in  /var/lib/kubelet/pki/kubelet-client-current.pem -noout -enddate": скрипт, который получает дату окончания срока действия сертификата клиента kubelet, расположенного по адресу /var/lib/kubelet/pki/kubelet-client-current.pem.

    az vmss run-command invoke --resource-group <node-resource-group> --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"
    

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

  1. Проведите ротацию всех сертификатов, центров сертификации и SAs в вашем кластере с помощью команды az aks rotate-certs.

    az aks rotate-certs --resource-group <resource-group> --name <cluster-name>
    

    Внимание

    Команда az aks rotate-certs повторно создает все узлы агента, масштабируемые наборы виртуальных машин Azure и диски. Эта команда также может вызвать до 30 минут простоя кластера AKS. Если команда завершится сбоем до завершения, используйте команду [az aks show][az-aks-show], чтобы проверить состояние кластера Certificate Rotating. Если кластер находится в состоянии сбоя, повторите az aks rotate-certs команду, чтобы снова повернуть сертификаты.

  2. Убедитесь, что старые сертификаты больше не являются допустимыми с помощью любой 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")
    
  3. Обновите сертификат, используемый kubectlaz aks get-credentials с помощью команды с флагом --overwrite-existing .

    az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existing
    
  4. Убедитесь, что сертификаты обновляются с помощью kubectl get команды.

    kubectl get nodes
    

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

Смена сертификата обслуживания kubelet

При обновлении сертификата обслуживания kubelet, AKS разрешает начальную загрузку протокола TLS для обеих задач: начальной загрузки и обновления сертификатов обслуживания, подписанных УЦ кластера.

Ограничения для смены сертификата kubelet

  • Поддерживается в Kubernetes версии 1.27 и выше.
  • Не поддерживается, если пул узлов использует снимок узлового пула на основе любого образа узла старше 202501.12.0.
  • Эту функцию нельзя включить вручную. В существующих пулах узлов по умолчанию включена ротация серверного сертификата Kubelet при первом обновлении до любой версии Kubernetes 1.27 или более поздней. Ротация обслуживающего сертификата Kubelet включена по умолчанию в новых пулах узлов, использующих Kubernetes версии 1.27 или более поздней. Чтобы определить, включена ли ротация сертификатов обслуживания kubelet в вашем регионе, проверьте выпуски AKS.

Убедитесь, что включена ротация обслуживающего сертификата kubelet

Каждому узлу с включенной функцией автоматически присваивается метка kubernetes.azure.com/kubelet-serving-ca=cluster.

  • Убедитесь, что метки заданы с помощью kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca команды.

    kubectl get nodes -L kubernetes.azure.com/kubelet-serving-ca
    

    Выходные данные должны отображать метку kubernetes.azure.com/kubelet-serving-ca со значением cluster для каждого узла агента.

Убедитесь, что начальная загрузка TLS kubelet работает

  • Убедитесь, что процесс начальной загрузки выполняется с помощью kubectl get команды.

    kubectl get csr --field-selector=spec.signerName=kubernetes.io/kubelet-serving
    

    В выходных данных все службы CSR должны находиться в Approved,Issued состоянии, что указывает, что CSR был утвержден и выдан подписанный сертификат. Обслуживающие ЦС имеют имя kubernetes.io/kubelet-servingподписывающего элемента. Рассмотрим пример.

    NAME        AGE    SIGNERNAME                                    REQUESTOR                    REQUESTEDDURATION   CONDITION
    csr-1ab2c   113s   kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:uoxr9r      none              Approved,Issued
    csr-defgh   111s   kubernetes.io/kubelet-serving                 system:node:akswinp7000000   none              Approved,Issued
    csr-ij3kl   46m    kubernetes.io/kubelet-serving                 system:node:akswinp6000000   none              Approved,Issued
    csr-mn4op   46m    kubernetes.io/kube-apiserver-client-kubelet   system:bootstrap:ho7zyu      none              Approved,Issued
    

Убедитесь, что kubelet использует сертификат, полученный от начальной загрузки TLS сервера

  • Убедитесь, что kubelet использует сертификат обслуживания, подписанный центром сертификации кластера с помощью kubectl debug команды.

    kubectl debug node/<node> -ti --image=mcr.microsoft.com/azurelinux/base/core:3.0 -- ls -l /host/var/lib/kubelet/kubelet-server-current.pem
    

    kubelet-server-current.pem Если symlink существует, то kubelet инициализировал/сменил свой собственный сертификат обслуживания, а Центр сертификации кластера подписал его.

Отключение смены сертификата kubelet

  • Отключите ротацию сертификата kubelet, обновив пул узлов с помощью команды az aks nodepool update с тегом aks-disable-kubelet-serving-certificate-rotation=true.

    az aks nodepool update --cluster-name <cluster-name> --resource-group <resource-group> --name <node-pool-name> --tags aks-disable-kubelet-serving-certificate-rotation=true
    
  1. Повторное создание образов узлов с помощью обновления образа узла или масштабирования пула до нуля экземпляров, а затем резервного копирования до требуемого значения.

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

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

  • Если у вас есть существующий кластер, необходимо обновить этот кластер, чтобы включить автоматическую настройку сертификатов.
  • Не отключайте TLS Bootstrap, чтобы сохранить автоматическую переустановку сертификатов.
  • Если кластер находится в остановленном состоянии во время автоматической ротации сертификатов, то ротация происходит только для сертификатов уровня управления. В этом случае необходимо повторно создать пул узлов после смены сертификатов, чтобы инициировать смену сертификата пула узлов.
  • Для всех кластеров AKS, созданных или обновленных после марта 2022 года, AKS автоматически обновляет не-ЦС сертификаты как на управляющей плоскости, так и на узлах агента в течение 80% срока действия клиентского сертификата до истечения срока их действия без простоя кластера.

Проверьте, что начальная загрузка TLS включена в текущем агентском пуле узлов.

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

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

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

    Примечание.

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

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