Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Identitas yang dikelola pod Microsoft Entra menggunakan primitif Azure Kubernetes Service (AKS) untuk mengaitkan identitas terkelola untuk sumber daya dan identitas Azure di ID Microsoft Entra dengan pod. Administrator membuat identitas dan pengikatan sebagai primitif Kubernetes yang memungkinkan pod mengakses sumber daya Azure yang mengandalkan ID Microsoft Entra sebagai penyedia identitas.
Identitas yang dikelola pod Microsoft Entra di AKS memiliki batasan berikut:
- Setiap kluster mendukung hingga 200 identitas yang dikelola pod.
- Setiap kluster mendukung hingga 200 pengecualian identitas yang dikelola pod.
- Identitas yang dikelola pod hanya didukung pada pool node Linux.
- Fitur ini hanya didukung pada kluster yang didukung oleh Virtual Machine Scale Sets.
Penting
Sebaiknya Anda meninjau Microsoft Entra Workload ID. Metode autentikasi ini menggantikan identitas yang dikelola oleh pod (pratinjau), yang terintegrasi dengan kemampuan asli Kubernetes untuk berfederasi dengan penyedia identitas eksternal atas nama aplikasi.
Identitas yang dikelola pod Microsoft Entra sumber terbuka (pratinjau) di Azure Kubernetes Service ditolak pada 24 Oktober 2022, dan proyek diarsipkan pada September 2023. Untuk informasi selengkapnya, lihat pada pemberitahuan penghentian layanan. Tambahan AKS Pod Identity yang Dikelola ditambal dan didukung hingga September 2025 untuk memungkinkan pelanggan beralih ke ID Beban Kerja Microsoft Entra.
Opsi mode operasi
Identitas yang dikelola pod Microsoft Entra mendukung dua mode operasi:
Mode Standar: Dalam mode ini, dua komponen berikut disebarkan ke kluster AKS:
Managed Identity Controller (MIC): MIC adalah pengontrol Kubernetes yang mengawasi perubahan pada pod, AzureIdentity, dan AzureIdentityBinding melalui Kubernetes API Server. Saat MIC mendeteksi perubahan yang relevan, MIC akan menambahkan atau menghapus AzureAssignedIdentity sesuai kebutuhan. Secara khusus, ketika pod dijadwalkan, MIC menetapkan identitas terkelola di Azure ke Set Skala Mesin Virtual dasar yang digunakan oleh node pool selama fase pembuatan. Ketika semua pod yang menggunakan identitas dihapus, sistem akan menghapus identitas dari Set Skala Mesin Virtual dari kluster node tersebut, kecuali jika identitas terkelola yang sama digunakan oleh pod lain. MIC mengambil tindakan serupa ketika AzureIdentity atau AzureIdentityBinding dibuat atau dihapus.
Identitas Terkelola Node (NMI):NMI adalah pod yang berjalan sebagai DaemonSet pada setiap node di kluster AKS. NMI mencegat permintaan token keamanan ke Azure Instance Metadata Service pada setiap simpul. NMI mencegat permintaan token dan mengalihkannya ke dirinya sendiri. Selanjutnya, diperiksa apakah pod berwenang untuk mengakses identitas yang diminta dan, jika demikian, mengambil token dari tenant Microsoft Entra untuk aplikasi.
Mode Terkelola:Mode ini hanya menawarkan NMI. Saat diinstal melalui add-on kluster AKS, Azure mengelola pembuatan primitif Kubernetes (AzureIdentity dan AzureIdentityBinding) dan penetapan identitas sebagai respons terhadap perintah CLI oleh pengguna. Jika tidak, jika diinstal melalui chart Helm, identitas perlu ditetapkan dan dikelola secara manual per pengguna. Untuk informasi selengkapnya, lihat Identitas Pod dalam mode terkelola.
Saat Anda menginstal identitas yang dikelola pod dari Microsoft Entra melalui bagan Helm atau manifes YAML sebagaimana ditunjukkan dalam Panduan Penginstalan, Anda dapat memilih antara mode standard dan managed. Jika Anda malah memutuskan untuk menginstal identitas yang dikelola pod Microsoft Entra menggunakan add-on kluster AKS seperti yang ditunjukkan dalam artikel ini, maka penyiapan akan menggunakan mode managed.
Prasyarat
Identitas yang dikelola pod Microsoft Entra anda di AKS harus memenuhi persyaratan berikut:
Azure CLI versi 2.20.0 atau yang lebih baru diinstal.
Kluster AKS Anda berada pada versi 1.26 atau yang lebih baru.
Anda harus memiliki izin yang sesuai seperti peran Pemilik atau Kontributor .
Pasang ekstensi aks-preview Azure CLI
Penting
Fitur pratinjau AKS tersedia berdasarkan layanan mandiri dengan opsi untuk berpartisipasi. Pratinjau disediakan "apa adanya" dan "sebagaimana tersedia," dan mereka dikecualikan dari perjanjian tingkat layanan dan garansi terbatas. Pratinjau AKS sebagian dicakup oleh dukungan pelanggan berdasarkan upaya terbaik. Dengan demikian, fitur-fitur ini tidak dimaksudkan untuk penggunaan produksi. Untuk informasi lebih lanjut, lihat artikel dukungan berikut ini:
Untuk menginstal ekstensi aks-preview, jalankan perintah berikut:
az extension add --name aks-preview
Jalankan perintah berikut untuk memperbarui ke versi terbaru ekstensi yang dirilis:
az extension update --name aks-preview
Daftarkan bendera fitur EnablePodIdentityPreview
EnablePodIdentityPreview Daftarkan bendera fitur dengan menggunakan perintah az feature register seperti yang ditunjukkan dalam contoh berikut:
az feature register --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
Petunjuk / Saran
Untuk menonaktifkan add-on Terkelola AKS, jalankan perintah berikut:
az feature unregister --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
Dibutuhkan beberapa menit agar status ditampilkan sebagai Terdaftar. Verifikasi status pendaftaran dengan menggunakan perintah az feature show :
az feature show --namespace "Microsoft.ContainerService" --name "EnablePodIdentityPreview"
Saat status mencerminkan Terdaftar, refresh pendaftaran penyedia sumber daya Microsoft.ContainerService dengan menggunakan perintah az provider register :
az provider register --namespace Microsoft.ContainerService
Mengelola kluster AKS dengan identitas yang dikelola oleh pod
Anda dapat mengelola kluster AKS dengan plugin jaringan Azure Container Networking Interface (CNI) atau Kubenet saat mengaktifkan identitas yang dikelola pod Microsoft Entra.
Buat kluster AKS dengan Azure CNI dan identitas yang dikelola pod diaktifkan, menggunakan konfigurasi default yang direkomendasikan. Perintah berikut menggunakan az group create untuk membuat grup sumber daya bernama myResourceGroup dan
az aks createperintah untuk membuat kluster AKS bernama myAKSCluster di grup sumber daya myResourceGroup .az group create --name myResourceGroup --location eastus az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --enable-pod-identity \ --network-plugin azure \ --generate-ssh-keysGunakan
az aks get-credentialsuntuk masuk ke kluster AKS Anda. Perintah ini juga mengunduh dan mengonfigurasi sertifikat klienkubectlpada komputer pengembangan Anda.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Saat Anda mengaktifkan identitas yang dikelola pod pada kluster AKS, sistem menambahkan AzurePodIdentityException bernama aks-addon-exception ke namespace kube-system. Pod yang memiliki label tertentu memungkinkan AzurePodIdentityException untuk mengakses titik akhir Azure Instance Metadata Service (IMDS) tanpa intersepsi oleh server NMI.
aks-addon-exception memungkinkan add-on pihak pertama AKS, seperti Microsoft Entra identitas terkelola pod, untuk beroperasi tanpa perlu mengonfigurasi AzurePodIdentityException secara manual. Secara opsional, Anda dapat menambahkan, menghapus, dan memperbarui penggunaan AzurePodIdentityException :
az aks pod-identity exception addaz aks pod-identity exception deleteaz aks pod-identity exception updateAtau
kubectl
Memperbarui kluster AKS yang ada dengan Azure CNI
Untuk memperbarui kluster AKS yang ada dengan Azure CNI untuk menyertakan identitas yang dikelola pod, jalankan perintah berikut:
az aks update --resource-group $MY_RESOURCE_GROUP --name $MY_CLUSTER --enable-pod-identity
Buat identitas terkelola
Anda harus memiliki izin yang relevan (misalnya, Pemilik) pada langganan Anda untuk membuat identitas.
Untuk membuat identitas yang akan digunakan oleh pod demo dengan az identity create, atur variabel IDENTITY_CLIENT_ID dan IDENTITY_RESOURCE_ID , jalankan perintah berikut:
az group create --name myIdentityResourceGroup --location eastus
export IDENTITY_RESOURCE_GROUP="myIdentityResourceGroup"
export IDENTITY_NAME="application-identity"
az identity create --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME}
export IDENTITY_CLIENT_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query clientId -o tsv)"
export IDENTITY_RESOURCE_ID="$(az identity show --resource-group ${IDENTITY_RESOURCE_GROUP} --name ${IDENTITY_NAME} --query id -o tsv)"
Menetapkan izin untuk identitas terkelola
Identitas terkelola yang ditetapkan ke pod harus mendapatkan izin yang sesuai berdasarkan operasi yang dilakukannya. Pastikan Anda hanya menetapkan peran minimum yang diperlukan untuk mengikuti praktik terbaik keamanan.
Untuk menjalankan demo, identitas terkelola IDENTITY_CLIENT_ID harus memiliki izin Kontributor Komputer Virtual di grup sumber daya yang berisi Set Skala Komputer Virtual kluster AKS Anda.
# Obtain the name of the resource group containing the Virtual Machine Scale set of your AKS cluster, commonly called the node resource group
NODE_GROUP=$(az aks show --resource-group myResourceGroup --name myAKSCluster --query nodeResourceGroup -o tsv)
# Obtain the id of the node resource group
NODES_RESOURCE_ID=$(az group show --name $NODE_GROUP -o tsv --query "id")
# Create a role assignment granting your managed identity permissions on the node resource group
az role assignment create --role "Virtual Machine Contributor" --assignee "$IDENTITY_CLIENT_ID" --scope $NODES_RESOURCE_ID
Membuat identitas yang dikelola oleh pod
Untuk membuat identitas yang dikelola pod untuk kluster menggunakan az aks pod-identity add, jalankan perintah berikut:
export POD_IDENTITY_NAME="my-pod-identity"
export POD_IDENTITY_NAMESPACE="my-app"
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME} --identity-resource-id ${IDENTITY_RESOURCE_ID}
Catatan
"POD_IDENTITY_NAME" harus merupakan nama subdomain Sistem Nama Domain (DNS) yang valid seperti yang didefinisikan dalam RFC 1123.
Saat Anda menetapkan identitas yang dikelola pod dengan menggunakan pod-identity add, Azure CLI mencoba memberikan peran Operator Identitas Terkelola atas identitas yang dikelola pod (IDENTITY_RESOURCE_ID) ke identitas kluster.
Azure membuat sumber daya AzureIdentity di kluster Anda yang mewakili identitas di Azure, dan sumber daya AzureIdentityBinding yang menghubungkan AzureIdentity ke pemilih. Anda dapat melihat sumber daya ini dengan menjalankan perintah berikut:
kubectl get azureidentity -n $POD_IDENTITY_NAMESPACE
kubectl get azureidentitybinding -n $POD_IDENTITY_NAMESPACE
Jalankan aplikasi contoh
Agar pod dapat menggunakan identitas pod yang dikelola oleh Microsoft Entra, pod memerlukan label aadpodidbinding dengan nilai yang cocok dengan selector dari AzureIdentityBinding. Secara default, selektor mencocokkan nama identitas yang dikelola pod, tetapi juga dapat diatur menggunakan opsi --binding-selector saat menggunakan az aks pod-identity add.
Untuk menjalankan aplikasi sampel menggunakan identitas yang dikelola pod Microsoft Entra, buat demo.yaml file dengan konten berikut. Ganti POD_IDENTITY_NAME, IDENTITY_CLIENT_ID, dan IDENTITY_RESOURCE_GROUP dengan nilai dari langkah-langkah sebelumnya. Ganti SUBSCRIPTION_ID dengan ID langganan Anda.
Catatan
Pada langkah-langkah sebelumnya, Anda membuat variabel POD_IDENTITY_NAME, IDENTITY_CLIENT_ID, dan IDENTITY_RESOURCE_GROUP. Anda dapat menggunakan perintah seperti echo untuk menampilkan nilai yang Anda tetapkan untuk variabel, misalnya echo $POD_IDENTITY_NAME.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: $POD_IDENTITY_NAME
spec:
containers:
- name: demo
image: mcr.microsoft.com/oss/azure/aad-pod-identity/demo:v1.6.3
args:
- --subscriptionid=$SUBSCRIPTION_ID
- --clientid=$IDENTITY_CLIENT_ID
- --resourcegroup=$IDENTITY_RESOURCE_GROUP
env:
- name: MY_POD_NAME
valueFrom:
fieldRef:
fieldPath: metadata.name
- name: MY_POD_NAMESPACE
valueFrom:
fieldRef:
fieldPath: metadata.namespace
- name: MY_POD_IP
valueFrom:
fieldRef:
fieldPath: status.podIP
nodeSelector:
kubernetes.io/os: linux
Perhatikan bahwa definisi pod mempunyai aadpodidbinding label dengan nilai yang sesuai dengan nama identitas yang dikelola oleh pod yang Anda jalankan az aks pod-identity add di langkah sebelumnya.
Sebarkan
demo.yamlke namespace yang sama dengan identitas yang dikelola pod Anda menggunakankubectl apply:kubectl apply -f demo.yaml --namespace $POD_IDENTITY_NAMESPACEVerifikasi aplikasi sampel berhasil dijalankan menggunakan
kubectl logs:kubectl logs demo --follow --namespace $POD_IDENTITY_NAMESPACEVerifikasi bahwa log menunjukkan token berhasil diperoleh dan bahwa operasi permintaan HTTP GET berhasil.
... successfully doARMOperations vm count 0 successfully acquired a token using the MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) successfully acquired a token, userAssignedID MSI, msiEndpoint(http://169.254.169.254/metadata/identity/oauth2/token) clientID(xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) successfully made GET on instance metadata ...
Jalankan aplikasi dengan beberapa identitas
Agar aplikasi dapat menggunakan beberapa identitas, atur --binding-selector ke selector yang sama saat membuat identitas pod.
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_1} --identity-resource-id ${IDENTITY_RESOURCE_ID_1} --binding-selector myMultiIdentitySelector
az aks pod-identity add --resource-group myResourceGroup --cluster-name myAKSCluster --namespace ${POD_IDENTITY_NAMESPACE} --name ${POD_IDENTITY_NAME_2} --identity-resource-id ${IDENTITY_RESOURCE_ID_2} --binding-selector myMultiIdentitySelector
Kemudian atur bidang aadpodidbinding di YAML pod Anda ke pemilih ikatan yang Anda tentukan.
apiVersion: v1
kind: Pod
metadata:
name: demo
labels:
aadpodidbinding: myMultiIdentitySelector
...
Nonaktifkan identitas yang dikelola oleh pod pada kluster yang sudah ada
Untuk menonaktifkan identitas yang dikelola pod pada kluster yang ada, hapus identitas yang dikelola pod dari kluster dengan menjalankan perintah berikut:
az aks pod-identity delete --name ${POD_IDENTITY_NAME} --namespace ${POD_IDENTITY_NAMESPACE} --resource-group myResourceGroup --cluster-name myAKSClusterKemudian nonaktifkan fitur pada kluster dengan menjalankan perintah berikut:
az aks update --resource-group myResourceGroup --name myAKSCluster --disable-pod-identity
Membersihkan sumber daya
Untuk menghapus identitas yang dikelola pod Microsoft Entra dari kluster Anda, hapus aplikasi sampel dan identitas tersebut dari kluster.
kubectl delete pod demo --namespace $POD_IDENTITY_NAMESPACE
Kemudian hapus identitas dan penugasan peran dari identitas kluster.
az aks pod-identity delete \
--name ${POD_IDENTITY_NAME} \
--namespace ${POD_IDENTITY_NAMESPACE} \
--resource-group myResourceGroup \
--cluster-name myAKSCluster
az identity delete \
--resource-group ${IDENTITY_RESOURCE_GROUP} \
--name ${IDENTITY_NAME}
az role assignment delete \
--role "Managed Identity Operator" \
--assignee "$IDENTITY_CLIENT_ID" \
--scope "$IDENTITY_RESOURCE_ID"
Langkah berikutnya
Untuk informasi selengkapnya tentang identitas terkelola, lihat Identitas terkelola untuk sumber daya Azure.