Аутентификация с помощью реестра контейнеров Azure из Службы Azure Kubernetes

При использовании реестра контейнеров Azure (ACR) со Службой Azure Kubernetes (AKS) необходимо установить механизм аутентификации. Эта операция реализуется как часть возможностей CLI, PowerShell и портала путем предоставления необходимых разрешений для ACR. В этой статье приведены примеры настройки проверки подлинности между этими двумя службами Azure.

Вы можете настроить AKS для интеграции ACR, выполнив несколько простых команд в Azure CLI или Azure PowerShell. Эта интеграция назначает роль AcrPull управляемому удостоверению, связанному с кластером AKS.

Примечание

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

Перед началом

Для этих примеров требуются:

  • Роль владельца, администратора учетной записи Azure или соадминистратора Azure в подписке Azure
  • Azure CLI 2.7.0 или более поздней версии

Если использовать существующее управляемое удостоверение для проверки подлинности ACR из AKS, можно обойтись без роли владельца, администратора учетной записи Azure или соадминистратора Azure. Дополнительные сведения см. в разделе Аутентификация в реестре контейнеров Azure с помощью управляемого удостоверения Azure.

Создание нового кластера AKS с интеграцией ACR

Вы можете настроить интеграцию AKS и ACR во время первоначального создания кластера AKS. Чтобы кластер AKS мог взаимодействовать с ACR, используется управляемое удостоверение Azure Active Directory. Следующая команда позволяет авторизовать существующую запись ACR в вашей подписке и настроить соответствующую роль ACRPull для управляемого удостоверения. Укажите допустимые значения для параметров ниже.

# set this to the name of your Azure Container Registry.  It must be globally unique
MYACR=myContainerRegistry

# Run the following line to create an Azure Container Registry if you do not already have one
az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic

# Create an AKS cluster with ACR integration
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR

Кроме того, вы можете указать имя ACR с помощью идентификатора ресурса ACR в следующем формате:

/subscriptions/\<subscription-id\>/resourceGroups/\<resource-group-name\>/providers/Microsoft.ContainerRegistry/registries/\<name\>

Примечание

Если вы используете ACR, который находится в другой подписке из кластера AKS, используйте идентификатор ресурса ACR при подключении или отключении кластера AKS.

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-name или acr-resource-id, как показано ниже.

az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>

или

az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-resource-id>

Примечание

При запуске az aks update --attach-acr используются разрешения пользователя, выполняющего команду для создания назначения роли ACR. Эта роль назначается управляемому удостоверению kubelet. Дополнительные сведения об управляемых удостоверениях AKS см. в разделе Сводка по управляемым удостоверениям.

Вы также можете удалить интеграцию между ACR и кластером AKS, выполнив следующее

az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-name>

или

az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-resource-id>

Работа с ACR & AKS

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

Импортируйте образ из центра Docker в ACR, выполнив следующую команду:

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

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

Убедитесь, что у вас есть верные учетные данные AKS

az aks get-credentials -g myResourceGroup -n myAKSCluster

Создайте новый файл с именем acr-nginx.yaml, содержащий следующее. Замените имя ресурса вашего реестра на acr-name. Пример: myContainerRegistry.

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

Затем запустите это развертывание в кластере AKS:

kubectl apply -f acr-nginx.yaml

Вы можете наблюдать за развертыванием, запустив следующее:

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

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

  • Выполните команду az aks check-acr, чтобы убедиться в том, что реестр доступен из кластера AKS.
  • Дополнительные сведения о мониторинге ACR
  • Подробнее об ACR Health