Autentikasikan dengan Azure Container Registry (ACR) dari Azure Kubernetes Service(AKS)

Saat menggunakan Azure Container Registry (ACR) dengan Azure Kubernetes Service (AKS), Anda perlu membuat mekanisme autentikasi. Anda dapat mengonfigurasi izin yang diperlukan antara ACR dan AKS menggunakan Azure CLI, Azure PowerShell, atau 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 ID Microsoft Entra 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 Microsoft Entra saat melampirkan ACR. Jika peran AcrPull diberikan ke grup Microsoft Entra 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 Microsoft Entra, lalu menggunakan identitas sebagai identitas kubelet untuk membuat kluster AKS. Ini memastikan identitas ditambahkan ke grup Microsoft Entra 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 memerlukan 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 Memasang Azure CLI.
  • 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.

Membuat ACR baru

  • Jika Anda belum memiliki ACR, buat ACR menggunakan az acr create perintah . Contoh berikut mengatur MYACR variabel ke nama ACR, mycontainerregistry, dan menggunakan variabel untuk membuat registri. Nama ACR Anda harus unik secara global dan hanya menggunakan huruf kecil.

    MYACR=mycontainerregistry
    
    az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
    

Buat kluster AKS baru dan integrasikan dengan ACR yang ada

  • Buat kluster AKS baru dan integrasikan dengan ACR yang ada menggunakan az aks create perintah dengan --attach-acr parameter . Perintah ini memungkinkan Anda untuk mengotorisasi ACR yang ada di langganan Anda dan mengonfigurasi peran AcrPull yang sesuai untuk identitas terkelola.

    MYACR=mycontainerregistry
    
    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Perintah ini mungkin perlu waktu beberapa menit untuk diselesaikan.

    Catatan

    Jika Anda menggunakan ACR yang terletak di langganan yang berbeda dari kluster AKS Anda atau lebih suka menggunakan ID sumber daya ACR alih-alih nama ACR, Anda dapat melakukannya menggunakan sintaks berikut:

    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
    

Mengonfigurasi integrasi ACR untuk kluster AKS yang ada

Melampirkan ACR ke kluster AKS yang ada

  • Integrasikan ACR yang ada dengan kluster AKS yang ada menggunakan az aks update perintah dengan--attach-acrparameter 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 az aks update perintah dengan--detach-acrparameter 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

  • Impor gambar dari Docker Hub ke ACR Anda menggunakan az acr import perintah .

    az acr import  -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
    

Sebarkan gambar sampel dari ACR ke AKS

  1. Pastikan Anda memiliki kredensial AKS yang tepat menggunakan az aks get-credentials perintah .

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Buat file bernama acr-nginx.yaml menggunakan contoh YAML berikut dan 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
    
  3. Jalankan penyebaran di kluster AKS Anda menggunakan kubectl apply perintah .

    kubectl apply -f acr-nginx.yaml
    
  4. Pantau penyebaran menggunakan kubectl get pods perintah .

    kubectl get pods
    

    Output harus menunjukkan dua pod yang sedang berjalan, seperti yang ditunjukkan dalam contoh output berikut:

    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

  • Validasi registri dapat diakses dari kluster AKS menggunakan az aks check-acr perintah .
  • Pelajari selengkapnya tentang pemantauan ACR.
  • Pelajari selengkapnya tentang kesehatan ACR.