Autentikasikan dengan Azure Container Registry dari Azure Kubernetes Service
Saat menggunakan Azure Container Registry (ACR) dengan Azure Kubernetes Service (AKS), Anda perlu membuat mekanisme autentikasi. Mengonfigurasi izin yang diperlukan antara ACR dan AKS dapat dicapai menggunakan Azure CLI, Azure PowerShell, dan portal Azure. Artikel ini menyediakan contoh untuk mengonfigurasi autentikasi antara layanan Azure ini menggunakan Azure CLI atau Azure PowerShell.
Integrasi AKS ke ACR menetapkan peran AcrPull ke identitas terkelola Azure Active Directory (Azure AD) yang terkait dengan kumpulan agen di kluster AKS Anda. Untuk informasi selengkapnya tentang identitas terkelola AKS, lihat Ringkasan identitas terkelola.
Penting
Ada masalah latensi dengan grup Azure Active Directory saat melampirkan ACR. Jika peran AcrPull diberikan ke grup Azure AD dan identitas kubelet ditambahkan ke grup untuk menyelesaikan konfigurasi RBAC, mungkin ada penundaan sebelum grup RBAC berlaku. Jika Anda menjalankan otomatisasi yang mengharuskan konfigurasi RBAC selesai, kami sarankan Anda menggunakan Bawa identitas kubelet Anda sendiri sebagai solusinya. Anda dapat membuat identitas yang ditetapkan pengguna sebelumnya, menambahkannya ke grup Azure AD, lalu menggunakan identitas sebagai identitas kubelet untuk membuat kluster AKS. Ini memastikan identitas ditambahkan ke grup Azure AD sebelum token dihasilkan oleh kubelet, yang menghindari masalah latensi.
Catatan
Artikel ini membahas autentikasi otomatis antara AKS dan ACR. Jika Anda perlu menarik gambar dari registri eksternal privat, gunakan gambar tarik rahasia.
Sebelum Anda mulai
- Anda harus memiliki peran Pemilik, administrator akun Azure, atau administrator bersama Azure di langganan Azure Anda.
- Untuk menghindari perlunya salah satu peran ini, Anda dapat menggunakan identitas terkelola yang ada untuk mengautentikasi ACR dari AKS. Untuk informasi selengkapnya, lihat Menggunakan identitas terkelola Azure untuk mengautentikasi ke ACR.
- Jika Anda menggunakan Azure CLI, artikel ini mengharuskan Anda menjalankan Azure CLI versi 2.7.0 atau yang lebih baru. Jalankan
az --version
untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Pasang CLI Azure. - Jika Anda menggunakan Azure PowerShell, artikel ini mengharuskan Anda menjalankan Azure PowerShell versi 5.9.0 atau yang lebih baru. Jalankan
Get-InstalledModule -Name Az
untuk menemukan versinya. Jika Anda perlu menginstal atau meningkatkan, lihat Install modul Azure PowerShell. - Contoh dan sintaks untuk menggunakan Terraform untuk mengonfigurasi ACR dapat ditemukan dalam referensi Terraform.
Buat kluster AKS baru dengan integrasi ACR
Anda dapat menyiapkan integrasi AKS dan ACR selama pembuatan kluster AKS Anda. Untuk memungkinkan kluster AKS berinteraksi dengan ACR, identitas terkelola Azure AD digunakan.
Membuat ACR
Jika Anda belum memiliki ACR, buat ACR menggunakan perintah berikut.
# Set this variable to the name of your ACR. The name must be globally unique.
# Connected registry name must use only lowercase
MYACR=mycontainerregistry
az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
Buat kluster AKS baru dan integrasikan dengan ACR yang ada
Jika Anda sudah memiliki ACR, gunakan perintah berikut untuk membuat kluster AKS baru dengan integrasi ACR. Perintah ini memungkinkan Anda untuk mengotorisasi ACR yang ada di langganan Anda dan mengonfigurasi peran AcrPull yang sesuai untuk identitas terkelola. Berikan nilai yang valid untuk parameter Anda di bawah ini.
# Set this variable to the name of your ACR. The name must be globally unique.
# Connected registry name must use only lowercase
MYACR=mycontainerregistry
# Create an AKS cluster with ACR integration.
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Atau, Anda dapat menentukan nama ACR menggunakan ID sumber daya ACR menggunakan format berikut:
/subscriptions/\<subscription-id\>/resourceGroups/\<resource-group-name\>/providers/Microsoft.ContainerRegistry/registries/\<name\>
Catatan
Jika Anda menggunakan ACR yang terletak di langganan yang berbeda dari kluster AKS Anda, gunakan ID sumber daya ACR saat melampirkan atau melepaskan dari kluster.
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
Perintah ini mungkin memerlukan waktu beberapa menit untuk diselesaikan.
Konfigurasikan integrasi ACR untuk kluster AKS yang ada
Melampirkan ACR ke kluster AKS
Integrasikan ACR yang ada dengan kluster AKS yang ada menggunakan --attach-acr
parameter dan nilai yang valid untuk acr-name atau acr-resource-id.
# Attach using acr-name
az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-name>
# Attach using acr-resource-id
az aks update -n myAKSCluster -g myResourceGroup --attach-acr <acr-resource-id>
Catatan
az aks update --attach-acr
Perintah menggunakan izin pengguna yang menjalankan perintah untuk membuat penetapan peran ACR. Peran ini ditetapkan ke identitas terkelola kubelet . Untuk informasi selengkapnya tentang identitas terkelola AKS, lihat Ringkasan identitas terkelola.
Melepaskan ACR dari kluster AKS
Hapus integrasi antara ACR dan kluster AKS menggunakan --detach-acr
parameter dan nilai yang valid untuk acr-name atau acr-resource-id.
# Detach using acr-name
az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-name>
# Detach using acr-resource-id
az aks update -n myAKSCluster -g myResourceGroup --detach-acr <acr-resource-id>
Bekerja sama dengan ACR & AKS
Impor gambar ke ACR Anda
Jalankan perintah berikut untuk mengimpor gambar dari Docker Hub ke ACR Anda.
az acr import -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Sebarkan gambar sampel dari ACR ke AKS
Pastikan Anda memiliki informasi masuk AKS yang tepat.
az aks get-credentials -g myResourceGroup -n myAKSCluster
Buat file bernama acr-nginx.yaml menggunakan sampel YAML di bawah ini. Ganti acr-name dengan nama ACR Anda.
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx0-deployment
labels:
app: nginx0-deployment
spec:
replicas: 2
selector:
matchLabels:
app: nginx0
template:
metadata:
labels:
app: nginx0
spec:
containers:
- name: nginx
image: <acr-name>.azurecr.io/nginx:v1
ports:
- containerPort: 80
Setelah membuat file, jalankan penyebaran berikut di kluster AKS Anda.
kubectl apply -f acr-nginx.yaml
Anda dapat memantau penyebaran dengan menjalankan kubectl get pods
.
kubectl get pods
Output harus menunjukkan dua pod yang sedang berjalan.
NAME READY STATUS RESTARTS AGE
nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s
nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Pemecahan Masalah
- Jalankan
az aks check-acr
perintah untuk memvalidasi bahwa registri dapat diakses dari kluster AKS. - Pelajari selengkapnya tentang pemantauan ACR.
- Pelajari selengkapnya tentang kesehatan ACR.