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


Проверка подлинности с помощью реестра контейнеров Azure (ACR) из службы Azure Kubernetes (AKS)

При использовании реестра контейнеров 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 см. в сводке управляемых удостоверений.

Important

При присоединении ACR возникает проблема с задержкой в группах Microsoft Entra. Если роль AcrPull предоставляется группе Microsoft Entra, а удостоверение kubelet добавляется в группу для завершения конфигурации RBAC, может возникнуть задержка до того, как группа RBAC вступит в силу. Если выполняется автоматизация, требующая завершения настройки RBAC, рекомендуется использовать собственное удостоверение kubelet в качестве обходного решения. Вы можете предварительно создать удостоверение, назначаемое пользователем, добавить его в группу Microsoft Entra, а затем использовать удостоверение в качестве удостоверения kubelet для создания кластера AKS. Это гарантирует, что удостоверение добавляется в группу Microsoft Entra до создания маркера kubelet, что позволяет избежать проблемы с задержкой.

Note

В этой статье рассматривается автоматическая проверка подлинности между AKS и ACR. Если вам нужно извлечь образ из частного внешнего реестра, используйте секрет извлечения образа.

Caution

Интеграция с AKS-ACR через az aks --attach-acr не поддерживается для реестров ACR с поддержкой ABAC, где настройки разрешений назначения ролей установлены на "RBAC Registry + ABAC Repository Permissions". Реестры ACR с поддержкой ABAC требуют Container Registry Repository Reader роль вместо AcrPull роли для предоставления разрешений на извлечение изображений. Для реестров ACR с поддержкой ABAC не следует использовать az aks --attach-acr, а вместо этого вручную назначить роль с помощью портала Azure, CLI или Azure Resource Manager. https://aka.ms/acr/auth/abac Дополнительные сведения о реестрах ACR с поддержкой ABAC см. в статье .

Перед тем как начать

Создание нового 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
    

    Эта команда может занять несколько минут.

    Note

    Если вы используете 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>
    

    Note

    Команда 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

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

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Создайте файл с именем 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
    
  3. Запустите развертывание в кластере kubectl apply AKS с помощью команды.

    kubectl apply -f acr-nginx.yaml
    
  4. Мониторинг развертывания с помощью 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
    

Troubleshooting