Аутентификация с помощью Реестра контейнеров Azure (ACR) из службы Azure Kubernetes
При использовании Реестр контейнеров Azure (ACR) с Служба Azure Kubernetes (AKS) необходимо установить механизм проверки подлинности. Вы можете настроить необходимые разрешения между ACR и AKS с помощью Azure CLI, Azure PowerShell или портал Azure. В этой статье приведены примеры настройки проверки подлинности между этими службами Azure с помощью Azure CLI или Azure PowerShell.
Интеграция AKS с ACR назначает роль AcrPull управляемому удостоверению Microsoft Entra ID, связанному с пулом агентов в кластере AKS. Дополнительные сведения об управляемых удостоверениях AKS см. в сводке управляемых удостоверений.
Внимание
При присоединении ACR возникает проблема с задержкой в группах Microsoft Entra. Если роль AcrPull предоставляется группе Microsoft Entra, а удостоверение kubelet добавляется в группу для завершения конфигурации RBAC, может возникнуть задержка до того, как группа RBAC вступит в силу. Если выполняется автоматизация, требующая завершения настройки RBAC, рекомендуется использовать собственное удостоверение kubelet в качестве обходного решения. Вы можете предварительно создать удостоверение, назначаемое пользователем, добавить его в группу Microsoft Entra, а затем использовать удостоверение в качестве удостоверения kubelet для создания кластера AKS. Это гарантирует, что удостоверение добавляется в группу Microsoft Entra до создания маркера kubelet, что позволяет избежать проблемы с задержкой.
Примечание.
В этой статье описывается автоматическая проверка подлинности между AKS и ACR. Если вам необходимо извлечь образ из частного внешнего реестра, используйте секрет для извлечения образа.
Подготовка к работе
- Вам нужна роль владельца, администратора учетной записи Azure или соадминистратора Azure в подписке Azure.
- Чтобы избежать необходимости в одной из этих ролей, вместо этого можно использовать существующее управляемое удостоверение для проверки подлинности ACR из AKS. Дополнительные сведения см. в статье "Использование управляемого удостоверения Azure для проверки подлинности в ACR".
- Если вы используете Azure CLI, в этой статье требуется, чтобы вы работали с Azure CLI версии 2.7.0 или более поздней. Чтобы узнать версию, выполните команду
az --version
. Если вам необходимо выполнить установку или обновление, см. статью Установка Azure CLI 2.0. - Если вы используете Azure PowerShell, в этой статье требуется, чтобы вы работали с Azure PowerShell версии 5.9.0 или более поздней. Чтобы узнать версию, выполните команду
Get-InstalledModule -Name Az
. Если вам необходимо выполнить установку или обновление, см. статью об установке Azure PowerShell. - Примеры и синтаксис для использования Terraform для настройки ACR можно найти в справочнике Terraform.
Создание нового ACR
Если у вас еще нет ACR, создайте его с помощью
az acr create
команды. В следующем примере переменная задаетMYACR
имя ACR, mycontainerregistry и использует переменную для создания реестра. Имя ACR должно быть глобально уникальным и использовать только строчные буквы.MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
Создание кластера AKS и интеграция с существующим ACR
Создайте новый кластер AKS и интегрируйте с существующим ACR с помощью
az aks create
команды с параметром--attach-acr
. Эта команда позволяет авторизовать существующий ACR в подписке и настроить соответствующую роль AcrPull для управляемого удостоверения.MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Выполнение этой команды может занять несколько минут.
Примечание.
Если вы используете ACR, расположенную в другой подписке из кластера AKS, или предпочитаете использовать идентификатор ресурса ACR вместо имени ACR, это можно сделать с помощью следующего синтаксиса:
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
Настройка интеграции ACR для существующего кластера AKS
Присоединение ACR к существующему кластеру AKS
Интеграция существующего ACR с существующим кластером AKS с помощью
az aks update
команды с--attach-acr
параметром и допустимым значением acr-name или acr-resource-id.# Attach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name> # Attach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
Примечание.
Команда
az aks update --attach-acr
использует разрешения пользователя, выполняющего команду, для создания назначения роли ACR. Эта роль назначается управляемому удостоверению kubelet . Дополнительные сведения об управляемых удостоверениях AKS см. в сводке управляемых удостоверений.
Отключение ACR из кластера AKS
Удалите интеграцию между ACR и кластером AKS с помощью
az aks update
команды с--detach-acr
параметром и допустимым значением acr-name или acr-resource-id.# Detach using acr-name az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name> # Detach using acr-resource-id az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
Работа с ACR и AKS
Импорт образа в ACR
Импортируйте образ из Docker Hub в ACR с помощью
az acr import
команды.az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Развертывание примера образа из ACR в AKS
Убедитесь, что у вас есть правильные учетные данные AKS с помощью
az aks get-credentials
команды.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Создайте файл с именем acr-nginx.yaml , используя следующий пример YAML и замените acr-name именем ACR.
apiVersion: apps/v1 kind: Deployment metadata: name: nginx0-deployment labels: app: nginx0-deployment spec: replicas: 2 selector: matchLabels: app: nginx0 template: metadata: labels: app: nginx0 spec: containers: - name: nginx image: <acr-name>.azurecr.io/nginx:v1 ports: - containerPort: 80
Запустите развертывание в кластере
kubectl apply
AKS с помощью команды.kubectl apply -f acr-nginx.yaml
Мониторинг развертывания с помощью
kubectl get pods
команды.kubectl get pods
Выходные данные должны отображать два запущенных модуля pod, как показано в следующем примере выходных данных:
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Устранение неполадок
- Проверка доступности реестра из кластера AKS с помощью
az aks check-acr
команды. - Дополнительные сведения о мониторинге ACR.
- Дополнительные сведения о работоспособности ACR.
Azure Kubernetes Service