Menyebarkan ke Azure Container Instances dari Azure Container Registry menggunakan identitas terkelola
Azure Container Registry (ACR) adalah layanan registri kontainer terkelola berbasis Azure yang digunakan untuk menyimpan gambar kontainer Docker privat. Artikel ini menjelaskan cara menarik gambar kontainer yang disimpan di registri kontainer Azure saat menyebarkan ke grup kontainer dengan Azure Container Instances. Salah satu cara untuk mengonfigurasi akses registri adalah dengan membuat identitas terkelola Microsoft Entra.
Saat akses ke Azure Container Registry (ACR) dibatasi menggunakan titik akhir privat, menggunakan identitas terkelola memungkinkan Azure Container Instances disebarkan ke jaringan virtual untuk mengakses registri kontainer melalui titik akhir privat.
Prasyarat
Registri kontainer Azure: Anda memerlukan registri kontainer Azure SKU premium dengan setidaknya satu gambar. Jika Anda perlu membuat registri, lihat Membuat registri kontainer menggunakan Azure CLI. Pastikan untuk mencatat id
dan loginServer
registri
Microsoft Azure CLI: Contoh baris perintah dalam artikel ini menggunakan Microsoft Azure CLI dan diformat untuk shell Bash. Anda dapat memasang Microsoft Azure CLI secara lokal, atau menggunakan Microsoft Azure Cloud Shell.
Batasan
Kontainer Windows tidak mendukung penarikan gambar terkelola yang diautentikasi identitas terkelola yang ditetapkan sistem dengan ACR, hanya ditetapkan pengguna.
Registri kontainer Azure harus memiliki Akses Publik yang diatur ke 'Pilih jaringan' atau 'Tidak Ada'. Untuk mengatur Akses Publik registri kontainer Azure ke 'Semua jaringan', kunjungi artikel ACI tentang cara mengautentikasi dengan ACR dengan autentikasi berbasis prinsip layanan.
Konfigurasikan autentikasi registri
Registri kontainer Anda harus mengaktifkan Layanan Tepercaya. Untuk menemukan instruksi tentang cara mengaktifkan layanan tepercaya, lihat Mengizinkan layanan tepercaya mengakses registri kontainer yang dibatasi jaringan dengan aman.
Buat Identitas
Buat identitas di langganan Anda menggunakan perintah buat identitas az. Anda dapat menggunakan grup sumber daya yang sama yang Anda gunakan sebelumnya untuk membuat registri kontainer, atau yang berbeda.
az identity create --resource-group myResourceGroup --name myACRId
Untuk mengonfigurasi identitas dalam langkah-langkah berikut, gunakan perintah az identity show untuk menyimpan ID sumber daya identitas dan ID perwakilan layanan dalam variabel.
Untuk mengonfigurasi identitas dengan benar di langkah mendatang, gunakan az identity show untuk mendapatkan dan menyimpan ID sumber daya identitas dan ID perwakilan layanan dalam variabel.
# 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)
Anda memerlukan ID sumber daya identitas untuk masuk ke CLI dari mesin virtual Anda. Untuk menunjukkan nilai:
echo $USERID
ID sumber daya dalam bentuk:
/subscriptions/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myACRId
Anda juga memerlukan ID perwakilan layanan untuk memberikan akses identitas terkelola ke registri kontainer Anda. Untuk menunjukkan nilai:
echo $SPID
ID perwakilan layanan dalam bentuk:
xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx
Memberikan identitas dengan penetapan peran
Agar identitas Anda dapat mengakses registri kontainer, Anda harus memberi identitas dengan penetapan peran. Gunakan perintah berikut untuk memberikan peran acrpull
ke identitas yang baru saja Anda buat, pastikan untuk memberikan ID registri Anda dan perwakilan layanan yang kita dapatkan sebelumnya:
az role assignment create --assignee $SPID --scope <registry-id> --role acrpull
Menyebarkan dengan menggunakan template Azure Resource Manager (ARM)
Mulailah dengan menyalin JSON berikut ke dalam file baru bernama azuredeploy.json
. Di Azure Cloud Shell, Anda bisa menggunakan Visual Studio Code untuk membuat file di direktori kerja:
code azuredeploy.json
Anda dapat menentukan properti registri kontainer Azure di template ARM dengan menyertakan properti imageRegistryCredentials
dalam definisi grup kontainer. Contohnya, Anda dapat menentukan informasi masuk registri secara langsung:
Catatan
Ini bukan template ARM yang komprehensif, melainkan contoh bagaimana bagian resources
dari template yang lengkap akan terlihat.
{
"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"
}
}
Menyebarkan templat
Sebarkan template Resource Manager Anda dengan perintah berikut:
az deployment group create --resource-group myResourceGroup --template-file azuredeploy.json
Menyebarkan dengan menggunakan Azure CLI
Untuk menyebarkan grup kontainer menggunakan identitas terkelola untuk mengautentikasi penarikan gambar melalui Azure CLI, gunakan perintah berikut, memastikan bahwa <dns-label>
Anda unik secara global:
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>
Menyebarkan di jaringan virtual menggunakan Azure CLI
Untuk menyebarkan grup kontainer ke jaringan virtual menggunakan identitas terkelola untuk mengautentikasi penarikan gambar dari ACR yang berjalan di belakang titik akhir privat melalui Azure CLI, gunakan perintah berikut:
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
Untuk informasi selengkapnya tentang cara menyebarkan ke jaringan virtual, lihat Menyebarkan instans kontainer ke jaringan virtual Azure.
Menyebarkan grup multi-kontainer di jaringan virtual menggunakan YAML dan Azure CLI
Untuk menyebarkan grup multi-kontainer ke jaringan virtual menggunakan identitas terkelola untuk mengautentikasi penarikan gambar dari ACR yang berjalan di belakang titik akhir privat melalui Azure CLI, Anda dapat menentukan konfigurasi grup kontainer dalam file YAML. Kemudian loloskan file YAML sebagai parameter ke perintah.
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
Untuk informasi selengkapnya tentang cara menyebarkan ke grup multi-kontainer, lihat Menyebarkan grup multi-kontainer.
Membersihkan sumber daya
Untuk menghapus semua sumber daya dari langganan Azure Anda, hapus grup sumber daya:
az group delete --name myResourceGroup