Смена сертификатов в Службе Azure Kubernetes (AKS)
Служба Azure Kubernetes (AKS) использует сертификаты для проверки подлинности множества своих компонентов. Для кластеров с поддержкой 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 vm 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 /etc/kubernetes/certs/apiserver.crt -noout -enddate" --query "value[0].message"
Автоматическая ротация сертификатов
Чтобы AKS автоматически сменял сертификаты, не относящиеся к ЦС, кластер должен иметь начальную загрузку TLS, которая включена по умолчанию во всех регионах Azure.
Примечание
- Если у вас есть существующий кластер, необходимо обновить его, чтобы включить автоматическую смену сертификатов.
- Не отключайте начальную загрузку, чтобы включить автоматическую смену.
- Если кластер находится в остановленном состоянии во время автоматической смены сертификатов, сменяются только сертификаты уровня управления. В этом случае необходимо повторно создать пул узлов после смены сертификатов, чтобы инициировать смену сертификатов пула узлов.
Для любых кластеров AKS, созданных или обновленных после марта 2022 г., Служба Azure Kubernetes автоматически сменяет сертификаты, не относящиеся к ЦС, как на уровне управления, так и на узлах агента в течение 80 % от допустимого времени сертификата клиента до истечения срока их действия без простоя кластера.
Как проверить, включена ли начальная загрузка TLS для текущего пула узлов агента?
Проверьте, включена ли начальная загрузка TLS в кластере, перейдя по одному из следующих путей:
- На узле Linux: /var/lib/kubelet/bootstrap-kubeconfig или /host/var/lib/kubelet/bootstrap-kubeconfig
- На узле Windows: C:\k\bootstrap-config
Дополнительные сведения см. в статье Подключение к узлам кластера Служба Azure Kubernetes для обслуживания или устранения неполадок.
Примечание
Путь к файлу может измениться по мере развития версий Kubernetes.
После настройки региона создайте новый кластер или обновите существующий кластер, чтобы настроить автоматическую смену сертификата кластера. Чтобы включить эту функцию, необходимо обновить уровень управления и пул узлов.
Смена сертификатов кластера вручную
Предупреждение
Смена сертификатов с помощью az aks rotate-certs
повторно создает все узлы, Масштабируемые наборы виртуальных машин и диски и может привести к простою кластера AKS до 30 минут.
Подключитесь к кластеру
az aks get-credentials
с помощью команды .az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME
Смените все сертификаты, ЦС и центры сертификации в кластере
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
, чтобы снова выполнить ротацию сертификатов.Убедитесь, что старые сертификаты больше не являются действительными с помощью любой
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")
Обновите сертификат, используемый
az aks get-credentials
с помощьюkubectl
команды с флагом--overwrite-existing
.az aks get-credentials --resource-group $RESOURCE_GROUP_NAME --name $CLUSTER_NAME --overwrite-existing
Убедитесь, что сертификаты обновлены с помощью
kubectl get
команды .kubectl get nodes
Примечание
Если у вас есть службы, запущенные поверх AKS, вам может потребоваться также обновить их сертификаты.
Дальнейшие действия
В этой статье показано, как автоматически сменить сертификаты кластера, ЦС и центры сертификации. Дополнительные сведения см. в статье Рекомендации по обеспечению безопасности и обновлений кластера в Служба Azure Kubernetes (AKS).