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


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

При использовании Реестр контейнеров Azure (ACR) со службой Azure Kubernetes (AKS) необходимо установить механизм проверки подлинности. Вы можете настроить необходимые разрешения между ACR и AKS с помощью Azure CLI, Azure PowerShell или портала #REF!. В этой статье приведены примеры настройки проверки подлинности между этими службами #REF! с помощью Azure CLI или Azure PowerShell.

Интеграция AKS с ACR назначает роль AcrPull управляемой идентичности Microsoft Entra ID , связанной с пулом агентов в вашем кластере AKS. Дополнительные сведения об управляемых удостоверениях AKS см. в разделе «Сводка по управляемым удостоверениям».

Важный

При присоединении ACR возникает проблема с задержкой в группах #REF!. Если роль AcrPull предоставлена группе #REF!, а удостоверение kubelet добавлено в группу для завершения настройки RBAC, может возникнуть задержка до того момента, как настройки группы RBAC начнут действовать. Если вы используете автоматизацию, которая требует завершения настройки RBAC, мы рекомендуем использовать Bring your own kubelet identity в качестве обходного решения. Вы можете предварительно создать назначенную пользователем идентичность, добавить её в группу #REF!, а затем использовать идентичность в качестве идентичности kubelet для создания кластера AKS. Это гарантирует, что идентификатор добавляется в группу в #REF! перед генерацией токена в kubelet, что позволяет избежать проблемы с задержкой.

Примечание

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

Caution

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

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

  • Вам потребуется Владелец, администратор учетной записи #REF! или соадминистратор #REF! в подписке #REF!.
  • Если вы используете Azure CLI, рекомендуется, чтобы вы работали с Azure CLI версии 2.7.0 или более поздней. Чтобы узнать версию, выполните команду . Если необходимо установить или обновить, см. раздел Install Azure CLI.
  • Если вы используете Azure PowerShell, для применения этой статьи требуется, чтобы вы использовали Azure PowerShell версии не ниже 5.9.0. Чтобы узнать версию, выполните команду . Если необходимо установить или обновить, см. раздел Install Azure PowerShell.
  • Примеры и синтаксис для использования Terraform для настройки ACR можно найти в справочнике Terraform.

Создание нового ACR

  • Если у вас еще нет ACR, создайте его с помощью команды. В следующем примере переменной присваивается имя ACR — mycontainerregistry, и эта переменная используется для создания реестра. Имя ACR должно быть глобально уникальным и использовать только строчные буквы.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

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

  • Создайте новый кластер AKS и интегрируйте с существующим 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, используя команду с параметром и допустимым значением 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>
    

    Примечание

    Команда использует разрешения пользователя, выполняющего команду, для создания назначения роли ACR. Эта роль назначается управляемой идентичности kubelet. Дополнительные сведения об управляемых удостоверениях AKS см. в сводке управляемых удостоверений.

Отсоединение ACR от кластера AKS

  • Удалите интеграцию между ACR и кластером AKS с помощью команды с параметром и допустимым значением 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 --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. Запустите развертывание в кластере AKS с помощью команды.

    kubectl apply -f acr-nginx.yaml
    
  4. Проведите мониторинг развертывания с помощью команды.

    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 с помощью команды.
  • Дополнительные сведения о мониторинге ACR.
  • Узнайте больше о состоянии здоровья ACR.