Menggunakan identitas terkelola kubelet yang telah dibuat sebelumnya di Azure Kubernetes Service (AKS)

Artikel ini menjelaskan cara mengaktifkan identitas terkelola kubelet yang telah dibuat sebelumnya pada kluster AKS baru atau yang sudah ada, mendapatkan properti identitas terkelola kubelet, dan menambahkan penetapan peran untuk identitas terkelola kubelet.

Prasyarat

  • Grup sumber daya Azure yang sudah ada. Jika Anda tidak memilikinya, Anda dapat membuatnya menggunakan az group create perintah .

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Azure CLI versi 2.26.0 atau yang lebih baru terinstal. Jalankan az --version untuk menemukan versinya. Jika Anda perlu memasang atau meningkatkan, lihat Memasang Azure CLI.

Keterbatasan

  • Setelah membuat kluster dengan identitas terkelola, Anda tidak dapat beralih kembali menggunakan perwakilan layanan.
  • Memindahkan atau memigrasikan kluster yang mendukung identitas terkelola ke penyewa lain tidak didukung.
  • Jika kluster telah diaktifkan identitas yang dikelola pod Microsoft Entra (aad-pod-identity), pod Node-Managed Identity (NMI) memodifikasi iptables node untuk mencegat panggilan ke titik akhir Azure Instance Metadata (IMDS). Konfigurasi ini berarti setiap permintaan yang dibuat ke titik akhir IMDS disadap oleh NMI, bahkan jika pod tertentu tidak menggunakan aad-pod-identity.
    • Anda dapat mengonfigurasi definisi sumber daya kustom (CRD) AzurePodIdentityException untuk menentukan bahwa permintaan ke titik akhir IMDS yang berasal dari pod yang cocok dengan label yang ditentukan dalam CRD harus diproksikan tanpa pemrosesan apa pun di NMI. Kecualikan pod sistem dengan label dalam namespace kube-system dengan cara mengonfigurasi CRD AzurePodIdentityException. Untuk informasi selengkapnya, lihat Menggunakan identitas yang dikelola pod Microsoft Entra di Azure Kubernetes Service (AKS).
    • Untuk mengonfigurasi pengecualian, instal mic-exception YAML.
  • Identitas terkelola kubelet yang telah dibuat sebelumnya harus berupa identitas terkelola yang ditetapkan pengguna.
  • Wilayah Tiongkok Timur dan Tiongkok Utara di Microsoft Azure yang dioperasikan oleh 21Vianet tidak didukung.

Penting

Semua fitur Microsoft Defender for Cloud akan secara resmi dihentikan di Azure di wilayah Tiongkok pada 18 Agustus 2026. Karena penghentian yang akan datang ini, pelanggan Azure di Tiongkok tidak lagi dapat melakukan onboarding langganan baru ke layanan. Langganan baru adalah langganan apa pun yang belum di-onboard ke layanan Microsoft Defender for Cloud sebelum 18 Agustus 2025, tanggal pengumuman penghentian. Untuk informasi selengkapnya tentang penghentian, lihat Pengumuman Penghentian Microsoft Defender for Cloud di Microsoft Azure yang Dioperasikan oleh 21Vianet.

Pelanggan harus bekerja dengan perwakilan akun mereka untuk Microsoft Azure yang dioperasikan oleh 21Vianet untuk menilai dampak penghentian ini pada operasi mereka sendiri.

Memperbarui pertimbangan kluster

Saat Anda memperbarui kluster, pertimbangkan informasi berikut:

  • Pembaruan hanya berfungsi jika ada pembaruan VHD yang akan digunakan. Jika Anda menjalankan VHD terbaru, Anda harus menunggu hingga VHD berikutnya tersedia untuk melakukan pembaruan.
  • Azure CLI memastikan izin add-on Anda diatur dengan benar setelah bermigrasi. Jika Anda tidak menggunakan Azure CLI untuk melakukan operasi migrasi, Anda perlu menangani izin identitas add-on sendiri. Misalnya menggunakan templat Azure Resource Manager (ARM), lihat Menetapkan peran Azure menggunakan templat ARM.
  • ** Jika kluster Anda menggunakan --attach-acr untuk menarik gambar dari Azure Container Registry (ACR), Anda perlu menjalankan perintah az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> setelah memperbarui kluster Anda agar kubelet baru yang dibuat untuk identitas terkelola mendapatkan izin untuk menarik dari ACR. Jika tidak, Anda tidak akan dapat menarik dari ACR setelah pembaruan.

Membuat identitas terkelola kubelet

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

az identity create \
    --name <kubelet-identity-name> \
    --resource-group <resource-group-name>

Output Anda harus menyerupai contoh output berikut:

{
    "clientId": "<client-id>",
    "clientSecretUrl": "<clientSecretUrl>",
    "id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>",
    "location": "<location>",
    "name": "<kubelet-identity-name>",
    "principalId": "<principal-id>",
    "resourceGroup": "<resource-group-name>",
    "tags": {},
    "tenantId": "<tenant-id>",
    "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}

Menetapkan peran RBAC untuk Identitas Terkelola kubelet

Tetapkan peran acrpull pada identitas terkelola kubelet menggunakan perintah az role assignment create.

az role assignment create \
    --assignee <kubelet-client-id> \
    --role "acrpull" \
    --scope "<acr-registry-id>"

Mengaktifkan identitas terkelola kubelet pada kluster AKS baru

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

az aks create \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --network-plugin azure \
    --vnet-subnet-id <vnet-subnet-id> \
    --dns-service-ip 10.2.0.10 \
    --service-cidr 10.2.0.0/24 \
    --assign-identity <identity-resource-id> \
    --assign-kubelet-identity <kubelet-identity-resource-id> \
    --generate-ssh-keys

Pembuatan kluster AKS yang berhasil menggunakan identitas terkelola kubelet harus menghasilkan output yang mirip dengan yang berikut ini:

...
    "identity": {
    "principalId": null,
    "tenantId": null,
    "type": "UserAssigned",
    "userAssignedIdentities": {
        "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
        "clientId": "<client-id>",
        "principalId": "<principal-id>"
        }
    }
    },
    "identityProfile": {
    "kubeletidentity": {
        "clientId": "<client-id>",
        "objectId": "<object-id>",
        "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
    }
    },
...

Memperbarui kluster yang ada untuk menggunakan identitas terkelola kubelet

Untuk memperbarui kluster yang ada untuk menggunakan identitas terkelola kubelet, pertama-tama dapatkan identitas terkelola sarana kontrol saat ini untuk kluster AKS Anda.

Peringatan

Memperbarui identitas terkelola kubelet akan memutakhirkan kumpulan node kluster AKS Anda. Pastikan Anda telah mengonfigurasi pengaturan ketersediaan yang tepat, seperti Anggaran Gangguan Pod, sebelum melaksanakannya untuk menghindari gangguan beban kerja, atau lakukan ini selama jendela pemeliharaan.

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

    az aks show \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "servicePrincipalProfile"
    

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

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

    az aks show --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --query "identity"
    

    Untuk identitas terkelola 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>"
    },
    
  3. Perbarui kluster Anda dengan identitas yang sudah ada menggunakan perintah az aks update. Berikan ID sumber daya identitas terkelola yang ditetapkan pengguna untuk sarana kontrol untuk assign-identity parameter . Berikan ID sumber daya dari identitas terkelola kubelet untuk parameter assign-kubelet-identity.

    az aks update \
        --resource-group <resource-group-name> \
        --name <aks-cluster-name> \
        --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/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
        }
      },
    ...
    

Mendapatkan properti identitas terkelola kubelet

Dapatkan properti identitas terkelola kubelet menggunakan perintah az aks show dan melakukan kueri pada properti identityProfile.kubeletidentity.

az aks show \
    --name <aks-cluster-name> \
    --resource-group <resource-group-name> \
    --query "identityProfile.kubeletidentity"

Membuat file konfigurasi Terraform

File konfigurasi Terraform menentukan infrastruktur yang dibuat dan dikelola Terraform.

  1. Buat file bernama main.tf dan tambahkan kode berikut untuk menentukan versi Terraform dan tentukan penyedia Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Tambahkan kode berikut ke main.tf untuk membuat grup sumber daya Azure. Jangan ragu untuk mengubah nama dan lokasi grup sumber daya sesuai kebutuhan.

    resource "azurerm_resource_group" "example" {
     name     = "aks-rg"
     location = "East US"
    }
    

Membuat kluster AKS dengan identitas terkelola kubelet yang telah dibuat sebelumnya menggunakan Terraform

Tambahkan kode berikut untuk main.tf membuat identitas terkelola kubelet dan kluster AKS yang menggunakan identitas terkelola kubelet:

resource "azurerm_user_assigned_identity" "kubelet" {
 name                = "aks-kubelet-identity"
 resource_group_name = azurerm_resource_group.example.name
 location            = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "kubelet_identity" {
 name                = "aks-kubelet"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "akskubelet"
 identity {
   type         = "UserAssigned"
   identity_ids = [azurerm_user_assigned_identity.kubelet.id]
 }
 kubelet_identity {
   client_id                 = azurerm_user_assigned_identity.kubelet.client_id
   object_id                 = azurerm_user_assigned_identity.kubelet.principal_id
   user_assigned_identity_id = azurerm_user_assigned_identity.kubelet.id
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

Menambahkan penugasan peran untuk identitas terkelola kubelet dengan Terraform

Tambahkan kode berikut ke main.tf untuk membuat penetapan peran untuk identitas terkelola kubelet. Contoh ini menetapkan peran AcrPull ke identitas terkelola kubelet untuk memberinya izin untuk menarik gambar dari Azure Container Registry (ACR). Penetapan peran dibatasi pada grup sumber daya.

Nota

Dalam skenario produksi, tetapkan peran AcrPull di cakupan Azure Container Registry alih-alih grup sumber daya.

resource "azurerm_role_assignment" "kubelet_acr_pull" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "AcrPull"
 principal_id         = azurerm_user_assigned_identity.kubelet.principal_id
}

Menginisialisasi Terraform

Inisialisasi Terraform di direktori yang berisi file main.tf Anda menggunakan perintah terraform init. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure dengan Terraform.

terraform init

Buat rencana pelaksanaan Terraform

Buat rencana eksekusi Terraform menggunakan terraform plan perintah . Perintah ini menunjukkan kepada Anda sumber daya yang akan dibuat atau dimodifikasi oleh Terraform di langganan Azure Anda.

terraform plan

Menerapkan konfigurasi Terraform

Setelah meninjau dan mengonfirmasi rencana eksekusi, terapkan konfigurasi Terraform menggunakan terraform apply perintah . Perintah ini membuat atau memodifikasi sumber daya yang ditentukan dalam file Anda main.tf di langganan Azure Anda.

terraform apply

Memverifikasi implementasi Terraform

Setelah menerapkan konfigurasi Terraform, Anda dapat memverifikasi penyebaran menggunakan az aks show perintah dengan --query parameter untuk memfilter output dan menampilkan informasi identitas. Contohnya:

az aks show \
 --name <cluster-name> \
 --resource-group <resource-group> \
 --query identity.type \
 --output tsv

Untuk mempelajari selengkapnya tentang identitas terkelola di AKS, lihat artikel berikut ini: