Yönetilen kimlik kullanarak Azure Container Registry'den Azure Container Instances'a dağıtma

Azure Container Registry (ACR), özel Docker kapsayıcı görüntülerini depolamak için kullanılan Azure tabanlı, yönetilen bir kapsayıcı kayıt defteri hizmetidir. Bu makalede, Azure Container Instances ile kapsayıcı gruplarına dağıtılırken Azure kapsayıcı kayıt defterinde depolanan kapsayıcı görüntülerinin nasıl çekılacağı açıklanır. Kayıt defteri erişimini yapılandırmanın bir yolu, Microsoft Entra yönetilen kimliği oluşturmaktır.

Azure Container Registry'ye (ACR) erişim özel uç nokta kullanılarak kısıtlandığında, yönetilen kimlik kullanmak sanal ağa dağıtılan Azure Container Instances'ın özel uç nokta üzerinden kapsayıcı kayıt defterine erişmesine olanak tanır.

Ön koşullar

Azure kapsayıcı kayıt defteri: En az bir görüntüye sahip bir premium SKU Azure kapsayıcı kayıt defterine ihtiyacınız vardır. Kayıt defteri oluşturmanız gerekiyorsa bkz . Azure CLI kullanarak kapsayıcı kayıt defteri oluşturma. Kayıt defterinin id ve değerlerini not almayı unutmayın loginServer

Azure CLI: Bu makaledeki komut satırı örnekleri Azure CLI'yi kullanır ve Bash kabuğu için biçimlendirilmiştir. Azure CLI'yı yerel olarak yükleyebilir veya Azure Cloud Shell'i kullanabilirsiniz.

Sınırlamalar

  • Windows kapsayıcıları, ACR ile sistem tarafından atanan yönetilen kimlik doğrulamasına sahip görüntü çekmelerini desteklemez, yalnızca kullanıcı tarafından atanır.

  • Azure kapsayıcı kayıt defterinde Genel Erişim 'Ağları seç' veya 'Yok' olarak ayarlanmalıdır. Azure kapsayıcı kayıt defterinin Genel Erişimi'ni 'Tüm ağlar' olarak ayarlamak için ACI'nın hizmet sorumlusu tabanlı kimlik doğrulamasıyla ACR ile kimlik doğrulamasıyla ilgili makalesini ziyaret edin.

Kayıt defteri kimlik doğrulamasını yapılandırma

Kapsayıcı kayıt defterinizde Güvenilen Hizmetler etkinleştirilmiş olmalıdır. Güvenilen hizmetleri etkinleştirme yönergelerini bulmak için bkz . Güvenilen hizmetlerin ağ ile kısıtlanmış bir kapsayıcı kayıt defterine güvenli bir şekilde erişmesine izin verme.

Kimlik oluşturma

az identity create komutunu kullanarak aboneliğinizde bir kimlik oluşturun . Kapsayıcı kayıt defterini oluşturmak için daha önce kullandığınız kaynak grubunu veya farklı bir kaynak grubunu kullanabilirsiniz.

az identity create --resource-group myResourceGroup --name myACRId

Aşağıdaki adımlarda kimliği yapılandırmak için az identity show komutunu kullanarak kimliğin kaynak kimliğini ve hizmet sorumlusu kimliğini değişkenlerde depolayın.

Sonraki adımlarda kimliği düzgün yapılandırmak için az identity show komutunu kullanarak kimliğin kaynak kimliğini ve hizmet sorumlusu kimliğini değişkenler halinde alın ve depolayın.

# 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)

Sanal makinenizden CLI'da oturum açmak için kimliğin kaynak kimliği gerekir. Değeri göstermek için:

echo $USERID

Kaynak kimliği şu biçimdedir:

/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId

Ayrıca kapsayıcı kayıt defterinize yönetilen kimlik erişimi vermek için hizmet sorumlusu kimliğine de ihtiyacınız olacaktır. Değeri göstermek için:

echo $SPID

Hizmet sorumlusu kimliği şu biçimdedir:

xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx

Kimliğe rol ataması verme

Kimliğinizin kapsayıcı kayıt defterinize erişebilmesi için bir rol ataması vermelisiniz. Az önce oluşturduğunuz kimliğe rol vermek acrpull için aşağıdaki komutu kullanın ve kayıt defterinizin kimliğini ve daha önce edindiğimiz hizmet sorumlusunu sağladığınızdan emin olun:

az role assignment create --assignee $SPID --scope <registry-id> --role acrpull

Azure Resource Manager (ARM) şablonu kullanarak dağıtma

Aşağıdaki JSON dosyasını adlı azuredeploy.jsonyeni bir dosyaya kopyalayarak başlayın. Azure Cloud Shell'de Visual Studio Code'u kullanarak dosyayı çalışma dizininizde oluşturabilirsiniz:

code azuredeploy.json

Azure kapsayıcı kayıt defterinizin özelliklerini kapsayıcı grubu tanımına ekleyerek imageRegistryCredentials ARM şablonunda belirtebilirsiniz. Örneğin, kayıt defteri kimlik bilgilerini doğrudan belirtebilirsiniz:

Dekont

Bu kapsamlı bir ARM şablonu değil, tam bir şablonun resources bölümünün nasıl görüneceğine ilişkin bir örnektir.

{
    "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"
    }
  }

Şablonu dağıtma

Resource Manager şablonunuzu aşağıdaki komutla dağıtın:

az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json

Azure CLI’yi kullanarak dağıtma

Azure CLI aracılığıyla görüntü çekmelerinin kimliğini doğrulamak üzere yönetilen kimlik kullanarak bir kapsayıcı grubu dağıtmak için aşağıdaki komutu kullanarak genel <dns-label> olarak benzersiz olduğundan emin olun:

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 kullanarak sanal ağda dağıtma

Azure CLI aracılığıyla özel uç noktanın arkasında çalışan bir ACR'den görüntü çekmelerinin kimliğini doğrulamak üzere yönetilen kimlik kullanarak bir kapsayıcı grubunu sanal ağa dağıtmak için aşağıdaki komutu kullanın:

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

Sanal ağa dağıtma hakkında daha fazla bilgi için bkz . Azure sanal ağına kapsayıcı örnekleri dağıtma.

YAML ve Azure CLI kullanarak sanal ağda çok kapsayıcılı bir grup dağıtma

Azure CLI aracılığıyla özel uç noktanın arkasında çalışan bir ACR'den görüntü çekmelerinin kimliğini doğrulamak üzere yönetilen kimlik kullanarak bir sanal ağa çok kapsayıcılı bir grup dağıtmak için kapsayıcı grubu yapılandırmasını YAML dosyasında belirtebilirsiniz. Ardından YAML dosyasını komutuna parametre olarak geçirin.

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

Çok kapsayıcılı bir gruba dağıtma hakkında daha fazla bilgi için bkz . Çok kapsayıcılı grup dağıtma.

Kaynakları temizleme

Azure aboneliğinizdeki tüm kaynakları kaldırmak için kaynak grubunu silin:

az group delete --name myResourceGroup

Sonraki Adımlar