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.
Önkoş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.
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ğine ihtiyacınız vardır. 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. Oluşturduğunuz kimliğe rol vermek acrpull
için aşağıdaki komutu kullanın; 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.json
yeni 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:
Not
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