Verwenden einer vordefinierten kubelet-verwalteten Identität in Azure Kubernetes Service (AKS)

In diesem Artikel wird erläutert, wie Sie eine vordefinierte kubelet verwaltete Identität für einen neuen oder vorhandenen AKS-Cluster aktivieren, die Eigenschaften der verwalteten Kubelet-Identität abrufen und eine Rollenzuweisung für die verwaltete Kubelet-Identität hinzufügen.

Voraussetzungen

  • Eine vorhandene Azure-Ressourcengruppe. Wenn Sie keins haben, können Sie einen mit dem az group create Befehl erstellen.

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Azure CLI Version 2.26.0 oder höher installiert. Führen Sie az --version aus, um die Version zu ermitteln. Wenn Sie eine Installation oder ein Upgrade durchführen müssen, finden Sie weitere Informationen unter Azure CLI installieren.
  • Terraform lokal installiert. Installationsanweisungen finden Sie unter Install Terraform.

Einschränkungen

  • Nachdem Sie einen Cluster mit einer verwalteten Identität erstellt haben, können Sie nicht zurück zu einem Dienstprinzipal wechseln.
  • Das Verschieben oder Migrieren von Clustern mit aktivierter verwalteter Identität zu einem anderen Mandanten wird nicht unterstützt.
  • Wenn für den Cluster die verwaltete Microsoft Entra-Podidentität (aad-pod-identity) aktiviert wurde, werden die iptables der Knoten von NMI-Pods (Node Managed Identity) so geändert, dass Aufrufe des Azure Instance Metadata-Endpunkts (IMDS) abgefangen werden. Diese Konfiguration bedeutet, dass jede Anforderung, die an den IMDS-Endpunkt gerichtet ist, von NMI abgefangen wird, auch wenn ein bestimmter Pod aad-pod-identity nicht verwendet.
    • Sie können die angepasste Ressourcendefinition (CRD) AzurePodIdentityException so konfigurieren, dass Anfragen an den IMDS-Endpunkt, die von einem Pod stammen, der mit den in der CRD definierten Bezeichnungen übereinstimmt, ohne Verarbeitung in NMI als Proxy behandelt werden. Schließen Sie die Systempods mit der Bezeichnung kubernetes.azure.com/managedby: aks im Namespace kube-system in aad-pod-identity durch Konfigurieren der AzurePodIdentityException-CRD aus. Weitere Informationen finden Sie unter Verwenden von Microsoft Entra pod-verwalteten Identitäten in Azure Kubernetes Service (AKS).
    • Um eine Ausnahme zu konfigurieren, installieren Sie die mic-exception YAML.
  • Eine zuvor erstellte verwaltete Kubelet-Identität muss eine vom Benutzer zugewiesene verwaltete Identität sein.
  • Die Regionen China East und China North in Microsoft Azure betrieben von 21Vianet werden nicht unterstützt.

Von Bedeutung

Alle Microsoft Defender for Cloud features werden am 18. August 2026 in der Azure-Region in China offiziell eingestellt. Aufgrund dieser bevorstehenden Einstellung können Kunden von Azure in China keine neuen Abonnements mehr in den Dienst integrieren. Ein neues Abonnement ist jedes Abonnement, das noch nicht in den Microsoft Defender for Cloud-Dienst vor dem 18. August 2025 integriert wurde, dem Datum der Einstellungsankündigung. Weitere Informationen zur Einstellung finden Sie unter Microsoft Defender for Cloud Deprecation in Microsoft Azure Operated by 21Vianet Announcement.

Kunden sollten mit ihren Kundenservicemitarbeitern für Microsoft Azure, betrieben von 21Vianet, zusammenarbeiten, um die Auswirkungen dieser Einstellung auf ihren eigenen Betrieb zu bewerten.

Überlegungen zur Aktualisierung von Clustern

Berücksichtigen Sie beim Aktualisieren eines Clusters die folgenden Informationen:

  • Eine Aktualisierung funktioniert nur, wenn ein VHD-Update verwendet werden kann. Wenn Sie die neueste VHD ausführen, müssen Sie warten, bis die nächste VHD verfügbar wird, um die Aktualisierung vorzunehmen.
  • Die Azure CLI stellt sicher, dass die Berechtigung Ihres Add-Ons nach der Migration ordnungsgemäß festgelegt ist. Wenn Sie die Azure CLI nicht zum Ausführen des Migrationsvorgangs verwenden, müssen Sie die Berechtigung der Add-On-Identität selbst behandeln. Ein Beispiel für die Verwendung einer Azure Resource Manager (ARM)-Vorlage finden Sie unter Azure-Rollen zuweisen mit ARM-Vorlagen.
  • Wenn Ihr Cluster --attach-acr verwendete, um Images aus der Azure Container Registry (ACR) abzurufen, müssen Sie nach dem Aktualisieren Ihres Clusters den az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> Befehl ausführen, damit das neu erstellte Kubelet, das für die verwaltete Identität verwendet wird, die Berechtigung erhält, Images aus der ACR abzurufen. Andernfalls können Sie nach der Aktualisierung keinen Pull aus ACR ausführen.

Erstellen einer verwalteten Kubelet-Identität

Sollten Sie über keine verwaltete Kubelet-Identität verfügen, erstellen Sie eine mit dem Befehl az identity create.

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

Ihre Ausgabe sollte in etwa wie die folgende Beispielausgabe aussehen:

{
    "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"
}

Zuweisen einer RBAC-Rolle zu der verwalteten Kubelet-Identität

Weisen Sie der verwalteten Kubelet-Identität die acrpull Rolle mithilfe des az role assignment create Befehls zu.

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

Aktivieren einer verwalteten Kubelet-Identität in einem neuen AKS-Cluster

Erstellen Sie mithilfe des Befehls az aks create einen AKS-Cluster mit den vorhandenen Identitäten.

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

Eine erfolgreiche AKS-Clustererstellung unter Verwendung einer verwalteten Kubelet-Identität sollte zu einer ähnlichen Ausgabe wie der folgenden führen:

...
    "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>"
    }
    },
...

Aktualisieren eines vorhandenen Clusters zur Verwendung einer verwalteten Kubelet-Identität

Um einen vorhandenen Cluster für die Verwendung der verwalteten Kubelet-Identität zu aktualisieren, rufen Sie zunächst die aktuelle verwaltete Identität der Steuerungsebene für Ihren AKS-Cluster ab.

Warnung

Durch die Aktualisierung der vom Kubelet verwalteten Identität werden die Knotenpools Ihres AKS-Clusters aktualisiert. Stellen Sie sicher, dass Sie die richtigen Verfügbarkeitskonfigurationen, wie z. B. Pod Disruption Budgets, konfiguriert haben, bevor Sie diesen Vorgang ausführen, um Unterbrechungen der Workload zu vermeiden, oder führen Sie diesen Vorgang während eines Wartungsfensters aus.

  1. Bestätigen Sie mit dem Befehl az aks show, dass Ihr AKS-Cluster die benutzerseitig zugewiesene verwaltete Identität verwendet.

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

    Wenn Ihr Cluster eine verwaltete Identität verwendet, zeigt die Ausgabe clientId mit dem Wert msi an. Ein Cluster mit einem Dienstprinzipal zeigt eine Objekt-ID an. Beispiel:

    {
      "clientId": "msi"
    }
    
  2. Nachdem Sie sich vergewissert haben, dass Ihr Cluster eine verwaltete Identität verwendet, suchen Sie die Ressourcen-ID der verwalteten Identität mit dem Befehl az aks show.

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

    Für eine benutzerseitig zugewiesene verwaltete Identität sollte Ihre Ausgabe ungefähr so aussehen wie die folgende Beispielausgabe:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    
  3. Aktualisieren Sie mithilfe des Befehls az aks update Ihren Cluster mit den vorhandenen Identitäten. Geben Sie die Ressourcen-ID der vom Benutzer zugewiesenen verwalteten Identität für die Steuerebene für den assign-identity Parameter an. Geben Sie für den Parameter assign-kubelet-identity die Ressourcen-ID der verwalteten Identität von Kubelet an.

    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>
    

    Die Ausgabe bei einer erfolgreichen Clusteraktualisierung unter Verwendung Ihrer eigenen verwalteten Kubelet-Identität sollte der folgenden Beispielausgabe ähneln:

    ...
      "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>"
        }
      },
    ...
    

Abrufen der Eigenschaften der verwalteten Kubelet-Identität

Rufen Sie die Eigenschaften der verwalteten Kubelet-Identität mithilfe des Befehls az aks show und Abfragen über die Eigenschaft identityProfile.kubeletidentity ab.

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

Erstellen der Terraform-Konfigurationsdatei

Terraform-Konfigurationsdateien definieren die Infrastruktur, die Terraform erstellt und verwaltet.

  1. Erstellen Sie eine Datei namens main.tf , und fügen Sie den folgenden Code hinzu, um die Terraform-Version zu definieren und den Azure-Anbieter anzugeben:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Fügen Sie den folgenden Code hinzu, um eine Azure-Ressourcengruppe zu main.tf erstellen. Sie können den Namen und den Speicherort der Ressourcengruppe nach Bedarf ändern.

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

Erstellen eines AKS-Clusters mit einer vordefinierten kubelet verwalteten Identität mithilfe von Terraform

Fügen Sie den folgenden Code hinzu, um eine verwaltete Kubelet-Identität und einen AKS-Cluster zu main.tf erstellen, der die verwaltete Kubelet-Identität verwendet:

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"
 }
}

Hinzufügen einer Rollenzuweisung für die verwaltete Kubelet-Identität mithilfe von Terraform

Fügen Sie den folgenden Code zu main.tf hinzu, um eine Rollenzuweisung für die verwaltete kubelet identity zu erstellen. In diesem Beispiel wird die AcrPull-Rolle der verwalteten Identität des Kubelet zugewiesen, um ihm Berechtigungen zum Abrufen von Images aus der Azure Container Registry (ACR) zu erteilen. Die Rollenzuweisung ist auf die Ressourcengruppe eingegrenzt.

Hinweis

Weisen Sie in Produktionsszenarien die AcrPull-Rolle im Bereich Azure Container Registry anstelle der Ressourcen-Gruppe zu.

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
}

Initialisieren Sie Terraform

Initialisieren Sie Terraform im Verzeichnis, das Ihre main.tf Datei enthält, mithilfe des terraform init Befehls. Dieser Befehl lädt den Azure-Anbieter herunter, der zum Verwalten von Azure-Ressourcen mit Terraform erforderlich ist.

terraform init

Terraform-Ausführungsplan erstellen

Erstellen Sie mit dem Befehl „terraform plan“ einen Terraform-Ausführungsplan. Dieser Befehl zeigt Ihnen die Ressourcen, die Terraform in Ihrem Azure-Abonnement erstellen oder ändern wird.

terraform plan

Terraform-Konfiguration anwenden

Wenden Sie nach der Überprüfung und Bestätigung des Ausführungsplans die Terraform-Konfiguration mit dem terraform apply Befehl an. Mit diesem Befehl werden die in Ihrer Datei in Ihrem main.tf Azure-Abonnement definierten Ressourcen erstellt oder geändert.

terraform apply

Überprüfen Sie die Terraform-Bereitstellung

Nachdem Sie die Terraform-Konfiguration angewendet haben, können Sie die Bereitstellung mit dem Befehl az aks show und dem Parameter --query überprüfen, um die Ausgabe zu filtern und die Identitätsinformationen anzuzeigen. Beispiel:

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

Weitere Informationen zu verwalteten Identitäten in AKS finden Sie in den folgenden Artikeln: