Perwakilan layanan dengan Azure Kubernetes Services (AKS)

Kluster AKS memerlukan perwakilan layanan Microsoft Entra atau identitas terkelola untuk membuat dan mengelola sumber daya Azure lainnya secara dinamis, seperti Azure Load Balancer atau Azure Container Registry (ACR).

Catatan

Sebaiknya gunakan identitas terkelola untuk mengautentikasi dengan sumber daya lain di Azure, dan merupakan metode autentikasi default untuk kluster AKS Anda. Untuk informasi selengkapnya tentang menggunakan identitas terkelola dengan kluster Anda, lihat Menggunakan identitas terkelola yang ditetapkan sistem.

Artikel ini menunjukkan kepada Anda cara membuat dan menggunakan perwakilan layanan untuk kluster AKS Anda.

Sebelum Anda mulai

Untuk membuat perwakilan layanan Microsoft Entra, Anda harus memiliki izin untuk mendaftarkan aplikasi dengan penyewa Microsoft Entra Anda dan untuk menetapkan aplikasi ke peran dalam langganan Anda. Jika Anda tidak memiliki izin yang diperlukan, Anda perlu meminta ID Microsoft Entra atau administrator langganan untuk menetapkan izin yang diperlukan atau membuat perwakilan layanan untuk Anda gunakan dengan kluster AKS Anda.

Jika Anda menggunakan perwakilan layanan dari penyewa Microsoft Entra yang berbeda, ada pertimbangan lain sekeliling izin yang tersedia saat Anda menyebarkan kluster. Anda mungkin tidak memiliki izin yang tepat untuk membaca dan menulis informasi direktori. Untuk informasi selengkapnya, lihat Apa saja izin pengguna default di ID Microsoft Entra?

Prasyarat

  • Jika menggunakan Azure CLI, Anda memerlukan Azure CLI versi 2.0.59 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.
  • Jika menggunakan Azure PowerShell, Anda memerlukan Azure PowerShell versi 5.0.0 atau yang lebih baru. Jalankan Get-InstalledModule -Name Az untuk menemukan versinya. Jika Anda perlu memasang atau melakukan peningkatan, lihat Modul pemasangan Azure Az PowerShell.

Membuat pokok layanan secara manual

  1. Buat perwakilan layanan menggunakan az ad sp create-for-rbac perintah .

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    Output Anda harus mirip dengan contoh output berikut:

    {
      "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "e763725a-5eee-40e8-a466-dc88d980f415",
      "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
    }
    
  2. Salin nilai untuk appId dan password dari output. Anda menggunakan ini saat membuat kluster AKS di bagian berikutnya.

Tentukan pokok layanan untuk kluster AKS

  • Gunakan perwakilan layanan yang ada untuk kluster AKS baru menggunakan az aks create perintah dan gunakan --service-principal parameter dan --client-secret untuk menentukan appId dan password dari output yang Anda terima di bagian sebelumnya.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password>
    

    Catatan

    Jika Anda menggunakan perwakilan layanan yang ada dengan rahasia yang disesuaikan, pastikan rahasia tidak lebih dari 190 byte.

Mendelegasikan akses ke sumber daya Azure lainnya

Anda dapat menggunakan perwakilan layanan untuk kluster AKS untuk mengakses sumber daya lain. Misalnya, jika Anda ingin menerapkan kluster AKS ke subnet jaringan virtual Azure yang ada atau menyambungkan ke Azure Container Registry (ACR), Anda perlu mendelegasikan akses ke sumber daya tersebut ke perwakilan layanan. Izin yang diberikan ke kluster menggunakan identitas terkelola yang ditetapkan sistem mungkin memerlukan waktu hingga 60 menit untuk terisi.

  • Buat penetapan peran menggunakan az role assignment create perintah . Tetapkan appId ke lingkup tertentu, seperti grup sumber daya atau sumber daya jaringan virtual. Peran menentukan izin apa yang dimiliki perwakilan layanan pada sumber daya.

    Catatan

    --scope untuk sumber daya harus berupa ID sumber daya lengkap, seperti /subscriptions/<guid>/resourceGroups/myResourceGroup atau /subscriptions/<guid>/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

    az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor
    

Bagian berikut ini merinci delegasi umum yang mungkin perlu Anda buat.

Azure Container Registry

Jika Anda menggunakan Azure Container Registry (ACR) sebagai penyimpanan gambar kontainer, Anda perlu memberikan izin kepada perwakilan layanan untuk kluster AKS Anda untuk membaca dan menarik gambar. Sebaiknya gunakan az aks create perintah atau az aks update untuk berintegrasi dengan registri dan tetapkan peran yang sesuai untuk perwakilan layanan. Untuk langkah terperinci, lihat Mengautentikasi dengan Azure Container Registry dari Azure Kubernetes Service.

Jaringan

Anda dapat menggunakan jaringan tingkat lanjut di mana jaringan virtual dan subnet atau alamat IP publik berada di grup sumber daya lain. Tetapkan peran bawaan Kontributor Jaringan pada subnet dalam jaringan virtual. Sebagai alternatif, Anda dapat membuat peran kustom dengan izin untuk mengakses sumber daya jaringan dalam grup sumber daya tersebut. Untuk informasi selengkapnya, lihat izin layanan AKS.

Penyimpanan

Jika Anda perlu mengakses sumber daya disk yang ada di grup sumber daya lain, tetapkan salah satu kumpulan izin peran berikut:

  • Buat peran kustom dan tentukan izin peran Microsoft.Compute/disks/read dan Microsoft.Compute/disks/write , atau
  • Tetapkan peran bawaan Kontributor Komputer Virtual pada grup sumber daya.

Azure Container Instances

Jika Anda menggunakan Kubelet Virtual untuk berintegrasi dengan AKS dan memilih untuk menjalankan Azure Container Instances (ACI) dalam grup sumber daya yang terpisah dari kluster AKS, perwakilan layanan AKS harus diberi izin Kontributor pada grup sumber daya ACI.

Pertimbangan lain

Saat menggunakan AKS dan perwakilan layanan Microsoft Entra, pertimbangkan hal berikut:

  • Perwakilan layanan untuk Kubernetes adalah bagian dari konfigurasi kluster, tetapi jangan gunakan identitas ini untuk menyebarkan kluster.
  • Secara default, mandat perwakilan layanan berlaku selama satu tahun. Anda dapat kapan saja memperbarui atau memutar mandat perwakilan layanan.
  • Setiap perwakilan layanan dikaitkan dengan aplikasi Microsoft Entra. Anda dapat mengaitkan perwakilan layanan untuk kluster Kubernetes dengan nama aplikasi Microsoft Entra yang valid (misalnya: https://www.contoso.org/example). URL untuk aplikasi tidak harus berupa titik akhir yang sebenarnya.
  • Saat Anda menentukan ID Klien perwakilan layanan, gunakan nilai appId.
  • Pada VM simpul agen di kluster Kubernetes, kredensial perwakilan layanan disimpan dalam /etc/kubernetes/azure.json file.
  • Saat Anda menghapus kluster AKS yang dibuat menggunakan az aks create perintah , perwakilan layanan yang dibuat tidak dihapus secara otomatis.
    • Untuk menghapus perwakilan layanan, kueri untuk servicePrincipalProfile.clientId kluster Anda dan hapus menggunakan az ad sp delete perintah . Ganti nilai untuk -g parameter untuk nama dan -n parameter grup sumber daya untuk nama kluster:

      az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
      

Pemecahan Masalah

Azure CLI menyimpan kredensial perwakilan layanan untuk kluster AKS. Jika kredensial ini kedaluwarsa, Anda mengalami kesalahan selama penyebaran kluster AKS. Jika Anda menjalankan az aks create perintah dan menerima pesan kesalahan yang mirip dengan yang berikut ini, itu mungkin menunjukkan masalah dengan kredensial perwakilan layanan yang di-cache:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

Anda dapat memeriksa tanggal kedaluwarsa kredensial perwakilan layanan Anda menggunakan az ad app credential list perintah dengan "[].endDateTime" kueri.

az ad app credential list --id <app-id> --query "[].endDateTime" -o tsv

Waktu kedaluwarsa default untuk mandat perwakilan layanan adalah satu tahun. Jika kredensial Anda lebih dari satu tahun, Anda dapat mengatur ulang kredensial yang ada atau membuat perwakilan layanan baru.

Pemecahan masalah Umum Azure CLI

Azure CLI dapat berjalan di beberapa lingkungan shell, tetapi dengan sedikit variasi format. Jika Anda mendapatkan hasil yang tidak diharapkan dengan perintah Azure CLI, lihat Cara berhasil menggunakan Azure CLI.

Langkah berikutnya

Untuk informasi selengkapnya tentang perwakilan layanan Microsoft Entra, lihat Objek perwakilan aplikasi dan layanan.

Untuk informasi mengenai cara memperbarui mandat, lihat Memperbarui atau memutar mandat untuk perwakilan layanan di AKS.