Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье объясняется, как включить управляемое удостоверение, назначенное системой, в новом или существующем кластере AKS, получить идентификатор этого удостоверения и добавить назначение роли для него.
Необходимые условия
Ознакомьтесь с Обзором управляемых удостоверений в Службе Azure Kubernetes (AKS), чтобы понять различные типы управляемых удостоверений, доступных в AKS, и как их можно использовать для безопасного доступа к ресурсам Azure.
Задайте подписку в качестве текущей активной подписки с помощью
az account setкоманды.az account set --subscription <subscription-id>
Существующая группа ресурсов Azure. Если у вас его нет, его можно создать с помощью
az group createкоманды.az group create \ --name <resource-group-name> \ --location <location>
- Azure CLI версии 2.23.0 или более поздней версии. Чтобы узнать версию, выполните команду
az --version. Если необходимо установить или обновить, см. раздел Install Azure CLI. - Чтобы обновить существующий кластер для использования управляемого удостоверения, назначаемого системой, необходимо установить Azure CLI версии 2.49.0 или более поздней.
- Terraform установлен локально. Инструкции по установке см. в разделе "Установка Terraform".
Ограничения
- После создания кластера с управляемым удостоверением невозможно вернуться к использованию учетной записи службы.
- Перемещение или перенос кластера с поддержкой управляемого удостоверения в другой клиент не поддерживается.
- Если в кластере включено удостоверение pod, управляемое Microsoft Entra (
aad-pod-identity), модули NMI изменяют iptables узлов для перехвата вызовов конечной точки метаданных экземпляра Azure (IMDS). Эта конфигурация означает, что любой запрос, сделанный в конечную точку IMDS, перехватывается NMI, даже если конкретный pod не используетaad-pod-identity.- Вы можете настроить определение ресурса AzurePodIdentityException (CRD), чтобы указать, что запросы к конечной точке IMDS, исходящие из подов, соответствующих меткам, определённым в CRD, должны проксироваться без обработки в NMI. Исключите системные модули pod с
kubernetes.azure.com/managedby: aksметкой в пространстве имен kube-system ,aad-pod-identityнастроив CRD AzurePodIdentityException. Дополнительные сведения см. в статье Об использовании удостоверений, управляемых pod Microsoft Entra, в службе Azure Kubernetes (AKS). - Чтобы настроить исключение, установите mic-exception YAML.
- Вы можете настроить определение ресурса AzurePodIdentityException (CRD), чтобы указать, что запросы к конечной точке IMDS, исходящие из подов, соответствующих меткам, определённым в CRD, должны проксироваться без обработки в NMI. Исключите системные модули pod с
- AKS не поддерживает использование управляемого удостоверения, назначаемого системой, при использовании пользовательской частной зоны DNS.
Рекомендации по обновлению кластера
При обновлении кластера рассмотрите следующие сведения:
- Обновление работает только в том случае, если требуется использовать обновление виртуального жесткого диска. Если вы используете последнюю версию виртуального жесткого диска, необходимо ждать, пока следующий виртуальный жесткий диск не будет доступен для выполнения обновления.
- CLI Azure гарантирует корректную настройку разрешений для надстройки после миграции. Если вы не используете 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 с помощью команды az aks create.
az aks create \
--resource-group <resource-group-name> \
--name <aks-cluster-name> \
--generate-ssh-keys
Обновление существующего кластера для использования системного управляемого удостоверения
Обновите существующий кластер 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, статического IP-адреса или таблицы маршрутов за пределами группы ресурсов рабочего узла по умолчанию, необходимо назначить Network Contributor роль в настраиваемой группе ресурсов.
Назначьте роль Azure RBAC для системного управляемого удостоверения с помощью команды az role assignment create. В следующем примере роль участника сети назначается управляемому удостоверению, назначаемого системой. Назначение роли ограничено группой ресурсов, содержащей виртуальную сеть.
az role assignment create \
--assignee <client-id> \
--role "Network Contributor" \
--scope <custom-resource-group-id>
Замечание
Для распространения разрешений, предоставленных управляемому удостоверению кластера, может потребоваться до 60 минут.
Создание файла конфигурации Terraform
Файлы конфигурации Terraform определяют инфраструктуру, которую Terraform создает и управляет ею.
Создайте файл с именем
main.tfи добавьте следующий код, чтобы определить версию Terraform и указать поставщика Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Добавьте следующий код в
main.tf, чтобы создать группу ресурсов Azure. При необходимости вы можете изменить имя и расположение группы ресурсов.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Создание кластера AKS с управляемым удостоверением, назначаемое системой, с помощью Terraform
Добавьте следующий код в main.tf, чтобы создать кластер AKS с управляемым системой назначаемым удостоверением:
resource "azurerm_kubernetes_cluster" "system_assigned" {
name = "aks-system"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "akssystem"
identity {
type = "SystemAssigned"
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Добавление назначения ролей для системно назначаемого управляемого идентификатора с помощью Terraform
Добавьте следующий код в main.tf, чтобы создать назначение ролей для системно назначаемого управляемого удостоверения. В этом примере роль участника сети назначается управляемому удостоверению, назначаемого системой. Назначение роли ограничено группой ресурсов, содержащей виртуальную сеть.
resource "azurerm_role_assignment" "system_assigned_network_contributor" {
scope = azurerm_resource_group.example.id
role_definition_name = "Network Contributor"
principal_id = azurerm_kubernetes_cluster.system_assigned.identity[0].principal_id
}
Инициализируйте Terraform
Инициализируйте Terraform в каталоге, содержащем ваш файл main.tf, с помощью команды terraform init. Эта команда загружает провайдер Azure, необходимый для управления ресурсами Azure с помощью Terraform.
terraform init
Создайте план запуска Terraform
Создайте план выполнения Terraform с помощью terraform plan команды. Эта команда показывает ресурсы, которые Terraform создаст или изменит в подписке Azure.
terraform plan
Применение конфигурации Terraform
После проверки и подтверждения плана выполнения примените конфигурацию Terraform с помощью terraform apply команды. Эта команда создает или изменяет ресурсы, определенные в main.tf файле в подписке Azure.
terraform apply
Проверка развертывания Terraform
После применения конфигурации Terraform можно проверить развертывание с помощью az aks show команды с --query параметром для фильтрации выходных данных и отображения сведений об удостоверениях. Рассмотрим пример.
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Связанный контент
Дополнительные сведения об управляемых идентичностях в AKS смотрите в следующих статьях:
- Обзор управляемых удостоверений в службе Azure Kubernetes (AKS)
- Использование назначаемой пользователем управляемой идентификации в AKS
- Используйте предварительно созданное управляемое удостоверение kubelet в AKS
- Использование kubelogin для проверки подлинности пользователей в службе Azure Kubernetes (AKS)