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.

Předpoklady

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í

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 budete potřebovat 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 právě 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

Další kroky