Używanie tożsamości zarządzanej przypisanej przez system w usłudze Azure Kubernetes Service (AKS)

W tym artykule wyjaśniono, jak włączyć tożsamość zarządzaną przypisaną przez system w nowym lub istniejącym klastrze usługi AKS, uzyskać identyfikator podmiotu zabezpieczeń tożsamości zarządzanej przypisanej przez system i dodać przypisanie roli dla tożsamości zarządzanej przypisanej przez system.

Wymagania wstępne

  • Istniejąca grupa zasobów platformy Azure. Jeśli go nie masz, możesz go utworzyć przy użyciu az group create polecenia .

    az group create \
        --name <resource-group-name> \
        --location <location>
    
  • Zainstalowany interfejs wiersza polecenia platformy Azure w wersji 2.23.0 lub nowszej. Uruchom az --version, aby znaleźć wersję. Jeśli musisz zainstalować lub uaktualnić, zobacz Install Azure CLI.
  • Aby zaktualizować istniejący klaster do używania tożsamości zarządzanej przypisanej przez system, musisz zainstalować interfejs wiersza polecenia platformy Azure w wersji 2.49.0 lub nowszej.

Ograniczenia

  • Po utworzeniu klastra z tożsamością zarządzaną nie można wrócić do używania zasady usługi.
  • Przenoszenie lub migrowanie klastra z włączoną obsługą tożsamości zarządzanej do innej dzierżawy nie jest obsługiwane.
  • Jeśli klaster ma włączoną tożsamość zarządzaną Microsoft Entra dla zasobników (aad-pod-identity), tożsamość zarządzana przez węzły (Node-Managed Identity, NMI) modyfikuje tabele ip węzłów w celu przechwycenia wywołań do punktu końcowego Azure Instance Metadata Service (IMDS). Ta konfiguracja oznacza, że każde żądanie skierowane do punktu końcowego IMDS jest przechwytywane przez NMI, nawet jeśli określony pod nie używa elementu aad-pod-identity.
    • Można skonfigurować niestandardową definicję zasobu AzurePodIdentityException (CRD), aby określić, że żądania do punktu końcowego IMDS pochodzące z zasobników pasujących do etykiet zdefiniowanych w CRD powinny być przekierowane bez żadnego przetwarzania w NMI. Wyklucz zasobniki systemowe z etykietą kubernetes.azure.com/managedby: aks w przestrzeni nazw kube-system, konfigurując CRD AzurePodIdentityException w aad-pod-identity. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanych przez pod w Microsoft Entra w usłudze Azure Kubernetes Service (AKS).
    • Aby skonfigurować wyjątek, zainstaluj mic-exception YAML.
  • Usługa AKS nie obsługuje korzystania z tożsamości zarządzanej przypisanej przez system w przypadku korzystania z niestandardowej prywatnej strefy DNS.

Zagadnienia dotyczące aktualizacji klastra

Podczas aktualizowania klastra należy wziąć pod uwagę następujące informacje:

  • Aktualizacja działa tylko wtedy, gdy istnieje aktualizacja dysku VHD do korzystania. Jeśli używasz najnowszego wirtualnego dysku twardego, musisz poczekać, aż następny wirtualny dysk twardy będzie dostępny w celu przeprowadzenia aktualizacji.
  • Interfejs wiersza polecenia platformy Azure zapewnia, że uprawnienie dodatku jest poprawnie ustawione po przeprowadzeniu migracji. Jeśli nie używasz Azure CLI do przeprowadzenia operacji migrowania, musisz samodzielnie zarządzać uprawnieniami tożsamości dodatku. Aby zapoznać się z przykładem użycia szablonu Azure Resource Manager (ARM), zobacz Przypisywanie ról Azure za pomocą szablonów ARM.
  • Jeśli twój klaster używał --attach-acr do pobierania obrazów z Azure Container Registry (ACR), należy uruchomić polecenie az aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id> po zaktualizowaniu klastra, aby umożliwić nowo utworzonemu kubeletowi używanemu do tożsamości zarządzanej uzyskanie uprawnień do pobierania z ACR. W przeciwnym razie nie będzie można pobrać z ACR po aktualizacji.

Włącz tożsamość zarządzaną przypisywaną przez system w nowym klastrze AKS

Tożsamość zarządzana przypisana przez system jest domyślnie włączona podczas tworzenia nowego klastra usługi AKS.

Utwórz klaster AKS przy użyciu polecenia az aks create.

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

Aktualizowanie istniejącego klastra w celu używania tożsamości zarządzanej przypisanej przez system

Zaktualizuj istniejący klaster usługi AKS z jednostki usługi do przypisanej przez system tożsamości zarządzanej az aks update przy użyciu polecenia z parametrem --enable-managed-identity .

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

Po zaktualizowaniu klastra do używania tożsamości zarządzanej przypisanej przez system zamiast jednostki usługi, zarówno płaszczyzna kontrolna, jak i zasobniki używają tożsamości zarządzanej przypisanej przez system do autoryzacji podczas uzyskiwania dostępu do innych usług w Azure. Rozwiązanie Kubelet kontynuuje korzystanie z jednostki usługi, dopóki nie uaktualnisz również puli agentów. Aby zaktualizować tożsamość zarządzaną, możesz użyć az aks nodepool upgrade --resource-group <resource-group-name> --cluster-name <aks-cluster-name> --name <node-pool-name> --node-image-only polecenia w węzłach. Uaktualnienie puli węzłów powoduje przestój klastra usługi AKS, ponieważ węzły w pulach węzłów są zablokowane, czyszczone i ponownie obrazowane.

Pobierz główny identyfikator tożsamości zarządzanej przypisanej przez system

Pobierz główny identyfikator dla systemowej tożsamości zarządzanej przypisanej do klastra przy użyciu polecenia az aks show.

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

Dodaj przypisanie roli dla tożsamości zarządzanej przez system

Uwaga / Notatka

W przypadku sieci wirtualnej, dysku platformy Azure, statycznego adresu IP lub tabeli tras poza domyślną grupą zasobów węzła procesu roboczego należy przypisać rolę Network Contributor na niestandardowej grupie zasobów.

Przypisz rolę RBAC platformy Azure do tożsamości zarządzanej przypisanej przez system przy użyciu polecenia az role assignment create. W poniższym przykładzie przypisano rolę Współautor sieci do tożsamości zarządzanej przypisanej przez system. Przypisanie roli jest ograniczone do grupy zasobów zawierającej sieć wirtualną.

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

Uwaga / Notatka

Propagacja uprawnień udzielonych tożsamości zarządzanej klastra może potrwać do 60 minut.

Tworzenie pliku konfiguracji narzędzia Terraform

Pliki konfiguracji narzędzia Terraform definiują infrastrukturę, którą program Terraform tworzy i zarządza.

  1. Utwórz plik o nazwie main.tf i dodaj następujący kod, aby zdefiniować wersję programu Terraform i określić dostawcę platformy Azure:

    terraform {
    required_version = ">= 1.0"
    required_providers {
      azurerm = {
        source  = "hashicorp/azurerm"
        version = "~> 4.0"
      }
     }
    }
    provider "azurerm" {
     features {}
    }
    
  2. Dodaj następujący kod do main.tf, aby utworzyć grupę zasobów platformy Azure. W razie potrzeby możesz zmienić nazwę i lokalizację grupy zasobów.

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

Tworzenie klastra usługi AKS z tożsamością zarządzaną przypisaną przez system przy użyciu narzędzia Terraform

Dodaj następujący kod do main.tf, aby utworzyć klaster usługi AKS z tożsamością zarządzaną przydzieloną przez system.

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

Dodawanie przypisania roli dla tożsamości zarządzanej przypisanej przez system przy użyciu narzędzia Terraform

Dodaj następujący kod do main.tf, aby utworzyć przypisanie roli dla tożsamości zarządzanej przypisanej przez system. W tym przykładzie przypisano rolę Współautor sieci do tożsamości zarządzanej przypisanej przez system. Przypisanie roli jest ograniczone do grupy zasobów zawierającej sieć wirtualną.

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
}

Inicjowanie narzędzia Terraform

Zainicjuj Terraform w katalogu zawierającym plik main.tf przy użyciu polecenia terraform init. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure za pomocą narzędzia Terraform.

terraform init

Tworzenie planu wykonania programu Terraform

Utwórz plan wykonywania narzędzia Terraform przy użyciu terraform plan polecenia . To polecenie pokazuje zasoby, które narzędzie Terraform utworzy lub zmodyfikuje w ramach subskrypcji platformy Azure.

terraform plan

Stosowanie konfiguracji narzędzia Terraform

Po przejrzeniu i potwierdzeniu planu wykonania zastosuj konfigurację narzędzia Terraform przy użyciu terraform apply polecenia . To polecenie tworzy lub modyfikuje zasoby zdefiniowane w pliku w main.tf ramach subskrypcji platformy Azure.

terraform apply

Weryfikowanie wdrożenia narzędzia Terraform

Po zastosowaniu konfiguracji narzędzia Terraform możesz zweryfikować wdrożenie przy użyciu az aks show polecenia z parametrem --query , aby odfiltrować dane wyjściowe i wyświetlić informacje o tożsamości. Przykład:

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

Aby dowiedzieć się więcej o tożsamościach zarządzanych w usłudze AKS, zobacz następujące artykuły: