Nasazení do služby Azure Container Instances ze služby Azure Container Registry pomocí spravované identity
Azure Container Registry (ACR) je spravovaná služba registru kontejnerů azure, která slouží k ukládání privátních imagí kontejnerů Dockeru. Tento článek popisuje, jak vyžádat image kontejnerů uložené v registru kontejneru Azure při nasazování do skupin kontejnerů pomocí služby Azure Container Instances. Jedním ze způsobů konfigurace přístupu k registru je vytvoření spravované identity Microsoft Entra.
Pokud je přístup ke službě Azure Container Registry (ACR) omezený pomocí privátního koncového bodu, umožňuje použití spravované identity službě Azure Container Instances nasazené ve virtuální síti přístup k registru kontejneru prostřednictvím privátního koncového bodu.
Požadavky
Registr kontejnerů Azure: Potřebujete službu Azure Container Registry úrovně Premium s alespoň jednou imagí. Pokud potřebujete vytvořit registr, přečtěte si téma Vytvoření registru kontejneru pomocí Azure CLI. Poznamenejte si registr id
a loginServer
Azure CLI: Příklady příkazového řádku v tomto článku používají Azure CLI a jsou formátované pro prostředí Bash. Azure CLI můžete nainstalovat místně nebo použít Azure Cloud Shell.
Omezení
- Kontejnery Windows nepodporují image ověřené spravovanou identitou přiřazenou systémem pomocí ACR, pouze přiřazené uživatelem.
Konfigurace ověřování registru
Registr kontejneru musí mít povolené důvěryhodné služby. Pokyny k povolení důvěryhodných služeb najdete v tématu Povolit důvěryhodným službám zabezpečený přístup k registru kontejnerů s omezeným přístupem k síti.
Vytvoření identity
Vytvořte ve svém předplatném identitu pomocí příkazu az identity create . Můžete použít stejnou skupinu prostředků, kterou jste použili dříve k vytvoření registru kontejneru nebo jiné skupiny prostředků.
az identity create --resource-group myResourceGroup --name myACRId
Pokud chcete nakonfigurovat identitu v následujících krocích, pomocí příkazu az identity show uložte ID prostředku a ID instančního objektu identity do proměnných.
K správné konfiguraci identity v budoucích krocích použijte příkaz az identity show k získání a uložení ID prostředku a ID instančního objektu identity v proměnných.
# 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)
K přihlášení k rozhraní příkazového řádku z virtuálního počítače potřebujete ID prostředku identity. Zobrazení hodnoty:
echo $USERID
ID prostředku je ve formuláři:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
Budete také potřebovat ID instančního objektu, abyste spravované identitě udělili přístup k vašemu registru kontejneru. Zobrazení hodnoty:
echo $SPID
ID instančního objektu je ve formuláři:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Udělení přiřazení role identitě
Aby vaše identita mohla získat přístup k registru kontejneru, musíte jí udělit přiřazení role. Pomocí následujícího příkazu udělte acrpull
roli identitě, kterou jste vytvořili, a nezapomeňte zadat ID vašeho registru a instanční objekt, který jsme získali dříve:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Nasazení pomocí šablony Azure Resource Manageru (ARM)
Začněte zkopírováním následujícího kódu JSON do nového souboru s názvem azuredeploy.json
. V Azure Cloud Shellu můžete pomocí editoru Visual Studio Code vytvořit soubor v pracovním adresáři:
code azuredeploy.json
Vlastnosti registru kontejneru Azure můžete zadat v šabloně ARM zahrnutím imageRegistryCredentials
vlastnosti do definice skupiny kontejnerů. Přihlašovací údaje registru můžete zadat například přímo:
Poznámka:
Nejedná se o komplexní šablonu ARM, ale spíše o příklad toho, jak resources
by vypadala část kompletní šablony.
{
"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"
}
}
Nasazení šablony
Nasaďte šablonu Resource Manageru pomocí následujícího příkazu:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Nasazování s použitím rozhraní Azure CLI
Pokud chcete nasadit skupinu kontejnerů pomocí spravované identity k ověření vyžádání image přes Azure CLI, použijte následující příkaz a ujistěte se, že je <dns-label>
globálně jedinečný:
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>
Nasazení ve virtuální síti pomocí Azure CLI
Pokud chcete nasadit skupinu kontejnerů do virtuální sítě pomocí spravované identity k ověření image, která se načítá z ACR, která běží za privátním koncovým bodem přes Azure CLI, použijte následující příkaz:
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
Další informace o nasazení do virtuální sítě najdete v tématu Nasazení instancí kontejneru do virtuální sítě Azure.
Nasazení skupiny více kontejnerů ve virtuální síti pomocí YAML a Azure CLI
Pokud chcete nasadit skupinu více kontejnerů do virtuální sítě pomocí spravované identity k ověření image, která se načítá z ACR, která běží za privátním koncovým bodem prostřednictvím Azure CLI, můžete zadat konfiguraci skupiny kontejnerů v souboru YAML. Pak do příkazu předejte soubor YAML jako parametr.
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
Další informace o nasazení do skupiny s více kontejnery najdete v tématu Nasazení skupiny s více kontejnery.
Vyčištění prostředků
Pokud chcete odebrat všechny prostředky z předplatného Azure, odstraňte skupinu prostředků:
az group delete --name myResourceGroup