Смена сертификатов в Службе 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 -g MC_rg_myAKSCluster_region -n 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 для текущего пула узлов агента?

  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 -g $RESOURCE_GROUP_NAME -n $CLUSTER_NAME
    
  2. Смените все сертификаты, ЦС и центры сертификации в кластере az aks rotate-certs с помощью команды .

    az aks rotate-certs -g $RESOURCE_GROUP_NAME -n $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. Обновите сертификат, используемый az aks get-credentials с помощью kubectl команды с флагом --overwrite-existing .

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

    kubectl get nodes
    

    Примечание

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

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

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