Развертывание в службе "Экземпляры контейнеров Azure" из реестра контейнеров Azure с помощью субъекта-службы
Реестр контейнеров Azure — это управляемая служба реестра контейнеров на базе Azure, используемая для хранения частных образов контейнеров Docker. В этой статье описывается, как извлекать образы контейнеров, хранящиеся в реестре контейнеров Azure, при развертывании в экземплярах контейнеров Azure. Одним из способов настройки доступа к реестру является создание субъекта-службы и пароля Microsoft Entra и хранение учетных данных входа в хранилище ключей Azure.
Необходимые компоненты
Реестр контейнеров Azure: чтобы выполнить действия, описанные в этой статье, необходим реестр контейнеров Azure и как минимум один образ контейнера в реестре. Если вам нужен реестр, см. сведения о его создании в статье Краткое руководство. Создание реестра контейнеров с использованием Azure CLI.
Azure CLI. Примеры командной строки в этой статье используют Azure CLI и отформатированы для оболочки Bash. Вы можете установить Azure CLI локально или использовать Azure Cloud Shell.
Ограничения
- Контейнеры Windows не поддерживают назначаемые системой управляемые удостоверения образы, прошедшие проверку подлинности, с помощью ACR, назначаемого пользователем.
Настройка проверки подлинности в реестре
В рабочем сценарии, где вы предоставляете доступ к службам и приложениям без головы, рекомендуется настроить доступ к реестру с помощью субъекта-службы. Субъект-служба позволяет вам предоставлять управление доступом на основе ролей 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"
После успешного запуска контейнера вы можете перейти к полному доменному имени в браузере, чтобы убедиться, что приложение работает успешно.
Развертывание с помощью шаблона 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. Чтобы развернуть экземпляр контейнера из реестра контейнеров с помощью портала, необходимо включить учетную запись администратора реестра. Учетная запись администратора предоставляет доступ к реестру одному пользователю. Она предназначена, главным образом, для тестирования.
На портале Azure перейдите в реестр контейнеров.
Чтобы подтвердить, что учетная запись администратора включена, выберите Ключи доступа, а затем в разделе Пользователь-администратор выберите Включить.
Щелкните Репозитории, а затем выберите репозиторий, из которого необходимо выполнить развертывание. Щелкните правой кнопкой мыши тег для образа контейнера, который нужно развернуть, и выберите пункт Запустить экземпляр.
Введите имя контейнера и группы ресурсов. При необходимости можно изменить значения по умолчанию.
После завершения развертывания можно перейти к группе контейнеров в области уведомлений, чтобы найти ее IP-адрес и другие свойства.
Следующие шаги
Более подробные сведения об аутентификации в реестре контейнеров Azure см. в статье Аутентификация с помощью частного реестра контейнеров Docker.