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.
  • 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