Menggunakan identitas terkelola di Azure Kubernetes Service (AKS)

kluster Azure Kubernetes Service (AKS) memerlukan identitas untuk mengakses sumber daya Azure seperti load balancer dan disk terkelola. Identitas ini dapat menjadi identitas terkelola atau perwakilan layanan. Identitas terkelola yang ditetapkan sistem secara otomatis dibuat saat Anda membuat kluster AKS. Identitas ini dikelola oleh platform Azure dan tidak mengharuskan Anda untuk menyediakan atau memutar rahasia apa pun. Untuk informasi selengkapnya tentang identitas terkelola di Azure AD, lihat Identitas terkelola untuk sumber daya Azure.

AKS tidak secara otomatis membuat perwakilan layanan, jadi Anda harus membuatnya. Kluster yang menggunakan perwakilan layanan akhirnya kedaluwarsa, dan perwakilan layanan harus diperbarui agar kluster tetap berfungsi. Mengelola perwakilan layanan menambah kompleksitas, sehingga lebih mudah untuk menggunakan identitas terkelola sebagai gantinya. Persyaratan izin yang sama berlaku untuk kedua perwakilan layanan dan identitas terkelola. Identitas terkelola menggunakan autentikasi berbasis sertifikat. Setiap kredensial identitas terkelola memiliki kedaluwarsa 90 hari dan digulirkan setelah 45 hari. AKS menggunakan jenis identitas terkelola yang ditetapkan sistem maupun pengguna dan identitas ini tidak dapat diubah.

Catatan

Jika Anda mempertimbangkan untuk menerapkan identitas yang dikelola pod Azure AD pada kluster AKS, sebaiknya tinjau ikhtisar identitas beban kerja Azure AD terlebih dahulu. Metode autentikasi ini menggantikan identitas yang dikelola pod Azure AD (pratinjau) dan merupakan metode yang direkomendasikan.

Sebelum Anda mulai

Pastikan Anda menginstal Azure CLI versi 2.23.0 atau yang lebih baru. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Pasang CLI Azure.

Untuk menggunakan identitas terkelola kubelet yang telah dibuat sebelumnya, Anda memerlukan Azure CLI versi 2.26.0 atau yang lebih baru terinstal.

Untuk memperbarui identitas sarana kontrol pada kluster yang ada, Anda memerlukan Azure CLI versi 2.49.0 atau yang lebih baru terinstal.

Batasan

  • Penyewa yang memindahkan atau memigrasikan kluster yang mendukung identitas terkelola tidak didukung.
  • Jika kluster telah Azure AD identitas yang dikelola pod (aad-pod-identity) diaktifkan, pod Node-Managed Identity (NMI) memodifikasi iptable simpul untuk mencegat panggilan ke titik akhir Azure Instance Metadata (IMDS). Konfigurasi ini berarti setiap permintaan yang dibuat ke titik akhir Metadata disadap oleh NMI, bahkan jika pod tidak menggunakan aad-pod-identity. AzurePodIdentityException CRD dapat dikonfigurasi untuk menginformasikan aad-pod-identity permintaan apa pun ke titik akhir Metadata yang berasal dari pod yang cocok dengan label yang ditentukan dalam CRD harus diproksi tanpa pemrosesan apa pun di NMI. Pod sistem dengan label kubernetes.azure.com/managedby: aks dalam namespace layanan kube-system harus dikecualikan dalam aad-pod-identity dengan mengonfigurasi AzurePodIdentityException CRD.
  • AKS tidak mendukung penggunaan identitas terkelola yang ditetapkan sistem jika menggunakan zona DNS privat kustom.

Ringkasan identitas terkelola

AKS menggunakan beberapa identitas terkelola untuk layanan bawaan dan add-on.

Identitas Nama Kasus penggunaan Izin default Bawa identitas Anda sendiri
Pesawat kontrol Nama Kluster AKS Digunakan oleh komponen sarana kontrol AKS untuk mengelola sumber daya kluster termasuk penyeimbang beban masuk dan IP publik yang dikelola AKS, Autoscaler Kluster, Disk Azure, File, driver Blob CSI. Peran kontributor untuk grup sumber daya Simpul Didukung
Kubelet Nama-kumpulan agen Kluster AKS Autentikasi dengan Azure Container Registry (ACR). N/A (untuk kubernetes v1.15+) Didukung
Add-on AzureNPM Tidak diperlukan identitas. T/A Tidak
Add-on Pemantauan jaringan AzureCNI Tidak diperlukan identitas. T/A Tidak
Add-on kebijakan azure (penjaga gerbang) Tidak diperlukan identitas. T/A Tidak
Add-on kebijakan azure Tidak diperlukan identitas. T/A Tidak
Add-on Calico Tidak diperlukan identitas. T/A Tidak
Add-on Dasbor Tidak diperlukan identitas. T/A Tidak
Add-on HTTPApplicationRouting Mengelola sumber daya jaringan yang diperlukan. Peran pembaca untuk grup sumber daya simpul, peran kontributor untuk zona DNS Tidak
Add-on Gateway aplikasi Ingress Mengelola sumber daya jaringan yang diperlukan. Peran kontributor untuk grup sumber daya simpul Tidak
Add-on omsagent Digunakan untuk mengirim metrik AKS ke Azure Monitor. Memantau peran Penerbit Metrik Tidak
Add-on Simpul-Virtual (ACIConnector) Mengelola sumber daya jaringan yang diperlukan untuk Azure Container Instances (ACI). Peran kontributor untuk grup sumber daya simpul Tidak
Proyek OSS aad-pod-identity Memungkinkan aplikasi mengakses sumber daya cloud dengan aman dengan Microsoft Azure Active Directory (Azure AD). T/A Langkah-langkah untuk memberikan izin pada konfigurasi Azure AD Pod Identity Role Assignment.

Mengaktifkan identitas terkelola pada kluster AKS baru

Catatan

AKS membuat identitas kubelet yang ditetapkan pengguna di grup sumber daya simpul jika Anda tidak [menentukan identitas terkelola kubelet Anda sendiri][Gunakan identitas terkelola kubelet yang telah dibuat sebelumnya].

  1. Buat grup sumber daya Azure menggunakan az group create perintah .

    az group create --name myResourceGroup --location westus2
    
  2. Buat kluster AKS menggunakan az aks create perintah .

    az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
    
  3. Dapatkan kredensial untuk mengakses kluster menggunakan az aks get-credentials perintah .

    az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    

Mengaktifkan identitas terkelola pada kluster AKS yang ada

  • Perbarui kluster AKS yang ada saat ini menggunakan perwakilan layanan untuk bekerja dengan identitas terkelola yang ditetapkan sistem menggunakan az aks update perintah .

    az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity
    

Setelah memperbarui kluster, sarana kontrol dan pod menggunakan identitas terkelola. kubelet terus menggunakan perwakilan layanan sampai Anda meningkatkan agentpool Anda. Anda dapat menggunakan az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only perintah pada simpul Anda untuk memperbarui ke identitas terkelola. Peningkatan kumpulan simpul menyebabkan waktu henti untuk kluster AKS Anda karena simpul di kumpulan simpul berkode/dikosongkan dan dicitrakan ulang.

Catatan

Ingatlah informasi berikut saat memperbarui kluster Anda:

  • Pembaruan hanya berfungsi jika ada pembaruan VHD untuk digunakan. Jika Anda menjalankan VHD terbaru, Anda harus menunggu hingga VHD berikutnya tersedia untuk melakukan pembaruan.

  • Azure CLI memastikan izin addon Anda diatur dengan benar setelah migrasi. Jika Anda tidak menggunakan Azure CLI untuk melakukan operasi migrasi, Anda perlu menangani izin identitas addon sendiri. Misalnya menggunakan templat Azure Resource Manager (ARM), lihat Menetapkan peran Azure menggunakan templat ARM.

  • Jika kluster Anda menggunakan --attach-acr untuk menarik dari gambar dari Azure Container Registry, Anda perlu menjalankan az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID> perintah setelah memperbarui kluster Anda agar kubelet yang baru dibuat digunakan untuk identitas terkelola mendapatkan izin untuk menarik dari ACR. Jika tidak, Anda tidak akan dapat menarik dari ACR setelah pembaruan.

Menambahkan penetapan peran untuk identitas sarana kontrol

Saat Anda membuat dan menggunakan VNet Anda sendiri, disk Azure terlampir, alamat IP statis, tabel rute, atau identitas kubelet yang ditetapkan pengguna di mana sumber daya berada di luar grup sumber daya simpul pekerja, Azure CLI menambahkan penetapan peran secara otomatis. Jika Anda menggunakan templat ARM atau metode lain, Anda perlu menggunakan ID Utama identitas terkelola kluster untuk melakukan penetapan peran.

Jika Anda tidak menggunakan Azure CLI, tetapi Anda menggunakan VNet Anda sendiri, disk Azure terlampir, alamat IP statis, tabel rute, atau identitas kubelet yang ditetapkan pengguna yang berada di luar grup sumber daya simpul pekerja, sebaiknya gunakan identitas sarana kontrol yang ditetapkan pengguna. Untuk identitas sarana kontrol yang ditetapkan sistem, kita tidak bisa mendapatkan ID identitas sebelum membuat kluster, yang menunda penetapan peran agar tidak berlaku.

Mendapatkan ID utama identitas sarana kontrol

  • Dapatkan ID utama identitas yang ada menggunakan az identity show perintah .

    az identity show --ids <identity-resource-id>
    

    Output Anda harus menyerupai contoh output berikut:

    {
      "clientId": "<client-id>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
      "location": "eastus",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Menambahkan penetapan peran

Untuk VNet, disk Azure terlampir, alamat IP statis, atau tabel rute di luar grup sumber daya simpul pekerja default, Anda perlu menetapkan Contributor peran pada grup sumber daya kustom.

  • Tetapkan Contributor peran pada grup sumber daya kustom menggunakan az role assignment create perintah .

    az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
    

Untuk identitas kubelet yang ditetapkan pengguna di luar grup sumber daya simpul pekerja default, Anda perlu menetapkan peran Operator Identitas Terkelola pada identitas kubelet untuk identitas sarana kontrol.

  • Tetapkan Managed Identity Operator peran pada identitas kubelet menggunakan az role assignment create perintah .

    az role assignment create --assignee  <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
    

Catatan

Mungkin perlu waktu hingga 60 menit agar izin yang diberikan ke identitas terkelola kluster Anda terisi.

Menggunakan identitas terkelola sarana kontrol Anda sendiri

Membuat kluster menggunakan identitas sarana kontrol yang ditetapkan pengguna

Identitas terkelola sarana kontrol kustom memungkinkan akses ke identitas yang ada sebelum pembuatan kluster. Fitur ini memungkinkan skenario seperti menggunakan VNet kustom atau outboundType UDR dengan identitas terkelola yang telah dibuat sebelumnya.

Catatan

Wilayah USDOD Central, USDOD East, dan USGov Iowa di cloud Azure US Government tidak didukung.

AKS membuat identitas kubelet yang ditetapkan pengguna di grup sumber daya simpul jika Anda tidak [menentukan identitas terkelola kubelet Anda sendiri][Gunakan identitas terkelola kubelet yang telah dibuat sebelumnya].

  • Jika Anda tidak memiliki identitas terkelola, buat identitas menggunakan az identity create perintah .

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Output Anda harus menyerupai contoh output berikut:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Catatan

Mungkin perlu waktu hingga 60 menit agar izin yang diberikan ke identitas terkelola kluster Anda terisi.

  • Sebelum membuat kluster, tambahkan penetapan peran untuk identitas sarana kontrol menggunakan az role assignment create perintah .

  • Buat kluster dengan identitas sarana kontrol yang ditetapkan pengguna.

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --docker-bridge-address 172.17.0.1/16 \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id>
    

Memperbarui identitas sarana kontrol pada kluster yang ada

  • Jika Anda tidak memiliki identitas terkelola, buat identitas menggunakan az identity create perintah .

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Output Anda harus menyerupai contoh output berikut:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  • Setelah membuat identitas, tambahkan penetapan peran untuk identitas sarana kontrol menggunakan az role assignment create perintah .

  • Perbarui kluster Anda dengan identitas yang ada menggunakan az aks update perintah . Pastikan Anda memberikan ID sumber daya identitas sarana kontrol untuk assign-identity.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> 
    

    Output Anda untuk pembaruan kluster yang berhasil menggunakan identitas terkelola kubelet Anda sendiri harus menyerupai contoh output berikut:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
    

Menggunakan identitas terkelola kubelet yang telah dibuat sebelumnya

Identitas kubelet memungkinkan akses ke identitas yang ada sebelum pembuatan kluster. Fitur ini memungkinkan skenario seperti koneksi ke ACR dengan identitas terkelola yang telah dibuat sebelumnya.

Batasan identitas kubelet yang telah dibuat sebelumnya

  • Hanya berfungsi dengan kluster terkelola yang ditetapkan pengguna.
  • Wilayah Tiongkok Timur dan Tiongkok Utara di Azure Tiongkok tidak didukung.

Buat identitas terkelola yang ditetapkan pengguna

Identitas terkelola sarana kontrol

  • Jika Anda tidak memiliki identitas terkelola sarana kontrol, buat identitas menggunakan az identity create.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Output Anda harus menyerupai contoh output berikut:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

identitas terkelola kubelet

  • Jika Anda tidak memiliki identitas terkelola kubelet, buat identitas menggunakan az identity create perintah .

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Output Anda harus menyerupai contoh output berikut:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", 
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Buat kluster menggunakan identitas kubelet yang ditetapkan pengguna

Sekarang Anda dapat membuat kluster AKS dengan identitas yang ada. Pastikan untuk memberikan ID sumber daya identitas sarana kontrol melalui assign-identity dan identitas yang dikelola kubelet melalui assign-kubelet-identity.

  • Buat kluster AKS dengan identitas Anda yang ada menggunakan az aks create perintah .

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --docker-bridge-address 172.17.0.1/16 \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Pembuatan kluster AKS yang sukses menggunakan identitas terkelola kubelet Anda sendiri harus menyerupai contoh output berikut:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Perbarui kluster yang ada menggunakan identitas kubelet

Peringatan

Memperbarui kumpulan simpul peningkatan identitas terkelola kubelet, yang menyebabkan waktu henti untuk kluster AKS Anda karena simpul di kumpulan simpul akan dikosongkan/dikosongkan dan dicitrakan ulang.

Catatan

Jika kluster Anda menggunakan --attach-acr untuk menarik dari gambar dari Azure Container Registry, Anda perlu menjalankan az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID> perintah setelah memperbarui kluster Anda agar kubelet yang baru dibuat digunakan untuk identitas terkelola mendapatkan izin untuk menarik dari ACR. Jika tidak, Anda tidak akan dapat mengambil data dari ACR setelah peningkatan.

Pastikan versi CLI Anda diperbarui

  1. Periksa versi CLI Anda menggunakan az version perintah .

    az version
    
  2. Tingkatkan versi CLI Anda menggunakan az upgrade perintah .

    az upgrade
    

Mendapatkan identitas sarana kontrol saat ini untuk kluster AKS Anda

  1. Konfirmasikan kluster AKS Anda menggunakan identitas sarana kontrol yang ditetapkan pengguna menggunakan az aks show perintah .

    az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
    

    Jika kluster Anda menggunakan identitas terkelola, output menunjukkan clientId dengan nilai msi. Kluster yang menggunakan perwakilan layanan menampilkan ID objek. Contohnya:

    {
      "clientId": "msi"
    }
    
  2. Setelah mengonfirmasi kluster Anda menggunakan identitas terkelola, temukan ID sumber daya identitas sarana kontrol menggunakan az aks show perintah .

    az aks show -g <RGName> -n <ClusterName> --query "identity"
    

    Untuk identitas sarana kontrol yang ditetapkan pengguna, output Anda akan terlihat mirip dengan contoh output berikut:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    

Perbarui kluster Anda dengan identitas kubelet

  1. Jika Anda tidak memiliki identitas terkelola kubelet, buat identitas menggunakan az identity create perintah .

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Output Anda harus menyerupai contoh output berikut:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity",
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  2. Perbarui kluster Anda dengan identitas yang ada menggunakan az aks update perintah . Pastikan Anda memberikan ID sumber daya identitas sarana kontrol untuk assign-identity dan identitas terkelola kubelet untuk assign-kubelet-identity.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Output Anda untuk pembaruan kluster yang berhasil menggunakan identitas terkelola kubelet Anda sendiri harus menyerupai contoh output berikut:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Langkah berikutnya

Gunakan templat Azure Resource Manager untuk membuat kluster yang mendukung identitas terkelola.