Menyebarkan CanIPull ke kluster Azure Kubernetes Service (AKS)

CanIPull adalah alat diagnostik untuk Azure Kubernetes Service (AKS). Sebarkan dengan menggunakan Azure Copilot atau manifes Kubernetes lengkap dalam artikel ini. CanIPull membaca konfigurasi identitas kluster dari satu simpul yang dipilih, memeriksa resolusi DNS untuk server autentikasi Azure Container Registry (ACR), dan memvalidasi pertukaran token ACR awal.

Artikel ini menunjukkan cara menjalankan CanIPull dengan menggunakan Azure Copilot atau manifes Kubernetes. CanIPull v0.1.0 berjalan pada satu node LINUX AMD64 sekali waktu. Ulangi pemeriksaan pada node lain yang didukung untuk membandingkan konektivitas atau konfigurasinya.

Important

CanIPull bukan uji tarik gambar end-to-end. Hasil yang berhasil tidak mengonfirmasi akses ke repositori, manifes gambar, atau lapisan gambar karena CanIPull tidak memilih atau menarik gambar.

Prasyarat

Sebelum memulai, Anda memerlukan:

  • Kluster AKS yang ada dengan setidaknya satu node LINUX AMD64.
  • Instans ACR yang sudah ada yang ingin Anda uji.

Untuk menyebarkan CanIPull dengan Azure Copilot, Anda juga memerlukan akses ke Azure Copilot di portal Azure.

Untuk menyebarkan CanIPull secara manual, Anda juga perlu:

  • Azure CLI sudah terpasang.
  • Sesi Azure CLI terautentikasi dengan izin untuk mendapatkan kredensial pengguna untuk kluster AKS dan membaca instans ACR.
  • kubectl dikonfigurasi untuk menyambungkan ke kluster AKS Anda.
  • Izin Kubernetes untuk melihat daftar node pada cakupan kluster; membuat, melihat, melihat daftar, memantau, dan menghapus pod di namespace default; serta melihat log pod di namespace default.

Menyebarkan CanIPull dengan Azure Copilot

Azure Copilot dapat memilih kluster AKS, node LINUX AMD64, dan server autentikasi ACR, lalu menyebarkan CanIPull untuk Anda. Diagnostik memeriksa resolusi DNS dan pertukaran token ACR dari simpul yang dipilih. Ini tidak memilih atau mengakses repositori atau gambar.

  1. Di portal Azure, buka Copilot.
  2. Masukkan salah satu perintah berikut:
  • Help me deploy CanIPull to my AKS cluster.
  • Can an AMD64 Linux node in my AKS cluster resolve and authenticate to a specific Azure Container Registry?
  • Help me test ACR token exchange from an AMD64 Linux node in my AKS cluster.
  1. Pilih kluster AKS dan node AMD64 Linux tempat Anda ingin CanIPull dijalankan.
  2. Pilih instans ACR yang server autentikasinya ingin Anda gunakan untuk pemeriksaan pertukaran DNS dan token.
  3. Tinjau pilihan, lalu konfirmasi penerapan.
  4. Setelah penyebaran selesai, ikuti perintah untuk membuka panel Jalankan perintah .
  5. Tinjau log CanIPull untuk dns, identitas kluster, dan hasil pertukaran token ACR.

Untuk informasi selengkapnya tentang pengalaman ini, lihat Menggunakan CanIPull dengan Azure Copilot.

Menyebarkan CaniPull secara manual

Untuk menyebarkan CanIPull secara manual, sambungkan ke kluster, pilih node Linux AMD64, dapatkan server login ACR yang sepenuhnya memenuhi syarat, simpan manifes pod lengkap yang disediakan di bagian ini sebagai canipull.yaml, dan jalankan kubectl apply --filename canipull.yaml. Pod sekali pakai memungkinkan Anda memilih node target dan memeriksa log diagnostik secara langsung melalui kubectl.

Important

Manifes dipasang /etc/kubernetes/azure.json dari simpul yang dipilih. File ini berisi konfigurasi identitas kluster sensitif. Sebarkan pod hanya jika Anda adalah administrator kluster tepercaya. Jangan meningkatkan verbositas CanIPull karena tingkat yang lebih tinggi dapat mencetak token akses. Hapus pod segera setelah Anda menyelesaikan pengujian.

Sambungkan ke kluster dan pilih simpul

  1. Atur variabel untuk kluster AKS dan instans ACR.

    RESOURCE_GROUP=<resource-group>
    CLUSTER_NAME=<aks-cluster-name>
    ACR_NAME=<acr-name>
    
  2. Dapatkan kredensial kluster.

    az aks get-credentials \
      --resource-group $RESOURCE_GROUP \
      --name $CLUSTER_NAME
    
  3. Dapatkan server masuk ACR. CanIPull mengharapkan nama server login lengkap, seperti myregistry.azurecr.io, bukan nama sumber daya ACR.

    ACR_LOGIN_SERVER=$(az acr show \
      --name $ACR_NAME \
      --query loginServer \
      --output tsv)
    
    echo $ACR_LOGIN_SERVER
    
  4. Cantumkan simpul AMD64 Linux dan pilih simpul tempat Anda ingin menjalankan pemeriksaan diagnostik. CanIPull v0.1.0 hanya mendukung simpul AMD64.

    kubectl get nodes \
      --selector kubernetes.io/os=linux,kubernetes.io/arch=amd64 \
      --output wide
    

Membuat dan menyebarkan manifes CanIPull lengkap

  1. Salin manifes lengkap ke dalam file bernama canipull.yaml. Ganti <target-linux-node> dan <acr-login-server> dengan nama node dan server login ACR dari bagian sebelumnya. Manifest mengikat CanIPull ke node yang dipilih, menonaktifkan pemasangan token akun layanan dan eskalasi hak istimewa, serta memasang konfigurasi node yang diperlukan dalam mode hanya baca.

    apiVersion: v1
    kind: Pod
    metadata:
      name: canipull
      namespace: default
      labels:
        app: canipull
    spec:
      automountServiceAccountToken: false
      nodeName: <target-linux-node>
      restartPolicy: Never
      containers:
        - name: canipull
          image: mcr.microsoft.com/aks/canipull:v0.1.0
          imagePullPolicy: IfNotPresent
          args:
            - <acr-login-server>
          securityContext:
            allowPrivilegeEscalation: false
            capabilities:
              drop:
                - ALL
            readOnlyRootFilesystem: true
          volumeMounts:
            - name: azure-config
              mountPath: /etc/kubernetes/azure.json
              readOnly: true
      volumes:
        - name: azure-config
          hostPath:
            path: /etc/kubernetes/azure.json
            type: File
    
  2. Buat pod.

    kubectl apply --filename canipull.yaml
    
  3. Tunggu hingga pod selesai.

    kubectl get pod canipull --watch
    

    Tekan Ctrl+C saat status pod berubah menjadi Completed atau Error.

Meninjau hasil CanIPull

Lihat output diagnostik.

kubectl logs canipull

Pengujian yang berhasil mencakup hasil berikut:

  • Server autentikasi ACR diselesaikan melalui DNS.
  • CanIPull membaca konfigurasi Azure dari simpul.
  • Identitas kubelet klaster atau prinsipal layanan dapat melakukan autentikasi.
  • ACR menerima pertukaran token awal.

Hasil ini hanya mengonfirmasi bahwa simpul yang dipilih dapat menyelesaikan server autentikasi ACR dan bahwa identitas kluster dapat menyelesaikan pertukaran token awal. CanIPull tidak menarik gambar atau memvalidasi akses ke repositori, manifes gambar, atau lapisan gambar.

Pesan keberhasilan akhir alat ini menggunakan redaksi yang lebih luas daripada ruang lingkup pengujian dan menyerupai keluaran berikut:

Your cluster can pull images from <acr-login-server>!

Untuk memverifikasi penarikan gambar end-to-end, sebarkan beban kerja yang mereferensikan gambar di repositori target.

Jika pengujian gagal, tinjau baris log yang ditandai FAILED. Penyebab umumnya meliputi:

  • Server autentikasi ACR tidak dapat di-resolve dari node yang dipilih.
  • Simpul yang dipilih tidak berisi /etc/kubernetes/azure.json.
  • Kredensial identitas kluster tidak valid.
  • ACR menolak pertukaran token untuk identitas kubelet atau perwakilan layanan.

Jika pertukaran token gagal karena identitas tidak berwenang untuk mengakses ACR, lihat Mengautentikasi dengan ACR dari AKS.

Membersihkan sumber daya

Hapus pod CanIPull dan hapus aksesnya ke konfigurasi node.

kubectl delete pod canipull