Bir hizmet sorumlusu kullanarak Azure Container Registry'den Azure Container Instances'a dağıtma

Azure Container Registry , ö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'a dağıtılırken Azure kapsayıcı kayıt defterinde depolanan kapsayıcı görüntülerinin nasıl çekildiği açıklanır. Kayıt defteri erişimini yapılandırmanın bir yolu, bir Microsoft Entra hizmet sorumlusu ve parolası oluşturmak ve oturum açma kimlik bilgilerini bir Azure anahtar kasasında depolamaktır.

Ön koşullar

Azure kapsayıcı kayıt defteri: Bu makaledeki adımları tamamlamak için bir Azure kapsayıcı kayıt defterine ve kayıt defterinde en az bir kapsayıcı görüntüsüne ihtiyacınız vardır. Kayıt defterine ihtiyacınız varsa bkz . Azure CLI kullanarak kapsayıcı kayıt defteri oluşturma.

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

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

"Başsız" hizmetlere ve uygulamalara erişim sağladığınız bir üretim senaryosunda, hizmet sorumlusu kullanarak kayıt defteri erişimini yapılandırmanız önerilir. Hizmet sorumlusu, kapsayıcı görüntülerinize Azure rol tabanlı erişim denetimi (Azure RBAC) sağlamanıza olanak tanır. Örneğin, bir hizmet sorumlusunu bir kayıt defterine yalnızca çekme erişimiyle yapılandırabilirsiniz.

Azure Container Registry ek kimlik doğrulama seçenekleri sağlar.

Aşağıdaki bölümde bir Azure anahtar kasası ve hizmet sorumlusu oluşturacak ve hizmet sorumlusunun kimlik bilgilerini kasada depolaacaksınız.

Anahtar kasası oluşturma

Azure Key Vault içinde henüz bir kasanız yoksa, aşağıdaki komutları kullanarak Azure CLI ile bir kasa oluşturun.

değişkenini RES_GROUP anahtar kasasının oluşturulacağı mevcut bir kaynak grubunun adıyla ve ACR_NAME kapsayıcı kayıt defterinizin adıyla güncelleştirin. Kısa olması için, bu makaledeki komutlar kayıt defterinizin, anahtar kasanızın ve kapsayıcı örneklerinizin tümünün aynı kaynak grubunda oluşturulduğunu varsayar.

içinde AKV_NAMEyeni anahtar kasanız için bir ad belirtin. Kasa adı Azure içinde benzersiz olmalı ve 3-24 alfasayısal karakter uzunluğunda olmalı, harfle başlamalı, harf veya rakamla bitmelidir ve ardışık kısa çizgi içeremez.

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

Hizmet sorumlusu oluşturma ve kimlik bilgilerini depolama

Şimdi bir hizmet sorumlusu oluşturun ve kimlik bilgilerini anahtar kasanızda depolayın.

Aşağıdaki komutlar hizmet sorumlusunu oluşturmak için az ad sp create-for-rbac, hizmet sorumlusunun parolasını kasada depolamak için az keyvault secret set komutunu kullanır. Oluşturma işleminde hizmet sorumlusunun appId değerini not almayı unutmayın.

# 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 Yukarıdaki komuttaki bağımsız değişken, hizmet sorumlusunu acrpull rolüyle yapılandırarak kayıt defterine yalnızca çekme erişimi verir. Hem gönderme hem de çekme erişimi vermek için bağımsız değişkenini --role acrpush olarak değiştirin.

Ardından, hizmet sorumlusunun appId değerini, kimlik doğrulaması için Azure Container Registry'ye geçirdiğiniz kullanıcı adı olan kasada depolayın.

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

Bir Azure anahtar kasası oluşturdunuz ve içinde iki gizli dizi depoladınız:

  • $ACR_NAME-pull-usr: Kapsayıcı kayıt defterinin kullanıcı adı olarak kullanılacak hizmet sorumlusu kimliği.
  • $ACR_NAME-pull-pwd: Kapsayıcı kayıt defterinin parolası olarak kullanılacak hizmet sorumlusu parolası.

Artık siz veya uygulamalarınız ve hizmetleriniz kayıt defterinden görüntü alırken bu gizli dizilere ada göre başvurabilirsiniz.

Azure CLI ile kapsayıcı dağıtma

Hizmet sorumlusu kimlik bilgileri Artık Azure Key Vault gizli dizilerinde depolandığına göre, uygulamalarınız ve hizmetleriniz bunları özel kayıt defterinize erişmek için kullanabilir.

önce az acr show komutunu kullanarak kayıt defterinin oturum açma sunucusu adını alın. Oturum açma sunucusu adının tümü küçük harftir ve benzeridir myregistry.azurecr.io.

ACR_LOGIN_SERVER=$(az acr show --name $ACR_NAME --resource-group $RES_GROUP --query "loginServer" --output tsv)

Bir kapsayıcı örneği dağıtmak için aşağıdaki az container create komutunu yürütün. Komut, kapsayıcı kayıt defterinizde kimlik doğrulaması yapmak için Azure Key Vault'ta depolanan hizmet sorumlusunun kimlik bilgilerini kullanır ve aci-helloworld görüntüsünü daha önce kayıt defterinize iletmiş olduğunuzu varsayar. --image Kayıt defterinizden farklı bir görüntü kullanmak istiyorsanız değeri güncelleştirin.

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

Değerin --dns-name-label Azure içinde benzersiz olması gerektiğinden, yukarıdaki komut kapsayıcının DNS adı etiketine rastgele bir sayı ekler. Komutun çıktısı, kapsayıcının tam etki alanı adını (FQDN) gösterir, örneğin:

"aci-demo-25007.eastus.azurecontainer.io"

Kapsayıcı başarıyla başlatıldıktan sonra, uygulamanın başarıyla çalıştığını doğrulamak için tarayıcınızda FQDN'sine gidebilirsiniz.

Azure Resource Manager şablonuyla dağıtma

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

[...]
"imageRegistryCredentials": [
  {
    "server": "imageRegistryLoginServer",
    "username": "imageRegistryUsername",
    "password": "imageRegistryPassword"
  }
]
[...]

Kapsayıcı grubu ayarlarının tamamı için bkz . Resource Manager şablon başvurusu.

Resource Manager şablonunda Azure Key Vault gizli dizilerine başvurma hakkında ayrıntılı bilgi için bkz . Dağıtım sırasında güvenli parametre değeri geçirmek için Azure Key Vault kullanma.

Azure portal ile dağıtma

Kapsayıcı görüntülerini bir Azure kapsayıcı kayıt defterinde tutarsanız, Azure portalını kullanarak Azure Container Instances'ta kolayca bir kapsayıcı oluşturabilirsiniz. Kapsayıcı kayıt defterinden kapsayıcı örneği dağıtmak için portalı kullanırken, kayıt defterinin yönetici hesabını etkinleştirmeniz gerekir. Yönetici hesabı, tek bir kullanıcının özellikle test amacıyla kayıt defterine erişmesi için tasarlanmıştır.

  1. Azure portalında kapsayıcı kayıt defterinize gidin.

  2. Yönetici hesabının etkinleştirildiğini onaylamak için Erişim anahtarları'nı seçin ve Yönetici kullanıcı altında Etkinleştir'i seçin.

  3. Depolar'ı seçin, ardından dağıtmak istediğiniz depoyu seçin, dağıtmak istediğiniz kapsayıcı görüntüsünün etiketine sağ tıklayın ve Örneği çalıştır'ı seçin.

  4. Kapsayıcı için bir ad ve kaynak grubu için bir ad girin. İsterseniz varsayılan değerleri de değiştirebilirsiniz.

    Create menu for Azure Container Instances

  5. Dağıtım tamamlandıktan sonra, bildirim bölmesinden kapsayıcı grubuna gidip IP adresini ve diğer özelliklerini bulabilirsiniz.

    Details view for Azure Container Instances container group

Sonraki adımlar

Azure Container Registry kimlik doğrulaması hakkında daha fazla bilgi için bkz . Azure kapsayıcı kayıt defteriyle kimlik doğrulama.