Menyebarkan ke Azure Container Instances dari Azure Container Registry menggunakan perwakilan layanan

Microsoft Azure Container Registry adalah layanan registri kontainer terkelola berbasis Microsoft Azure yang digunakan untuk menyimpan gambar kontainer Docker pribadi. Artikel ini menjelaskan cara menarik gambar kontainer yang disimpan dalam registri kontainer Microsoft Azure ketika menyebarkan Microsoft Azure Container Instances. Salah satu cara untuk mengonfigurasi akses registri adalah dengan membuat perwakilan layanan dan kata sandi Microsoft Entra, dan menyimpan kredensial masuk di brankas kunci Azure.

Prasyarat

Registri kontainer Microsoft Azure: Anda memerlukan registri kontainer Microsoft Azure--dan minimal satu gambar kontainer di registri--untuk menyelesaikan langkah-langkah dalam artikel ini. Jika Anda memerlukan registri, lihat Membuat registri kontainer menggunakan Microsoft Azure CLI.

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

Konfigurasikan autentikasi registri

Dalam skenario produksi di mana Anda menyediakan akses ke layanan dan aplikasi “tanpa kepala”, disarankan untuk mengonfigurasi akses registri dengan menggunakan perwakilan layanan. Perwakilan layanan memungkinkan Anda menyediakan kontrol akses berbasis peran Microsoft Azure (Microsoft Azure RBAC) ke gambar kontainer Anda. Contohnya, Anda dapat mengonfigurasi perwakilan layanan dengan akses hanya tarik ke registri.

Microsoft Azure Container Registry menyediakan opsi autentikasi tambahan.

Di bagian berikut, Anda membuat brankas kunci Microsoft Azure dan perwakilan layanan, dan menyimpan informasi masuk perwakilan layanan di brankas.

Buat brankas kunci

Jika Anda belum memiliki brankas di Azure Key Vault, buat dengan Azure CLI menggunakan perintah berikut.

Perbarui variabel RES_GROUP dengan nama grup sumber daya yang ada untuk membuat brankas kunci, dan ACR_NAME dengan nama registri kontainer Anda. Agar ringkas, perintah dalam artikel ini mengasumsikan bahwa registri, brankas kunci, dan instans kontainer Anda semuanya dibuat dalam grup sumber daya yang sama.

Tentukan nama untuk brankas kunci baru Anda di AKV_NAME. Nama brankas harus unik dalam Microsoft Azure dan panjangnya harus 3-24 karakter alfanumerik, dimulai dengan huruf, diakhiri dengan huruf atau digit, dan tidak boleh terdiri atas tanda hubung berturut-turut.

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

Membuat perwakilan layanan dan menyimpan informasi masuk

Anda sekarang perlu membuat perwakilan layanan dan menyimpan informasi masuknya di brankas kunci.

Perintah berikut menggunakan az ad sp create-for-rbac untuk membuat perwakilan layanan, dan az keyvault secret set untuk menyimpan kata sandi perwakilan layanan di vault. Pastikan untuk mencatat appId perwakilan layanan saat pembuatan.

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

Argumen --role dalam perintah sebelumnya mengonfigurasi perwakilan layanan dengan peran acrpull, yang memberinya akses hanya pull ke registri. Untuk memberikan akses push dan pull, ubah --role argumen ke acrpush.

Selanjutnya, simpan appId perwakilan layanan di brankas, yaitu nama pengguna yang Anda berikan ke Microsoft Azure Container Registry untuk autentikasi.

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

Anda telah membuat brankas kunci Microsoft Azure dan menyimpan dua rahasia di dalamnya:

  • $ACR_NAME-pull-usr: ID perwakilan layanan, untuk digunakan sebagai nama pengguna registri kontainer.
  • $ACR_NAME-pull-pwd: Kata sandi perwakilan layanan, untuk digunakan sebagai kata sandi registri kontainer.

Anda sekarang dapat mereferensikan rahasia ini dengan nama ketika Anda atau aplikasi dan layanan Anda menarik gambar dari registri.

Menyebarkan kontainer dengan Microsoft Azure CLI

Sekarang setelah informasi masuk perwakilan layanan disimpan sebagai rahasia Microsoft Azure Key Vault, aplikasi dan layanan Anda dapat menggunakannya untuk mengakses registri pribadi Anda.

Pertama, dapatkan nama server login registri dengan menggunakan perintah az acr show. Nama server login semuanya huruf kecil dan mirip dengan myregistry.azurecr.io .

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

Jalankan perintah az container create berikut untuk menyebarkan instans kontainer. Perintah ini menggunakan informasi masuk perwakilan layanan yang disimpan di Microsoft Azure Key Vault untuk mengautentikasi ke registri kontainer, dan menganggap Anda sebelumnya telah mendorong gambar aci-helloworld ke registri Anda. Perbarui nilai --image jika Anda ingin menggunakan gambar yang berbeda dari registri Anda.

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

Nilai --dns-name-label harus unik dalam Microsoft Azure, sehingga perintah sebelumnya menambahkan nomor acak ke label nama DNS kontainer. Output dari perintah menampilkan nama domain kontainer yang sepenuhnya memenuhi syarat (FQDN), contohnya:

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

Setelah kontainer berhasil dimulai, Anda dapat mengarahkan ke FQDN di browser Anda untuk memverifikasi aplikasi berjalan dengan sukses.

Menyebarkan template Microsoft Azure Resource Manager

Anda dapat menentukan properti registri kontainer Microsoft Azure dalam template Microsoft Azure Resource Manager dengan menyertakan properti imageRegistryCredentials dalam definisi grup kontainer. Contohnya, Anda dapat menentukan informasi masuk registri secara langsung:

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

Untuk pengaturan grup kontainer lengkap, lihat Referensi template Manajer Sumber Daya.

Untuk detail tentang referensi rahasia Microsoft Azure Key Vault dalam template Manajer Sumber Daya, lihat Gunakan Microsoft Azure Key Vault untuk meneruskan nilai parameter aman selama penyebaran.

Sebarkan dengan portal Microsoft Azure

Jika Anda memelihara gambar kontainer dalam registri kontainer Microsoft Azure, Anda dapat mudah membuat kontainer di Microsoft Azure Container Instances menggunakan portal Microsoft Azure. Saat menggunakan portal untuk menyebarkan instans kontainer dari registri kontainer, Anda harus mengaktifkan akun admin registri. Akun admin dideasain agar satu pengguna dapat mengakses registri, terutama untuk tujuan pengujian.

  1. Di portal Azure, navigasi ke registri kontainer Anda.

  2. Untuk mengonfirmasi bahwa akun admin diaktifkan, pilih Tombol akses, dan di bawah Pengguna admin pilih Aktifkan.

  3. Pilih Repositori, lalu pilih repositori yang ingin Anda sebarkan, klik kanan tag untuk gambar kontainer yang ingin Anda sebarkan, dan pilih Jalankan instans.

  4. Masukkan nama untuk kontainer dan nama untuk grup sumber daya. Anda juga dapat mengubah nilai default jika mau.

    Create menu for Azure Container Instances

  5. Setelah penyebaran selesai, Anda dapat mengarahkan ke grup kontainer dari panel pemberitahuan untuk menemukan alamat IP dan properti lainnya.

    Details view for Azure Container Instances container group

Langkah berikutnya

Untuk informasi selengkapnya tentang autentikasi Microsoft Azure Container Registry, lihat Mengautentikasi dengan registri kontainer Microsoft Azure.