Развертывание в службе "Экземпляры контейнеров Azure" из реестра контейнеров Azure с помощью субъекта-службы

Реестр контейнеров Azure — это управляемая служба реестра контейнеров на базе Azure, используемая для хранения частных образов контейнеров Docker. В этой статье описывается, как извлекать образы контейнеров, хранящиеся в реестре контейнеров Azure, при развертывании в экземплярах контейнеров Azure. Одним из способов настройки доступа к реестру является создание субъекта-службы и пароля Microsoft Entra и хранение учетных данных входа в хранилище ключей Azure.

Необходимые компоненты

Реестр контейнеров Azure: чтобы выполнить действия, описанные в этой статье, необходим реестр контейнеров Azure и как минимум один образ контейнера в реестре. Если вам нужен реестр, см. сведения о его создании в статье Краткое руководство. Создание реестра контейнеров с использованием Azure CLI.

Azure CLI. Примеры командной строки в этой статье используют Azure CLI и отформатированы для оболочки Bash. Вы можете установить Azure CLI локально или использовать Azure Cloud Shell.

Ограничения

Настройка проверки подлинности в реестре

В производственном сценарии, когда вы предоставляете доступ к "автономным" службам и приложениям, рекомендуется настроить доступ к реестру с помощью субъекта-службы. Субъект-служба позволяет вам предоставлять управление доступом на основе ролей Azure (Azure RBAC) для образов контейнеров. Например, вы можете настроить субъект-службу с доступом только на извлечение к реестру.

Реестр контейнеров Azure предоставляет дополнительные параметры проверки подлинности.

В следующем разделе вы создадите субъект-службу и сохраните его учетные данные в хранилище ключей Azure, которое также создается в этом разделе.

Создание хранилища ключей

Если у вас еще нет хранилища в Azure Key Vault, создайте его с помощью Azure CLI, используя следующие команды.

Обновите переменную RES_GROUP именем существующей группы ресурсов, в которой будет создано хранилище ключей, а ACR_NAME — именем вашего реестра контейнеров. Для краткости команды в этой статье предполагают, что ваш реестр, хранилище ключей и экземпляры контейнера созданы в одной группе ресурсов.

Укажите имя нового хранилища ключей в AKV_NAME. Имя хранилища должно быть уникальным в Azure и содержать от 3 до 24 буквенно-цифровых символов. Имя должно начинаться с буквы, заканчиваться буквой или цифрой и не может содержать последовательные дефисы.

RES_GROUP=myresourcegroup # Resource Group name
ACR_NAME=myregistry       # Azure Container Registry registry name
AKV_NAME=mykeyvault       # Azure Key Vault vault name

az keyvault create -g $RES_GROUP -n $AKV_NAME

Создание учетной записи субъекта-службы и сохранение учетных данных

Теперь создайте субъекта-службы и сохраните его учетные данные в своем хранилище ключей.

Следующая команда использует az ad sp create-for-rbac для создания субъекта-службы и az keyvault secret set для сохранения пароля субъекта-службы в хранилище. Обязательно запишите AppID субъекта-службы при создании.

# Create service principal
az ad sp create-for-rbac \
  --name http://$ACR_NAME-pull \
  --scopes $(az acr show --name $ACR_NAME --query id --output tsv) \
  --role acrpull

SP_ID=xxxx # Replace with your service principal's appId

# Store the registry *password* in the vault
az keyvault secret set \
  --vault-name $AKV_NAME \
  --name $ACR_NAME-pull-pwd \
  --value $(az ad sp show --id $SP_ID --query password --output tsv)

Аргумент --role в предыдущей команде настраивает субъект-службу с ролью acrpull, которая предоставляет доступ только для извлечения к реестру. Чтобы предоставить доступ для отправки и извлечения данных, измените аргумент --role на acrpush.

Затем сохраните в хранилище appId субъекта-службы, который является именем пользователя, переданным в реестр контейнеров Azure для проверки подлинности.

# Store service principal ID in vault (the registry *username*)
az keyvault secret set \
    --vault-name $AKV_NAME \
    --name $ACR_NAME-pull-usr \
    --value $(az ad sp show --id $SP_ID --query appId --output tsv)

Вы создали хранилище ключей Azure и сохранили в нем два секрета:

  • $ACR_NAME-pull-usr: идентификатор субъекта-службы для использования в качестве имени пользователя реестра контейнеров.
  • $ACR_NAME-pull-pwd: пароль субъекта-службы для использования в качестве пароля реестра контейнеров.

Теперь вы можете ссылаться на эти секреты по имени, когда вы или ваши приложения и службы извлекаете образы из реестра.

Развертывание контейнера с помощью Azure CLI

Теперь, когда учетные данные субъекта-службы хранятся в секретах Аzure Key Vault, ваши приложения и службы могут использовать их для доступа к вашему частному реестру.

Сначала получите имя сервера входа в реестр с помощью команды az acr show. Имя сервера для входа представлено в нижнем регистре и подобно myregistry.azurecr.io.

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Выполните следующую команду az container create, чтобы развернуть экземпляр контейнера. Команда использует учетные данные субъекта-службы, хранящиеся в Azure Key Vault, для проверки подлинности в вашем реестре контейнеров и предполагает, что вы ранее отправили образ aci-helloworld в ваш реестр. Обновите значение --image, если вы хотите использовать другой образ из реестра.

az container create \
    --name aci-demo \
    --resource-group $RES_GROUP \
    --image $ACR_LOGIN_SERVER/aci-helloworld:v1 \
    --registry-login-server $ACR_LOGIN_SERVER \
    --registry-username $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-usr --query value -o tsv) \
    --registry-password $(az keyvault secret show --vault-name $AKV_NAME -n $ACR_NAME-pull-pwd --query value -o tsv) \
    --dns-name-label aci-demo-$RANDOM \
    --query ipAddress.fqdn

Значение --dns-name-label должно быть уникальным в пределах Azure, поэтому предыдущая команда добавляет случайное число к метке DNS-имени контейнера. В выходных данных команды содержится полное доменное имя (FQDN) контейнера, например:

"aci-demo-25007.eastus.azurecontainer.io"

Когда контейнер будет запущен, вы можете перейти к его FQDN в браузере, чтобы убедиться, что приложение работает успешно.

Развертывание с помощью шаблона Azure Resource Manager

Вы можете указать свойства своего реестра контейнеров Azure в шаблоне Azure Resource Manager, включив свойство imageRegistryCredentials в определение группы контейнеров. Например, вы можете напрямую указать учетные данные реестра:

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Полные настройки группы контейнеров см. в справочнике по шаблону Resource Manager.

Дополнительные сведения об использовании ссылки на секреты Azure Key Vault в шаблоне Resource Manager см. в статье Использование Azure Key Vault для передачи защищенного значения параметра во время развертывания.

Развертывание с помощью портала Azure

Если образы контейнеров хранятся в реестре контейнеров Azure, можно легко создать контейнер в службе "Экземпляры контейнеров Azure" с помощью портала Azure. Чтобы развернуть экземпляр контейнера из реестра контейнеров с помощью портала, необходимо включить учетную запись администратора реестра. Учетная запись администратора предоставляет доступ к реестру одному пользователю. Она предназначена, главным образом, для тестирования.

  1. На портале Azure перейдите в реестр контейнеров.

  2. Чтобы подтвердить, что учетная запись администратора включена, выберите Ключи доступа, а затем в разделе Пользователь-администратор выберите Включить.

  3. Щелкните Репозитории, а затем выберите репозиторий, из которого необходимо выполнить развертывание. Щелкните правой кнопкой мыши тег для образа контейнера, который нужно развернуть, и выберите пункт Запустить экземпляр.

  4. Введите имя контейнера и группы ресурсов. При необходимости можно изменить значения по умолчанию.

    Create menu for Azure Container Instances

  5. После завершения развертывания можно перейти к группе контейнеров в области уведомлений, чтобы найти ее IP-адрес и другие свойства.

    Details view for Azure Container Instances container group

Следующие шаги

Более подробные сведения об аутентификации в реестре контейнеров Azure см. в статье Аутентификация с помощью частного реестра контейнеров Docker.