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


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

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

Предварительные требования к управляемой идентификации AKS

Минимальные требования к версии Azure CLI

Ограничения

  • Перемещение или перенос кластера с поддержкой управляемого удостоверения в другой клиент не поддерживается.

  • Если в кластере включена управляемая удостоверением pod (aad-pod-identity) Microsoft Entra, модули Node-Managed Identity (NMI) изменяют iptables узлов, чтобы перехватывать запросы к конечной точке метаданных экземпляра Azure (IMDS). Эта конфигурация означает, что любой запрос, сделанный в конечную точку IMDS, перехватывается NMI, даже если конкретный pod не использует aad-pod-identity.

    Настраиваемое определение ресурса AzurePodIdentityException (CRD) можно настроить так, чтобы запросы к конечной точке IMDS, исходящие из pod, соответствующих меткам, определенным в CRD, должны быть направлены через прокси без какой-либо обработки в NMI. Исключите системные модули pod с kubernetes.azure.com/managedby: aks меткой в пространстве имен kube-system , aad-pod-identity настроив CRD AzurePodIdentityException. Дополнительные сведения см. в статье Об использовании удостоверений Microsoft Entra, управляемых pod, в службе Azure Kubernetes.

    Чтобы настроить исключение, установите mic-exception YAML.

  • AKS не поддерживает использование управляемого удостоверения, назначаемого системой, при использовании пользовательской частной зоны DNS.

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

  • Предварительно созданное управляемое удостоверение kubelet должно быть управлямым удостоверением, назначенным пользователями.

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

    Это важно

    Все функции Microsoft Defender для облака официально будут сняты в Azure в китайском регионе 18 августа 2026 года. Из-за предстоящего выхода на пенсию клиенты Azure в Китае больше не смогут подключить новые подписки к службе. Новая подписка — это любая подписка, которая еще не была подключена к облачной службе Microsoft Defender до 18 августа 2025 года, дата объявления о выходе на пенсию. Дополнительные сведения об устаревании см. в объявлении “Microsoft Defender for Cloud Deprecation в Microsoft Azure, управляемой 21Vianet”.

    Клиенты должны работать с представителями своих аккаунтов Microsoft Azure, управляемой компанией 21Vianet, чтобы оценить влияние этого прекращения на их собственные операции.

Рекомендации по обновлению кластера

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

  • Обновление работает только в том случае, если требуется использовать обновление виртуального жесткого диска. Если вы используете последнюю версию виртуального жесткого диска, необходимо ждать, пока следующий виртуальный жесткий диск не будет доступен для выполнения обновления.
  • Azure CLI гарантирует правильную настройку разрешений надстройки после завершения миграции. Если вы не используете Azure CLI для выполнения операции миграции, вам нужно самостоятельно управлять разрешениями идентификатора надстройки. Пример использования шаблона Azure Resource Manager (ARM) см. в статье "Назначение ролей Azure с помощью шаблонов ARM".
  • Если ваш кластер использовал --attach-acr для извлечения образов из реестра контейнеров Azure (ACR), необходимо выполнить az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> команду после обновления кластера, чтобы позволить новому kubelet, созданному для управляемой идентичности, иметь разрешение на извлечение образов из ACR. В противном случае вы не сможете загрузить из ACR после обновления.

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

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

Управляемое удостоверение, назначаемое системой, по умолчанию включается при создании нового кластера AKS.

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

    az aks create \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --generate-ssh-keys
    

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

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

    az aks update \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --enable-managed-identity
    

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

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

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

    CLIENT_ID=$(az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query identity.principalId \
        --output tsv)
    

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

  • Назначьте роль Azure RBAC управляемой системе с присвоенной системой идентичностью, воспользовавшись командой az role assignment create.

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

    В следующем примере роль участника сети назначается управляемому удостоверению, назначаемого системой. Назначение роли ограничено группой ресурсов, содержащей виртуальную сеть.

    az role assignment create \
        --assignee <client-id> \
        --role "Network Contributor" \
        --scope <custom-resource-group-id>
    

    Примечание.

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

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

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

    az identity create \
        --name <identity-name> \
        --resource-group <resource-group-name>
    

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

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>",
      "location": "<location>",
      "name": "<identity-name>",
      "principalId": "<principal-id>",
      "resourceGroup": "<resource-group-name>",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

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

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

    CLIENT_ID=$(az identity show \
        --name <identity-name> \
        --resource-group <resource-group-name> \
        --query principalId \
        --output tsv)
    

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

  • Получите идентификатор ресурса управляемой удостоверенности, назначенной пользователем, используя команду az identity show.

    RESOURCE_ID=$(az identity show \
        --name <identity-name> \
        --resource-group <resource-group-name> \
        --query id \
        --output tsv)
    

Назначьте роль Azure RBAC управляемому удостоверению, назначенному пользователем

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

    В следующем примере роль пользователя секретов Key Vault назначается назначаемому пользователем управляемому удостоверению, чтобы предоставить ему разрешения на доступ к секретам в Key Vault. Назначение роли ограничено ресурсом хранилища ключей.

    az role assignment create \
        --assignee <client-id> \
        --role "Key Vault Secrets User" \
        --scope "<keyvault-resource-id>"
    

    Примечание.

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

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

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

  • Создайте кластер AKS с управляемым удостоверением, назначенным пользователем, используя команду az aks create. --assign-identity Включите параметр и передайте идентификатор ресурса для управляемого удостоверения, назначаемого пользователем:

    az aks create \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --network-plugin azure \
        --vnet-subnet-id <vnet-subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --assign-identity $RESOURCE_ID \
        --generate-ssh-keys
    

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

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

    az aks update \
        --resource-group <resource-group-name> \
        --name <cluster-name> \
        --enable-managed-identity \
        --assign-identity $RESOURCE_ID
    

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

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

    Примечание.

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

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

  • Убедитесь, какой тип управляемого удостоверения используется в вашем кластере с использованием команды az aks show.

    az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query identity.type \
        --output tsv       
    

    Если кластер использует управляемое удостоверение, значение свойства типа будет SystemAssigned или UserAssigned.

    Если кластер использует сервисный принципал, значение свойства типа будет равен NULL. Рассмотрите возможность обновления кластера для использования управляемого удостоверения.

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

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

    az identity create \
        --name <kubelet-identity-name> \
        --resource-group <resource-group-name>
    

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

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>",
      "location": "<location>",
      "name": "<kubelet-identity-name>",
      "principalId": "<principal-id>",
      "resourceGroup": "<resource-group-name>",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Назначьте роль RBAC управляемому удостоверению kubelet

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

    az role assignment create \
        --assignee <kubelet-client-id> \
        --role "acrpull" \
        --scope "<acr-registry-id>"
    

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

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

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

    az aks create \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --network-plugin azure \
        --vnet-subnet-id <vnet-subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id> \
        --generate-ssh-keys
    

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

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
        }
      },
    

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

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

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

Обновление управляемых удостоверений kubelet обновляет пулы узлов вашего кластера AKS. Перед выполнением этих действий убедитесь, что у вас правильно настроены конфигурации доступности, такие как бюджеты прерываний Pod, чтобы избежать сбоев рабочей нагрузки. Также можно выполнить обновление во время периода обслуживания.

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

    az aks show \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "servicePrincipalProfile"
    

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

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

    az aks show --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "identity"
    

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

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    
  3. Обновите кластер с использованием ваших существующих удостоверений с помощью команды az aks update. Укажите идентификатор ресурса управляемого удостоверения, назначаемого пользователем, для плоскости управления для аргумента assign-identity . Укажите идентификатор ресурса управляемого удостоверения kubelet для аргумента assign-kubelet-identity .

    az aks update \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --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/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
        }
      },
    

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

  • Получите свойства управляемого удостоверения kubelet с помощью az aks show команды и запроса к свойству identityProfile.kubeletidentity .

    az aks show \
        --name <aks-cluster-name> \
        --resource-group <resource-group-name> \
        --query "identityProfile.kubeletidentity"
    

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

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