Использование управляемого удостоверения в Служба Azure Kubernetes (AKS)

для кластеров Служба Azure Kubernetes (AKS) требуется удостоверение для доступа к ресурсам Azure, таким как подсистемы балансировки нагрузки и управляемые диски. Удостоверение может быть управляемым удостоверением или субъектом-службой.

В этой статье содержатся сведения о включении следующих типов управляемых удостоверений в новом или существующем кластере AKS:

  • Управляемое удостоверение, назначаемое системой
  • Создание управляемого удостоверения, назначаемого пользователем
  • Предварительно созданное управляемое удостоверение Kubelet

Обзор

При развертывании кластера AKS автоматически создается управляемое удостоверение, назначаемое системой, и оно управляется платформой Azure, поэтому не требует подготовки или смены секретов. Дополнительные сведения см. в статье об управляемых удостоверениях для ресурсов Azure.

AKS не создает субъект-службу автоматически, поэтому его необходимо создать. Кластеры, использующие субъект-службу, в конечном итоге истекают, и субъект-служба должен быть продлен, чтобы избежать влияния проверки подлинности кластера с удостоверением. Управление субъектами-службами упрощает использование управляемых удостоверений. И к субъектам-службам, и к управляемым удостоверениям применяются одинаковые требования к разрешениям. Управляемые удостоверения используют проверку подлинности на основе сертификатов. Учетные данные каждого управляемого удостоверения имеют срок действия 90 дней и свернуты через 45 дней.

AKS использует типы управляемых удостоверений, назначаемых как системой, так и пользователем. Эти удостоверения являются неизменяемыми. Эти типы удостоверений не следует путать с удостоверением рабочей нагрузки Microsoft Entra, который предназначен для использования приложением, работающим на модуле pod.

Внимание

Открытый код управляемое модулем Microsoft Entra pod (предварительная версия) в Служба Azure Kubernetes было устарело 10.24.2022, а проект был архивирован в сентябре 2023 года. Дополнительные сведения см. в уведомлении об отмене. В сентябре 2024 года в управляемой надстройке AKS начинается отмена.

Мы рекомендуем сначала просмотреть Идентификация рабочей нагрузки Microsoft Entra обзор. Проверка подлинности entra Идентификация рабочей нагрузки заменяет управляемое модулем Microsoft Entra pod (предварительная версия) и рекомендуется разрешить приложению, работающему на модуле pod, пройти проверку подлинности в других службах Azure, которые поддерживают его.

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

Ограничения

  • Клиенты, перемещающие или переносящие кластер с поддержкой управляемого удостоверения, не поддерживаются.
  • Если в кластере включено управляемое удостоверением pod () Microsoft Entra, модули pod node-Managed Identity (aad-pod-identityNMI) изменяют iptables узлов для перехвата вызовов конечной точки метаданных экземпляра Azure (IMDS). Эта конфигурация означает, что любой запрос, сделанный в конечную точку метаданных, перехватывается NMI, даже если модуль pod не использует aad-pod-identity. AzurePodIdentityException CRD можно настроить для информирования о aad-pod-identity любых запросах к конечной точке метаданных, исходя из модуля pod, соответствующего меткам, определенным в CRD, без обработки в NMI. Системные модули с меткой kubernetes.azure.com/managedby: aks в пространстве имен kube-system должны быть исключены в aad-pod-identity с помощью настройки AzurePodIdentityException CRD.
  • AKS не поддерживает использование управляемого удостоверения, назначаемого системой, при использовании пользовательской частной зоны DNS.

Сводка управляемых удостоверений

AKS использует несколько управляемых удостоверений для встроенных служб и надстроек.

Идентификация Имя. Вариант использования Разрешения по умолчанию Использование собственного удостоверения
Уровень управления Имя кластера AKS Используется компонентами уровня управления AKS для управления ресурсами кластера, включая подсистемы балансировки нагрузки ingress и общедоступные IP-адреса, управляемые AKS, автомасштабирование кластера, диск Azure, файл, драйверы CSI BLOB-объектов. Роль участника для группы ресурсов узла Поддерживается
kubelet Имя кластера AKS — agentpool Проверка подлинности с помощью Реестр контейнеров Azure (ACR). N/A (для kubernetes версии 1.15+) Поддерживается
Надстройка AzureNPM Удостоверение не требуется. Н/П No
Надстройка Мониторинг сети AzureCNI Удостоверение не требуется. Н/П No
Надстройка azure-policy (привратник) Удостоверение не требуется. Н/П No
Надстройка политика_azure Удостоверение не требуется. Н/П No
Надстройка Calico Удостоверение не требуется. Н/П No
Надстройка Информационная панель Удостоверение не требуется. Н/П No
Надстройка маршрутизация приложений Управление сертификатами Azure DNS и Azure Key Vault Роль пользователя секретов Key Vault для Key Vault, роль участника зоны DNZ для зон DNS, роль участника зоны Частная зона DNS для частных зон DNS No
Надстройка HTTPApplicationRouting Управляет необходимыми сетевыми ресурсами. Роль читателя для группы ресурсов узла, роль участника для зоны DNS No
Надстройка Шлюз приложений входящего трафика Управляет необходимыми сетевыми ресурсами. Роль участника для группы ресурсов узла No
Надстройка omsagent Используется для отправки метрик AKS в Azure Monitor. Роль издателя метрик мониторинга No
Надстройка Виртуальный узел (ACIConnector) Управляет необходимыми сетевыми ресурсами для Экземпляры контейнеров Azure (ACI). Роль участника для группы ресурсов узла No
Надстройка Анализ затрат Используется для сбора данных о выделении затрат
Удостоверение рабочей нагрузки Идентификатор рабочей нагрузки Microsoft Entra Позволяет приложениям безопасно получать доступ к облачным ресурсам с помощью идентификатора рабочей нагрузки Microsoft Entra. Н/П No

Включение управляемых удостоверений в новом кластере AKS

Примечание.

AKS создает удостоверение kubelet, назначаемое пользователем, в группе ресурсов узла, если не указать собственное управляемое удостоверение kubelet.

Примечание.

Если кластер уже использует управляемое удостоверение и удостоверение было изменено, например, вы обновляете тип удостоверения кластера, назначаемого системой, назначаемого пользователем, существует задержка для компонентов плоскости управления для перехода на новое удостоверение. Компоненты уровня управления продолжают использовать старое удостоверение до истечения срока действия маркера. После обновления маркера они переключятся на новое удостоверение. Этот процесс может занять несколько часов.

  1. Создайте группу ресурсов Azure с помощью az group create команды.

    az group create --name myResourceGroup --location westus2
    
  2. Создайте кластер AKS с помощью az aks create команды.

    az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
    
  3. Получите учетные данные для доступа к кластеру az aks get-credentials с помощью команды.

    az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    

Включение управляемых удостоверений в существующем кластере AKS

Чтобы обновить существующий кластер AKS, использующий субъект-службу для использования управляемого удостоверения, назначаемого системой, выполните az aks update команду.

az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity

После обновления кластера плоскость управления и модули pod используют управляемое удостоверение. Kubelet продолжает использовать субъект-службу до обновления агента. Для обновления управляемого удостоверения можно использовать az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only команду на узлах. Обновление пула узлов приводит к простою кластера AKS, так как узлы в пулах узлов оцеплены и переосмыслены.

Примечание.

При обновлении кластера следует учитывать следующие сведения:

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

  • Azure CLI гарантирует правильность настройки разрешения надстройки после миграции. Если вы не используете Azure CLI для выполнения операции миграции, необходимо самостоятельно обработать разрешение удостоверения надстройки. Пример использования шаблона Azure Resource Manager (ARM) см. в статье "Назначение ролей Azure с помощью шаблонов ARM".

  • Если кластер использовался --attach-acr для извлечения образов из Реестр контейнеров Azure, необходимо выполнить az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID> команду после обновления кластера, чтобы позволить созданному kubelet, используемому для управляемого удостоверения, получить разрешение на извлечение из ACR. В противном случае вы не сможете извлечь из ACR после обновления.

Добавление назначения ролей для управляемого удостоверения

При создании и использовании собственной виртуальной сети подключите диски Azure, статический IP-адрес, таблицу маршрутов или удостоверение kubelet, назначаемое пользователем, где ресурсы находятся за пределами группы ресурсов рабочего узла, Azure CLI автоматически добавляет назначение ролей. Если вы используете шаблон ARM или другой метод, необходимо использовать идентификатор субъекта управляемого удостоверения кластера для выполнения назначения ролей.

Если вы не используете Azure CLI, но используете собственную виртуальную сеть, подключите диски Azure, статический IP-адрес, таблицу маршрутов или удостоверение kubelet, назначаемое пользователем, за пределами группы ресурсов рабочего узла, рекомендуется использовать управляемое удостоверение, назначаемое пользователем для плоскости управления. Чтобы плоскость управления использовал управляемое удостоверение, назначаемое системой, мы не можем получить идентификатор удостоверения перед созданием кластера, который задерживает назначение роли от вступления в силу.

Получение идентификатора субъекта управляемого удостоверения

  • Получите идентификатор участника существующего удостоверения с помощью az identity show команды.

    az identity show --ids <identity-resource-id>
    

    Выходные данные должны выглядеть примерно так:

    {
      "clientId": "<client-id>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
      "location": "eastus",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Добавление назначения роли

Для виртуальной сети, подключенного диска Azure, статического IP-адреса или таблицы маршрутов за пределами группы ресурсов рабочего узла по умолчанию необходимо назначить Contributor роль в настраиваемой группе ресурсов.

  • Contributor Назначьте роль в настраиваемой az role assignment create группе ресурсов с помощью команды.

    az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
    

Для назначаемого пользователем удостоверения kubelet за пределами группы ресурсов рабочего узла по умолчанию необходимо назначить роль оператора управляемого удостоверения kubelet для управляемого удостоверения уровня управления.

  • Managed Identity Operator Назначьте роль удостоверения kubelet с помощью az role assignment create команды.

    az role assignment create --assignee  <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
    

Примечание.

Для заполнения управляемого удостоверения кластера может потребоваться до 60 минут.

Создание собственного управляемого удостоверения

Создание кластера с помощью управляемого удостоверения, назначаемого пользователем

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

Примечание.

Регионы USDOD Central, USDOD East и USGov Iowa в облаке Azure для государственных организаций США не поддерживаются.

AKS создает удостоверение kubelet, назначаемое пользователем, в группе ресурсов узла, если не указать собственное управляемое удостоверение kubelet.

  • Если у вас нет управляемого удостоверения, создайте его с помощью az identity create команды.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Выходные данные должны выглядеть примерно так:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Примечание.

Для заполнения управляемого удостоверения кластера может потребоваться до 60 минут.

Обновление управляемого удостоверения в существующем кластере

Примечание.

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

  • Если у вас нет управляемого удостоверения, создайте его с помощью az identity create команды.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Выходные данные должны выглядеть примерно так:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  • После создания настраиваемого управляемого удостоверения, назначаемого пользователем для плоскости управления, добавьте назначение роли для управляемого удостоверения с помощью az role assignment create команды.

  • Обновите кластер с помощью существующих удостоверений с помощью az aks update команды. Обязательно укажите идентификатор ресурса управляемого удостоверения для плоскости управления, включив assign-identity аргумент.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> 
    

    Выходные данные для успешного обновления кластера с помощью собственного управляемого удостоверения kubelet должны выглядеть следующим образом:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
    

Использование предварительно созданного управляемого удостоверения kubelet

Удостоверение kubelet позволяет получить доступ к существующему удостоверению до создания кластера. Это дает возможность использовать такие сценарии, как подключение к ACR с предварительно созданным управляемым удостоверением.

Предварительно созданные ограничения удостоверений kubelet

  • Работает только с назначаемым пользователем управляемым кластером.
  • Регионы "Восточная Часть Китая" и "Север Китая" в Microsoft Azure, управляемые 21Vianet, не поддерживаются.

Создание управляемых удостоверений, назначаемых пользователем

Управляемое удостоверение уровня управления

  • Если у вас нет управляемого удостоверения для плоскости управления, создайте его с помощью az identity create.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Выходные данные должны выглядеть примерно так:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Управляемое удостоверение kubelet

  • Если у вас нет управляемого удостоверения kubelet, создайте его с помощью az identity create команды.

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Выходные данные должны выглядеть примерно так:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", 
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Создание кластера с использованием удостоверения kubelet, назначаемого пользователем

Теперь вы можете создать кластер AKS с существующими удостоверениями. Обязательно укажите идентификатор ресурса управляемого удостоверения для плоскости управления, включив assign-identity аргумент и управляемое удостоверение kubelet с помощью аргумента assign-kubelet-identity .

  • Создайте кластер AKS с существующими удостоверениями с помощью az aks create команды.

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Успешное создание кластера AKS с помощью собственного управляемого удостоверения kubelet должно выглядеть следующим примером выходных данных:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Обновление существующего кластера с помощью удостоверения kubelet

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

Обновление пулов узлов управляемого удостоверения kubelet обновляет пулы узлов, что приводит к простою для кластера AKS, так как узлы в пулах узлов оцеплены или переосмыслены и переимыслены.

Примечание.

Если кластер использовался --attach-acr для извлечения образов из Реестр контейнеров Azure, необходимо выполнить az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID> команду после обновления кластера, чтобы позволить созданному kubelet, используемому для управляемого удостоверения, получить разрешение на извлечение из ACR. В противном случае после обновления вы не сможете извлекать объекты из ACR.

Получение управляемого удостоверения уровня управления для кластера AKS

  1. Убедитесь, что кластер AKS использует управляемое удостоверение, назначаемое пользователем, с помощью az aks show команды.

    az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
    

    Если кластер использует управляемое удостоверение, выходные данные отображаются clientId со значением msi. Если кластер использует субъект-службу, отображается идентификатор объекта. Например:

    {
      "clientId": "msi"
    }
    
  2. Убедившись, что кластер использует управляемое удостоверение, найдите идентификатор ресурса управляемого удостоверения с помощью az aks show команды.

    az aks show -g <RGName> -n <ClusterName> --query "identity"
    

    Для управляемого удостоверения, назначаемого пользователем, выходные данные должны выглядеть примерно так:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    

Обновление кластера с помощью удостоверения kubelet

  1. Если у вас нет управляемого удостоверения kubelet, создайте его с помощью az identity create команды.

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Выходные данные должны выглядеть примерно так:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity",
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  2. Обновите кластер с помощью существующих удостоверений с помощью az aks update команды. Обязательно укажите идентификатор ресурса управляемого удостоверения для плоскости управления, включив assign-identity аргумент и управляемое удостоверение kubelet для assign-kubelet-identity аргумента.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Выходные данные для успешного обновления кластера с помощью собственного управляемого удостоверения kubelet должны выглядеть следующим образом:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

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

  • Используйте шаблоны Azure Resource Manager для создания кластеров с поддержкой управляемого удостоверения.
  • Узнайте, как [использовать kubelogin][kubelogin-authentication] для всех поддерживаемых методов проверки подлинности Microsoft Entra в AKS.