Freigeben über


Verwenden einer vom System zugewiesenen verwalteten Identität in Azure Kubernetes Service (AKS)

In diesem Artikel wird erläutert, wie Sie eine vom System zugewiesene verwaltete Identität auf einem neuen oder vorhandenen AKS-Cluster aktivieren, die Prinzipal-ID der vom System zugewiesenen verwalteten Identität abrufen und eine Rollenzuweisung für die vom System zugewiesene verwaltete 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.23.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.
  • Um einen vorhandenen Cluster für die Verwendung einer vom System zugewiesenen verwalteten Identität zu aktualisieren, benötigen Sie Azure CLI, Version 2.49.0 oder höher, installiert.
  • 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.
  • AKS unterstützt die Verwendung einer systemseitig zugewiesenen verwalteten Identität bei Verwendung einer benutzerdefinierten privaten DNS-Zone nicht.

Ü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.

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

Eine vom System zugewiesene verwaltete Identität ist standardmäßig aktiviert, wenn Sie einen neuen AKS-Cluster erstellen.

Erstellen Sie mit dem Befehl az aks create einen AKS-Cluster.

az aks create \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --generate-ssh-keys

Aktualisieren eines vorhandenen Clusters zur Verwendung einer vom System zugewiesenen verwalteten Identität

Aktualisieren Sie einen vorhandenen AKS-Cluster von einem Dienstprinzipal auf eine vom System zugewiesene verwaltete Identität mithilfe des az aks update Befehls mit dem --enable-managed-identity Parameter.

az aks update \
    --resource-group <resource-group-name> \
    --name <aks-cluster-name> \
    --enable-managed-identity

Nachdem Sie den Cluster so aktualisiert haben, dass anstelle eines Dienstprinzipals eine vom System zugewiesene verwaltete Identität verwendet wird, verwenden die Steuerebene und die Pods die vom System zugewiesene verwaltete Identität für die Autorisierung, wenn sie auf andere Dienste in Azure zugreifen. Kubelet verwendet weiterhin einen Dienstprinzipal, bis Sie für Ihren Agentpool auch ein Upgrade durchführen. Sie können den Befehl az aks nodepool upgrade --resource-group <resource-group-name> --cluster-name <aks-cluster-name> --name <node-pool-name> --node-image-only auf Ihren Knoten verwenden, um auf eine verwaltete Identität zu aktualisieren. Ein Upgrade des Knotenpools verursacht Ausfallzeiten für Ihren AKS-Cluster, da die Knoten in den Knotenpools abgeriegelt, entleert und neu abgebildet werden.

Abrufen der Hauptkennung einer vom System zugewiesenen verwalteten Identität

Rufen Sie die Prinzipal-ID für die systemseitig zugewiesene verwaltete Identität des Clusters ab, indem Sie den Befehl az aks show verwenden.

CLIENT_ID=$(az aks show \
    --name <aks-cluster-name> \
    --resource-group <resource-group-name> \
    --query identity.principalId \
    --output tsv)

Hinzufügen einer Rollenzuweisung für eine systemseitig zugewiesene verwaltete Identität

Hinweis

Für ein virtuelles Netzwerk (VNet), einen angeschlossenen Azure-Datenträger, eine statische IP-Adresse oder eine Routing-Tabelle außerhalb der Standard-Worker-Node-Ressourcengruppe müssen Sie der angepassten Ressourcengruppe die Rolle Network Contributor zuweisen.

Weisen Sie der vom System zugewiesenen verwalteten Identität mithilfe des Befehls az role assignment create eine Azure RBAC-Rolle zu. Im folgenden Beispiel wird die Rolle "Netzwerkmitwirkender" der vom System zugewiesenen verwalteten Identität zugewiesen. Die Rollenzuweisung gilt für die Ressourcengruppe, die das VNet enthält.

az role assignment create \
    --assignee <client-id> \
    --role "Network Contributor" \
    --scope <custom-resource-group-id>

Hinweis

Es kann bis zu 60 Minuten dauern, bis die Berechtigungen, die der verwalteten Identität Ihres Clusters gewährt wurden, verteilt sind.

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 vom System zugewiesenen verwalteten Identität mithilfe von Terraform

Fügen Sie den folgenden Code zu main.tf hinzu, um einen AKS-Cluster mit einer vom System zugewiesenen verwalteten Identität zu erstellen.

resource "azurerm_kubernetes_cluster" "system_assigned" {
 name                = "aks-system"
 location            = azurerm_resource_group.example.location
 resource_group_name = azurerm_resource_group.example.name
 dns_prefix          = "akssystem"
 identity {
   type = "SystemAssigned"
 }
 default_node_pool {
   name       = "system"
   node_count = 1
   vm_size    = "Standard_DS2_v2"
 }
}

Hinzufügen einer Rollenzuweisung für eine vom System zugewiesene verwaltete Identität mithilfe von Terraform

Fügen Sie den folgenden Code hinzu, um eine Rollenzuweisung für die systemzugewiesene verwaltete Identität zu main.tf zu erstellen. In diesem Beispiel wird die Rolle "Netzwerkmitwirkender" der vom System zugewiesenen verwalteten Identität zugewiesen. Die Rollenzuweisung gilt für die Ressourcengruppe, die das VNet enthält.

resource "azurerm_role_assignment" "system_assigned_network_contributor" {
 scope                = azurerm_resource_group.example.id
 role_definition_name = "Network Contributor"
 principal_id         = azurerm_kubernetes_cluster.system_assigned.identity[0].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: