Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Служба 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"
Выполните ручную смену сертификатов кластера
Проведите ротацию всех сертификатов, центров сертификации и 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команду, чтобы снова повернуть сертификаты.Убедитесь, что старые сертификаты больше не являются допустимыми с помощью любой
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")Обновите сертификат, используемый
kubectlaz aks get-credentialsс помощью команды с флагом--overwrite-existing.az aks get-credentials --resource-group <resource-group> --name <cluster-name> --overwrite-existingУбедитесь, что сертификаты обновляются с помощью
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.pemkubelet-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
- Повторное создание образов узлов с помощью обновления образа узла или масштабирования пула до нуля экземпляров, а затем резервного копирования до требуемого значения.
Автоматическая ротация сертификатов
При использовании автоматической ротации сертификатов следует учитывать следующие аспекты.
- Если у вас есть существующий кластер, необходимо обновить этот кластер, чтобы включить автоматическую настройку сертификатов.
- Не отключайте TLS Bootstrap, чтобы сохранить автоматическую переустановку сертификатов.
- Если кластер находится в остановленном состоянии во время автоматической ротации сертификатов, то ротация происходит только для сертификатов уровня управления. В этом случае необходимо повторно создать пул узлов после смены сертификатов, чтобы инициировать смену сертификата пула узлов.
- Для всех кластеров AKS, созданных или обновленных после марта 2022 года, AKS автоматически обновляет не-ЦС сертификаты как на управляющей плоскости, так и на узлах агента в течение 80% срока действия клиентского сертификата до истечения срока их действия без простоя кластера.
Проверьте, что начальная загрузка TLS включена в текущем агентском пуле узлов.
Убедитесь, что в кластере включена самозагрузка TLS, перейдя к одному из следующих путей:
-
На узле Linux:
/var/lib/kubelet/bootstrap-kubeconfigили/host/var/lib/kubelet/bootstrap-kubeconfig -
На узле Windows:
C:\k\bootstrap-config
Дополнительные сведения см. в статье Подключение к узлам кластера Службы Azure Kubernetes (AKS) для обслуживания или устранения неполадок.
Примечание.
Путь к файлу может измениться по мере развития версий Kubernetes.
-
На узле Linux:
После настройки региона создайте новый кластер или обновите существующий кластер, чтобы настроить автоматическое создание сертификата для сертификата кластера. Чтобы включить эту функцию, необходимо обновить плоскость управления и пул узлов.