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 menggunakanaad-pod-identity
. AzurePodIdentityException CRD dapat dikonfigurasi untuk menginformasikanaad-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 labelkubernetes.azure.com/managedby: aks
dalam namespace layanan kube-system harus dikecualikan dalamaad-pod-identity
dengan mengonfigurasi AzurePodIdentityException CRD.- Untuk informasi lebih lanjut, lihat Menonaktifkan aad-pod-identity untuk pod atau aplikasi tertentu.
- Untuk mengonfigurasi pengecualian, instal YAML pengecualian mikrofon.
- 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].
Buat grup sumber daya Azure menggunakan
az group create
perintah .az group create --name myResourceGroup --location westus2
Buat kluster AKS menggunakan
az aks create
perintah .az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
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 menjalankanaz 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 menggunakanaz 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 menggunakanaz 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 untukassign-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
Periksa versi CLI Anda menggunakan
az version
perintah .az version
Tingkatkan versi CLI Anda menggunakan
az upgrade
perintah .az upgrade
Mendapatkan identitas sarana kontrol saat ini untuk kluster AKS Anda
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" }
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
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" }
Perbarui kluster Anda dengan identitas yang ada menggunakan
az aks update
perintah . Pastikan Anda memberikan ID sumber daya identitas sarana kontrol untukassign-identity
dan identitas terkelola kubelet untukassign-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.