Аутентификация с помощью Реестра контейнеров 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.
  • Если вы используете 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 -n $MYACR -g myContainerRegistryResourceGroup --sku basic
    

Создание кластера AKS и интеграция с существующим ACR

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

    MYACR=mycontainerregistry
    
    az aks create -n myAKSCluster -g 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 -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>
    
    # Attach using acr-resource-id
    az aks update -n myAKSCluster -g 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 -n myAKSCluster -g myResourceGroup --detach-acr <acr-name>
    
    # Detach using acr-resource-id
    az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-resource-id>
    

Работа с ACR и AKS

Импорт образа в ACR

  • Импортируйте образ из Docker Hub в ACR с помощью az acr import команды.

    az acr import  -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
    

Развертывание примера образа из ACR в AKS

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

    az aks get-credentials -g myResourceGroup -n 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
    

Устранение неполадок