Развертывание в службе "Экземпляры контейнеров Azure" из Реестра контейнеров Azure с использованием управляемого удостоверения
Реестр контейнеров Azure (ACR) — это управляемая служба реестра контейнеров на базе Azure, используемая для хранения образов частных контейнеров Docker. В этой статье описывается, как извлекать образы контейнеров, хранящиеся в реестре контейнеров Azure, при развертывании в группах контейнеров с помощью службы "Экземпляры контейнеров Azure". Одним из способов настройки доступа к реестру является создание управляемого удостоверения Microsoft Entra.
Если доступ к Реестр контейнеров Azure (ACR) ограничен с помощью частной конечной точки, использование управляемого удостоверения позволяет Экземпляры контейнеров Azure развертываться в виртуальной сети для доступа к реестру контейнеров через частную конечную точку.
Необходимые компоненты
Реестр контейнеров Azure. Вам нужен реестр контейнеров Azure уровня "Премиум" по крайней мере с одним образом. Если вам нужно создать реестр, см. статью Создание реестра контейнеров с помощью Azure CLI. Обязательно запишите параметры реестра id
и loginServer
.
Azure CLI. Примеры командной строки в этой статье используют Azure CLI и отформатированы для оболочки Bash. Вы можете установить Azure CLI локально или использовать Azure Cloud Shell.
Ограничения
- Контейнеры Windows не поддерживают назначаемые системой управляемые удостоверения образы, прошедшие проверку подлинности, с помощью ACR, назначаемого пользователем.
Настройка проверки подлинности в реестре
В реестр контейнеров должны быть включены Доверенные службы. Инструкции по включению доверенных служб см. в статье Обеспечение безопасного доступа доверенных служб к реестру контейнеров с сетевыми ограничениями.
Создание удостоверения
Создайте в подписке удостоверение, используя команду az identity create. Вы можете использовать ту же группу ресурсов, которую указали ранее для создания реестра контейнеров, либо другую.
az identity create --resource-group myResourceGroup --name myACRId
Чтобы настроить удостоверение на следующих шагах, выполните команду az identity show для сохранения идентификатора ресурса и идентификатора субъекта-службы удостоверения в переменных.
Чтобы правильно настроить удостоверение в последующих шагах, используйте команду az identity show для получения и сохранения ИД ресурса удостоверения и ИД субъекта-службы в переменных.
# Get resource ID of the user-assigned identity
USERID=$(az identity show --resource-group myResourceGroup --name myACRId --query id --output tsv)
# Get service principal ID of the user-assigned identity
SPID=$(az identity show --resource-group myResourceGroup --name myACRId --query principalId --output tsv)
Вам потребуется идентификатор ресурса удостоверения для входа в ИНТЕРФЕЙС командной строки из виртуальной машины. Чтобы показать значение:
echo $USERID
ИД ресурса имеет вид:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
Вам также понадобится идентификатор субъекта-службы, чтобы предоставить управляемому удостоверению доступ к вашему реестру контейнеров. Чтобы показать значение:
echo $SPID
Идентификатор субъекта-службы имеет вид:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Предоставление назначения роли удостоверению
Чтобы удостоверение могло получить доступ к реестру контейнеров, необходимо предоставить ему назначение ролей. Используйте следующую команду, чтобы предоставить acrpull
роль созданному удостоверению, чтобы указать идентификатор реестра и субъект-службу, полученный ранее:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Развертывание с использованием шаблона Azure Resource Manager (ARM)
Для начала скопируйте следующий код JSON в новый файл с именем azuredeploy.json
. В Azure Cloud Shell для создания файла в рабочей папке можно применить Visual Studio Code.
code azuredeploy.json
Вы можете указать свойства реестра контейнеров Azure в шаблоне ARM, включив свойство imageRegistryCredentials
в определение группы контейнеров. Например, вы можете напрямую указать учетные данные реестра:
Примечание.
Это не всеобъемлющий шаблон ARM, а скорее пример того, как будет выглядеть раздел resources
полного шаблона.
{
"type": "Microsoft.ContainerInstance/containerGroups",
"apiVersion": "2021-09-01",
"name": "myContainerGroup",
"location": "norwayeast",
"identity": {
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId": {}
}
},
"properties": {
"containers": [
{
"name": "mycontainer",
"properties": {
"image": "myacr.azurecr.io/hello-world:latest",
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"resources": {
"requests": {
"cpu": 1,
"memoryInGB": 1
}
}
}
}
],
"imageRegistryCredentials": [
{
"server":"myacr.azurecr.io",
"identity":"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId"
}
],
"ipAddress": {
"ports": [
{
"port": 80,
"protocol": "TCP"
}
],
"type": "public"
},
"osType": "Linux"
}
}
Развертывание шаблона
Разверните шаблон ARM с помощью следующей команды:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Развертывание с использованием интерфейса командной строки Azure
Чтобы развернуть группу контейнеров с помощью управляемого удостоверения для проверки подлинности извлечения образов через Azure CLI, используйте следующую команду, убедившись в глобальной уникальности <dns-label>
:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --ports 80 --dns-name-label <dns-label>
Развертывание в виртуальной сети с помощью Azure CLI
Чтобы развернуть группу контейнеров в виртуальной сети с помощью управляемого удостоверения для проверки подлинности образа, извлекаемого из ACR, которая выполняется за частной конечной точкой через Azure CLI, используйте следующую команду:
az container create --name my-containergroup --resource-group myResourceGroup --image <loginServer>/hello-world:v1 --acr-identity $USERID --assign-identity $USERID --vnet "/subscriptions/$SUBSCRIPTION_ID/resourceGroups/"/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/ --subnet mySubnetName
Дополнительные сведения о развертывании в виртуальной сети см. в статье "Развертывание экземпляров контейнеров в виртуальной сети Azure".
Развертывание группы с несколькими контейнерами в виртуальной сети с помощью YAML и Azure CLI
Чтобы развернуть группу с несколькими контейнерами в виртуальной сети с помощью управляемого удостоверения для проверки подлинности образа, извлекаемого из ACR, работающего за частной конечной точкой через Azure CLI, можно указать конфигурацию группы контейнеров в файле YAML. Затем передайте YAML-файл в качестве параметра в команду.
apiVersion: '2021-10-01'
location: eastus
type: Microsoft.ContainerInstance/containerGroups
identity:
type: UserAssigned
userAssignedIdentities: {
'/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId': {}
}
properties:
osType: Linux
imageRegistryCredentials:
- server: myacr.azurecr.io
identity: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId'
subnetIds:
- id: '/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourceGroups/myVNetResourceGroup/providers/Microsoft.Network/virtualNetworks/myVNetName/subnets/mySubnetName'
name: mySubnetName
containers:
- name: myContainer-1
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 1
image: 'myacr.azurecr.io/myimage:latest'
- name: myContainer-2
properties:
resources:
requests:
cpu: '.4'
memoryInGb: '1'
environmentVariables:
- name: CONTAINER
value: 2
image: 'myacr.azurecr.io/myimage:latest'
az container create --name my-containergroup --resource-group myResourceGroup --file my-YAML-file.yaml
Дополнительные сведения о развертывании в группе с несколькими контейнерами см. в статье "Развертывание группы с несколькими контейнерами".
Очистка ресурсов
Чтобы удалить все ресурсы из подписки Azure, удалите группу ресурсов:
az group delete --name myResourceGroup