Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Управляемые удостоверения Microsoft Entra pod используют примитивы службы Azure Kubernetes (AKS) для связывания управляемых удостоверений для ресурсов Azure и идентичностей в идентификационных данных Microsoft Entra с pod. Администраторы создают удостоверения и привязки в качестве примитивов Kubernetes, которые позволяют pod получать доступ к ресурсам Azure, которые используют идентификатор Microsoft Entra в качестве поставщика удостоверений.
Удостоверения pod, управляемые Microsoft Entra в AKS, имеют следующие ограничения:
- Каждый кластер поддерживает до 200 pod-управляемых удостоверений.
- Каждый кластер поддерживает до 200 исключений для управляемых удостоверений pod.
- Управляемые pod удостоверения поддерживаются только на пулах узлов Linux.
- Эта функция поддерживается только в кластерах, поддерживаемых масштабируемыми наборами виртуальных машин.
Внимание
Рекомендуется просмотреть Идентификация рабочей нагрузки Microsoft Entra. Этот метод проверки подлинности заменяет управляемое pod удостоверение (предварительная версия), которое интегрируется с собственными возможностями Kubernetes для федерации с любыми внешними поставщиками удостоверений от имени приложения.
Управляемое с открытым кодом удостоверение Microsoft Entra pod (предварительная версия) в службе Azure Kubernetes не рекомендуется использовать 24 октября 2022 года, а проект архивирован в сентябре 2023 года. Дополнительные сведения см. в уведомлении об отмене. Надстройка AKS Pod Identity Managed исправлена и поддерживается до сентября 2025 г., чтобы разрешить клиентам перейти к идентификатору рабочей нагрузки Microsoft Entra.
Параметры режима работы
Управляемое удостоверение Microsoft Entra pod поддерживает два режима работы:
Стандартный режим: в этом режиме в кластере AKS развертываются следующие два компонента:
Контроллер управляемого удостоверения (MIC) — это контроллер Kubernetes, который следит за изменениями в модулях pod, AzureIdentity и AzureIdentityBinding через сервер API Kubernetes. Когда контроллер обнаруживает соответствующее изменение, MIC за необходимости добавляет или удаляет AzureAssignedIdentity. В частности, при планировании модуля pod MIC назначает управляемое удостоверение в Azure базовому масштабируемом набору виртуальных машин, используемому пулом узлов во время этапа создания. При удалении всех модулей pod, использующих удостоверение, он удаляет удостоверение из масштабируемого набора виртуальных машин пула узлов, если только одно и то же управляемое удостоверение не используется другими модулями pod. Контроллер управляемых удостоверений выполняет аналогичные действия при создании или удалении AzureIdentity или AzureIdentityBinding.
Node Managed Identity (NMI): это pod, который работает как DaemonSet на каждом узле кластера AKS. NMI перехватывает запросы маркера безопасности к службе метаданных экземпляра Azure на каждом узле. NMI перехватывает запросы токенов и перенаправляет их на себя. Затем он проверяет, авторизован ли модуль pod для доступа к запрошенной идентификации и, если да, извлекает маркер из клиента Microsoft Entra от имени приложения.
Управляемый режим: в этом режиме есть только NMI. При установке с помощью надстройки кластера AKS Azure управляет созданием примитивов Kubernetes (AzureIdentity и AzureIdentityBinding) и назначением удостоверений в ответ на выполняемые пользователем команды CLI. В противном случае, если приложение установлено через Helm chart, удостоверение должно быть вручную назначено и управляться для каждого пользователя. Дополнительные сведения см. в статье Удостоверение pod в управляемом режиме.
При установке управляемого удостоверений Microsoft Entra pod с помощью диаграммы Helm или манифеста YAML, как показано в руководстве по установке, можно выбрать между режимом и standard режимомmanaged. Если вы вместо этого решите установить идентификацию пода Microsoft Entra, управляемую с помощью надстройки кластера AKS, как это показано в статье, процесс настройки использует режим managed.
Предпосылки
Удостоверения Microsoft Entra, управляемые подом в AKS, должны соответствовать следующим требованиям:
Устанавливается Azure CLI версии 2.20.0 или более поздней.
Кластер AKS находится в версии 1.26 или более поздней версии.
У вас должны быть соответствующие разрешения, такие как роль владельца или участника .
Установка расширения Azure CLI для aks-preview
Внимание
Предварительные версии функций AKS доступны на уровне самообслуживания. Предварительные версии предоставляются "как есть" и "при наличии". На них не распространяются соглашения об уровне обслуживания и ограниченная гарантия. Предварительные версии AKS предоставляются с частичной клиентской поддержкой по мере возможности. Следовательно, эти функции не предназначены для использования в рабочей среде. Дополнительные сведения доступны в следующих статьях поддержки.
Чтобы установить расширение aks-preview, выполните следующую команду:
az extension add --name aks-preview
Выполните следующую команду, чтобы обновить до последней версии выпущенного расширения:
az extension update --name aks-preview
Регистрация флага функции EnablePodIdentityPreview
EnablePodIdentityPreview Зарегистрируйте флаг компонента с помощью команды az feature register, как показано в следующем примере:
az feature register --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
Подсказка
Чтобы отключить управляемую надстройку AKS, выполните следующую команду:
az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
В течение нескольких минут состояние отображается как зарегистрированное. Проверьте состояние регистрации с помощью команды az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
Когда состояние отражает зарегистрировано, обновите регистрацию поставщика ресурсов Microsoft.ContainerService с помощью команды az provider register:
az provider register --namespace Microsoft.ContainerService
Управление кластером AKS с помощью удостоверений, управляемых pod
Кластером AKS можно управлять с помощью сетевого интерфейса контейнеров Azure (CNI) или сетевого подключаемого модуля Kubenet при включении управляемых узловых удостоверений Microsoft Entra.
Создайте кластер AKS с Azure CNI и включенным управлением идентификацией подов, с конфигурацией по умолчанию, которая рекомендована. Следующие команды используют az group create для создания группы ресурсов с именем myResourceGroup, и команду
az aks createдля создания кластера AKS с именем myAKSCluster в группе ресурсов myResourceGroup.az group create --name myResourceGroup --location eastus az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-pod-identity \ --network-plugin azure \ --generate-ssh-keysЧтобы войти в кластер AKS, используйте
az aks get-credentials. Эта команда также загружает и настраивает сертификат клиентаkubectlна компьютере разработки.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
При включении управляемой pod идентификации в кластере AKS система добавляет элемент AzurePodIdentityException, названный aks-addon-exception, в пространство имен kube-system. Модуль AzurePodIdentityException, позволяющий подам с определенными метками получать доступ к конечной точке службы метаданных экземпляра Azure (IMDS) без перехвата сервером NMI.
Исключение aks-addon-exception позволяет сторонним надстройкам AKS, таким как управляемое удостоверением Microsoft Entra pod, работать без необходимости настраивать AzurePodIdentityExceptionвручную. При необходимости можно добавить, удалить и обновить AzurePodIdentityException, выполнив:
az aks pod-identity exception addaz aks pod-identity exception deleteaz aks pod-identity exception updateИли
kubectl
Обновление имеющегося кластера AKS с помощью Azure CNI
Чтобы обновить существующий кластер AKS с Azure CNI и включить управление идентификацией pods, выполните следующую команду:
az aks update --resource-group $MY_RESOURCE_GROUP --name $MY_CLUSTER --enable-pod-identity
Создайте управляемое удостоверение
Чтобы создать идентификацию, нужно иметь соответствующие разрешения (например, владелец).
Чтобы создать удостоверение, которое будет использоваться pod демонстрации с az identity create, задайте переменные IDENTITY_CLIENT_ID и IDENTITY_RESOURCE_ID, выполните следующую команду:
az group create --name myIdentityResourceGroup --location eastus
export IDENTITY_RESOURCE_GROUP="myIdentityResourceGroup"
export IDENTITY_NAME="application-identity"
az identity create --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
export IDENTITY_CLIENT_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query clientId -o tsv)"
export IDENTITY_RESOURCE_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query id -o tsv)"
Назначьте разрешения для управляемого идентификатора
Управляемому удостоверению, назначенному поду, должны быть предоставлены соответствующие разрешения на основе выполняемых подом операций. Убедитесь, что назначены только минимальные необходимые роли для выполнения рекомендаций по обеспечению безопасности.
Чтобы запустить демонстрацию, у управляемого удостоверения IDENTITY_CLIENT_ID должны быть разрешения участника виртуальной машины в группе ресурсов, содержащей масштабируемый набор виртуальных машин кластера AKS.
# Obtain the name of the resource group containing the Virtual Machine Scale set of your AKS cluster, commonly called the node resource group
NODE_GROUP=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
# Obtain the id of the node resource group
NODES_RESOURCE_ID=$(az group show --name $NODE_GROUP -o tsv --query "id")
# Create a role assignment granting your managed identity permissions on the node resource group
az role assignment create --role "Virtual Machine Contributor" --assignee "$IDENTITY_CLIENT_ID" --scope $NODES_RESOURCE_ID
Создать удостоверение управляемое подом
Чтобы создать управляемую pod идентичность для кластера, az aks pod-identity add выполните следующую команду:
export POD_IDENTITY_NAME="my-pod-identity"
export POD_IDENTITY_NAMESPACE="my-app"
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME} --identity-resource-id ${IDENTITY_RESOURCE_ID}
Примечание.
Имя поддомена "POD_IDENTITY_NAME" должно быть допустимым поддоменом системы доменных имен (DNS), как определено в RFC 1123.
При назначении управляемого pod удостоверения с помощью pod-identity addAzure CLI пытается предоставить роль оператора управляемых удостоверений через управляемое pod удостоверение (IDENTITY_RESOURCE_ID) удостоверению кластера.
Azure создает ресурс AzureIdentity в вашем кластере, представляющий идентичность в Azure, и ресурс AzureIdentityBinding, соединяющий AzureIdentity с селектором. Эти ресурсы можно просмотреть, выполнив следующую команду:
kubectl get azureidentity -n $POD_IDENTITY_NAMESPACE
kubectl get azureidentitybinding -n $POD_IDENTITY_NAMESPACE
Запуск примера приложения
Для использования управляемого модулем pod Microsoft Entra необходимо метка aadpodidbinding со значением, соответствующим селектору из AzureIdentityBinding. По умолчанию селектор соответствует имени управляемого pod удостоверения, но его также можно задать с помощью --binding-selector параметра при вызове az aks pod-identity add.
Чтобы запустить пример приложения с помощью управляемого модулем pod Microsoft Entra, создайте demo.yaml файл со следующим содержимым. Замените POD_IDENTITY_NAME, IDENTITY_CLIENT_ID и IDENTITY_RESOURCE_GROUP значениями из предыдущих шагов. Замените SUBSCRIPTION-ID идентификатором своей подписки.
Примечание.
На предыдущих шагах вы создали переменные POD_IDENTITY_NAME, IDENTITY_CLIENT_ID и IDENTITY_RESOURCE_GROUP. Можно использовать, например, команду echo, чтобы отобразить значение, например, заданное для переменных echo $POD_IDENTITY_NAME.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: $POD_IDENTITY_NAME
spec:
containers:
- name: demo
image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.6.3
args:
- --subscriptionid=$SUBSCRIPTION_ID
- --clientid=$IDENTITY_CLIENT_ID
- --resourcegroup=$IDENTITY_RESOURCE_GROUP
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
nodeSelector:
kubernetes.io/os: linux
Обратите внимание, что в определении pod есть метка aadpodidbinding со значением, соответствующим имени под-управляемой идентичности, которую вы запустили az aks pod-identity add на предыдущем шаге.
Разверните
demo.yamlв том же пространстве имен, что и ваш управляемый подом идентификатор, с помощьюkubectl apply.kubectl apply -f demo.yaml --namespace $POD_IDENTITY_NAMESPACEУбедитесь, что пример приложения успешно запущен с помощью
kubectl logs:kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACEУбедитесь, что журналы показывают, что маркер успешно получен и что операция HTTP GET-запроса успешно выполнена.
... successfully doARMOperations vm count 0 successfully acquired a token using the MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) successfully acquired a token, userAssignedID MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) clientID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) successfully made GET on instance metadata ...
Запуск приложения с несколькими удостоверениями
Чтобы разрешить приложению использовать несколько удостоверений, задайте --binding-selector для одного селектора при создании удостоверений pod:
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_1} --identity-resource-id ${IDENTITY_RESOURCE_ID_1} --binding-selector myMultiIdentitySelector
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_2} --identity-resource-id ${IDENTITY_RESOURCE_ID_2} --binding-selector myMultiIdentitySelector
Затем задайте в поле aadpodidbinding манифеста YAML для модуля pod указанный селектор привязки.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: myMultiIdentitySelector
...
Отключение управляемого pod удостоверения в существующем кластере
Чтобы отключить управляемое pod удостоверение в существующем кластере, удалите удостоверения, управляемые pod, из кластера, выполнив следующую команду:
az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSClusterЗатем отключите функцию в кластере, выполнив следующую команду:
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-pod-identity
Очистите ресурсы
Чтобы удалить управляемое кластером удостоверение Microsoft Entra pod, удалите пример приложения и управляемое pod удостоверение из кластера.
kubectl delete pod demo --namespace $POD_IDENTITY_NAMESPACE
Затем удалите удостоверение и назначение ролей удостоверения кластера.
az aks pod-identity delete \
--name ${POD_IDENTITY_NAME} \
--namespace ${POD_IDENTITY_NAMESPACE} \
--resource-group myResourceGroup \
--cluster-name myAKSCluster
az identity delete \
--resource-group ${IDENTITY_RESOURCE_GROUP} \
--name ${IDENTITY_NAME}
az role assignment delete \
--role "Managed Identity Operator" \
--assignee "$IDENTITY_CLIENT_ID" \
--scope "$IDENTITY_RESOURCE_ID"
Следующие шаги
Дополнительные сведения об управляемых удостоверениях для ресурсов Azure см. в этой статье.