Použití spravované identity ve službě Azure Kubernetes Service (AKS)

Clustery Azure Kubernetes Service (AKS) vyžadují identitu pro přístup k prostředkům Azure, jako jsou nástroje pro vyrovnávání zatížení a spravované disky. Identitou může být spravovaná identita nebo instanční objekt.

Tento článek obsahuje podrobnosti o povolení následujících typů spravovaných identit v novém nebo existujícím clusteru AKS:

  • Spravovaná identita přiřazená systémem
  • Používání vlastní spravované identity přiřazené uživatelem
  • Předem vytvořená spravovaná identita Kubeletu

Přehled

Když nasadíte cluster AKS, automaticky se vytvoří spravovaná identita přiřazená systémem a spravuje ji platforma Azure, takže nevyžaduje zřízení ani obměně tajných kódů. Další informace najdete v tématu spravované identity pro prostředky Azure.

AKS automaticky nevytvoří instanční objekt, takže ho musíte vytvořit. Clustery, které používají instanční objekt, nakonec vyprší a instanční objekt se musí obnovit, aby nedošlo k ovlivnění ověřování clusteru s identitou. Správa instančních objektů zvyšuje složitost, takže je jednodušší používat spravované identity. Stejné požadavky na oprávnění platí pro instanční objekty i spravované identity. Spravované identity používají ověřování založené na certifikátech. Přihlašovací údaje každé spravované identity mají vypršení platnosti 90 dnů a zahrnou se po 45 dnech.

AKS používá spravované typy identit přiřazené systémem i uživatelem a tyto identity jsou neměnné. Tyto typy identit by se neměly zaměňovat s identitou úloh Microsoft Entra, která je určená aplikací spuštěnou na podu.

Důležité

Opensourcová identita spravovaná podem Microsoft Entra (Preview) ve službě Azure Kubernetes Service byla vyřazena 24. září 2022 a projekt archivovaný v září 2023. Další informace najdete v oznámení o vyřazení. Spravovaný doplněk AKS se zahájí v září 2024.

Doporučujeme vám nejprve zkontrolovat ID úloh Microsoft Entra přehled. Ověřování Entra ID úloh nahrazuje identitu spravovanou podem Microsoft Entra (Preview) a je doporučenou metodou, jak povolit aplikaci spuštěnou na podu, aby se ověřila v jiných službách Azure, které ji podporují.

Než začnete

Omezení

  • Tenanti, kteří přesouvají nebo migrují cluster s podporou spravované identity, se nepodporují.
  • Pokud má cluster povolenou identituaad-pod-identity spravovanou podem () Microsoft Entra, pody NMI (Node-Managed Identity) upraví iptables uzlů tak, aby zachytily volání koncového bodu Azure Instance Metadata (IMDS). Tato konfigurace znamená, že NMI zachytí všechny požadavky na koncový bod metadat, a to i v případě, že pod nepoužívá aad-pod-identity. AzurePodIdentityException CRD je možné nakonfigurovat tak, aby informoval aad-pod-identity o všech požadavcích na koncový bod metadat pocházející z podu, který odpovídá popiskům definovaným v CRD, by se měl hlásit bez jakéhokoli zpracování v NMI. Systémové pody s kubernetes.azure.com/managedby: aks popiskem v oboru názvů kube-system by měly být vyloučeny aad-pod-identity konfigurací CRD AzurePodIdentityException.
  • AKS nepodporuje použití spravované identity přiřazené systémem při použití vlastní privátní zóny DNS.

Souhrn spravovaných identit

AKS používá několik spravovaných identit pro integrované služby a doplňky.

Identita Název Případ použití Výchozí oprávnění Používání vlastní identity
Řídicí rovina Název clusteru AKS Komponenty řídicí roviny AKS používají ke správě prostředků clusteru, včetně nástrojů pro vyrovnávání zatížení příchozího přenosu dat a veřejných IP adres spravovaných službou AKS, automatického škálování clusteru, disku Azure, souboru, ovladačů CSI objektů blob. Role přispěvatele pro skupinu prostředků Node Podporováno
Kubelet Fond názvů clusteru AKS Ověřování pomocí služby Azure Container Registry (ACR). Není k dispozici (pro Kubernetes v1.15+) Podporováno
doplněk AzureNPM Nevyžaduje se žádná identita. No
doplněk Monitorování sítě AzureCNI Nevyžaduje se žádná identita. No
doplněk azure-policy (gatekeeper) Nevyžaduje se žádná identita. No
doplněk azure-policy Nevyžaduje se žádná identita. No
doplněk Kaliko Nevyžaduje se žádná identita. No
doplněk řídicí panel Nevyžaduje se žádná identita. No
doplněk směrování aplikací Spravuje certifikáty Azure DNS a Azure Key Vault. Role uživatele tajných kódů služby Key Vault pro službu Key Vault, role Přispěvatel zóny DNZ pro zóny DNS, role přispěvatele zóny Privátní DNS pro privátní zóny DNS No
doplněk HttpApplicationRouting Spravuje požadované síťové prostředky. Role čtenáře pro skupinu prostředků uzlu, role přispěvatele pro zónu DNS No
doplněk Příchozí přenos dat služby Application Gateway Spravuje požadované síťové prostředky. Role přispěvatele pro skupinu prostředků uzlu No
doplněk omsagent Používá se k odesílání metrik AKS do služby Azure Monitor. Monitorování role vydavatele metrik No
doplněk Virtuální uzel (ACI Připojení or) Spravuje požadované síťové prostředky pro Azure Container Instances (ACI). Role přispěvatele pro skupinu prostředků uzlu No
doplněk Analýza nákladů Používá se ke shromažďování dat o alokaci nákladů.
Identita úloh ID úlohy Microsoft Entra Umožňuje aplikacím bezpečně přistupovat ke cloudovým prostředkům pomocí ID úlohy Microsoft Entra. No

Povolení spravovaných identit v novém clusteru AKS

Poznámka:

AKS vytvoří identitu kubeletu přiřazenou uživatelem ve skupině prostředků uzlu, pokud nezadáte vlastní spravovanou identitu kubeletu.

Poznámka:

Pokud už váš cluster používá spravovanou identitu a identita se změnila, například aktualizujete typ identity clusteru ze systému přiřazeného uživateli, dojde ke zpoždění, aby se komponenty řídicí roviny přepnuly na novou identitu. Komponenty řídicí roviny nadále používají starou identitu, dokud jeho token nevyprší. Po aktualizaci tokenu přejdou na novou identitu. Tento proces může trvat několik hodin.

  1. Pomocí příkazu vytvořte skupinu az group create prostředků Azure.

    az group create --name myResourceGroup --location westus2
    
  2. Pomocí příkazu vytvořte cluster az aks create AKS.

    az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
    
  3. Pomocí příkazu získejte přihlašovací údaje pro přístup ke clusteru az aks get-credentials .

    az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
    

Povolení spravovaných identit v existujícím clusteru AKS

Pokud chcete aktualizovat existující cluster AKS, který používá instanční objekt, aby používal spravovanou identitu přiřazenou systémem, spusťte az aks update příkaz.

az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity

Po aktualizaci clusteru řídicí rovina a pody používají spravovanou identitu. Kubelet nadále používá instanční objekt, dokud neupgradujete fond agentů. Příkaz na uzlech můžete použít az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only k aktualizaci na spravovanou identitu. Upgrade fondu uzlů způsobí prostoje clusteru AKS, protože uzly ve fondech uzlů se odpojí a vyprázdní a znovu zmagí.

Poznámka:

Při aktualizaci clusteru mějte na paměti následující informace:

  • Aktualizace funguje jenom v případě, že se používá aktualizace virtuálního pevného disku. Pokud používáte nejnovější virtuální pevný disk, musíte počkat, až bude k dispozici další virtuální pevný disk, abyste mohli provést aktualizaci.

  • Azure CLI zajišťuje správné nastavení oprávnění doplňku po migraci. Pokud k provedení operace migrace nepoužíváte Azure CLI, musíte oprávnění doplňku zpracovat sami. Příklad použití šablony Azure Resource Manageru (ARM) najdete v tématu Přiřazení rolí Azure pomocí šablon ARM.

  • Pokud váš cluster používal --attach-acr k načtení z imagí ze služby Azure Container Registry, musíte po aktualizaci clusteru spustit az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID> příkaz, aby nově vytvořený kubelet používaný pro spravovanou identitu získal oprávnění k vyžádání z ACR. Jinak nebudete moct po aktualizaci načíst z ACR.

Přidání přiřazení role pro spravovanou identitu

Když vytváříte a používáte vlastní virtuální síť, připojte disky Azure, statickou IP adresu, směrovací tabulku nebo identitu kubeletu přiřazenou uživatelem, kde jsou prostředky mimo skupinu prostředků pracovního uzlu, Azure CLI přidá přiřazení role automaticky. Pokud používáte šablonu ARM nebo jinou metodu, musíte k přiřazení role použít ID objektu zabezpečení spravované identity clusteru.

Pokud nepoužíváte Azure CLI, ale používáte vlastní virtuální síť, připojte disky Azure, statickou IP adresu, směrovací tabulku nebo identitu kubeletu přiřazenou uživatelem mimo skupinu prostředků pracovního uzlu, doporučujeme pro řídicí rovinu použít spravovanou identitu přiřazenou uživatelem. Aby řídicí rovina používala spravovanou identitu přiřazenou systémem, nemůžeme před vytvořením clusteru získat ID identity, což zpožďuje platnost přiřazení role.

Získání ID objektu zabezpečení spravované identity

  • Pomocí příkazu získejte ID objektu az identity show zabezpečení existující identity.

    az identity show --ids <identity-resource-id>
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {
      "clientId": "<client-id>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity",
      "location": "eastus",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Přidat přiřazení role

Pro virtuální síť, připojený disk Azure, statickou IP adresu nebo směrovací tabulku mimo výchozí skupinu prostředků pracovního uzlu musíte přiřadit Contributor roli pro vlastní skupinu prostředků.

  • Contributor Pomocí příkazu přiřaďte roli ve vlastní skupině az role assignment create prostředků.

    az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
    

Pro identitu kubeletu přiřazenou uživatelem mimo výchozí skupinu prostředků pracovního uzlu musíte přiřadit roli operátora spravované identity na identitě kubeletu pro spravovanou identitu řídicí roviny.

  • Managed Identity Operator Pomocí příkazu přiřaďte roli pro identitu kubeletuaz role assignment create.

    az role assignment create --assignee  <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
    

Poznámka:

Naplnění oprávnění udělených spravované identitě vašeho clusteru může trvat až 60 minut.

Používání vlastní spravované identity

Vytvoření clusteru pomocí spravované identity přiřazené uživatelem

Vlastní spravovaná identita přiřazená uživatelem pro řídicí rovinu umožňuje přístup k existující identitě před vytvořením clusteru. Tato funkce umožňuje scénáře, jako je použití vlastní virtuální sítě nebo odchozího typu trasy definované uživatelem s předem vytvořenou spravovanou identitou.

Poznámka:

Oblasti USA – střed, USDOD – východ a USGov – Iowa v cloudu Azure US Government se nepodporují.

AKS vytvoří identitu kubeletu přiřazenou uživatelem ve skupině prostředků uzlu, pokud nezadáte vlastní spravovanou identitu kubeletu.

  • Pokud spravovanou identitu nemáte, vytvořte ji pomocí az identity create příkazu.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Poznámka:

Naplnění oprávnění udělených spravované identitě vašeho clusteru může trvat až 60 minut.

  • Před vytvořením clusteru přidejte přiřazení role pro spravovanou az role assignment create identitu pomocí příkazu.

  • Vytvořte cluster se spravovanou identitou přiřazenou uživatelem.

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id>
    

Aktualizace spravované identity v existujícím clusteru

Poznámka:

Migrace spravované identity pro řídicí rovinu ze systému přiřazené uživatelem nezpůsobí žádný výpadek řídicí roviny a fondů agentů. Mezitím komponenty řídicí roviny používají starou identitu přiřazenou systémem několik hodin až do další aktualizace tokenu.

  • Pokud spravovanou identitu nemáte, vytvořte ji pomocí az identity create příkazu.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  • Po vytvoření vlastní spravované identity přiřazené uživatelem pro řídicí rovinu přidejte přiřazení role pro spravovanou identitu pomocí az role assignment create příkazu.

  • Pomocí příkazu aktualizujte cluster pomocí existujících identit az aks update . Nezapomeňte zadat ID prostředku spravované identity pro řídicí rovinu zahrnutím argumentu assign-identity .

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> 
    

    Výstup úspěšné aktualizace clusteru s použitím vlastní spravované identity kubeletu by měl vypadat jako v následujícím příkladu výstupu:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
    

Použití předem vytvořené spravované identity kubeletu

Identita kubeletu umožňuje přístup k existující identitě před vytvořením clusteru. Tato funkce umožňuje scénáře, jako je připojení k ACR s předem vytvořenou spravovanou identitou.

Předem vytvořená omezení identity kubeletu

  • Funguje jenom se spravovaným clusterem přiřazeným uživatelem.
  • Oblasti Čína – východ a Čína – sever v Microsoft Azure provozované společností 21Vianet se nepodporují.

Vytvoření spravovaných identit přiřazených uživatelem

Spravovaná identita řídicí roviny

  • Pokud nemáte spravovanou identitu řídicí roviny, vytvořte ji pomocí příkazu az identity create.

    az identity create --name myIdentity --resource-group myResourceGroup
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {                                  
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity", 
      "location": "westus2",
      "name": "myIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

spravovaná identita kubeletu

  • Pokud nemáte spravovanou identitu kubelet, vytvořte ji pomocí az identity create příkazu.

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity", 
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    

Vytvoření clusteru pomocí identity kubelet přiřazené uživatelem

Teď můžete vytvořit cluster AKS s existujícími identitami. Nezapomeňte zadat ID prostředku spravované identity pro řídicí rovinu zahrnutím argumentu assign-identity a spravované identity kubelet pomocí argumentu assign-kubelet-identity .

  • Pomocí příkazu vytvořte cluster AKS s existujícími identitami az aks create .

    az aks create \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --network-plugin azure \
        --vnet-subnet-id <subnet-id> \
        --dns-service-ip 10.2.0.10 \
        --service-cidr 10.2.0.0/24 \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Úspěšné vytvoření clusteru AKS pomocí vlastní spravované identity kubeletu by mělo vypadat podobně jako v následujícím příkladu výstupu:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Aktualizace existujícího clusteru pomocí identity kubeletu

Upozorňující

Aktualizace spravované identity kubelet upgraduje fondy uzlů, což způsobí výpadek clusteru AKS, protože uzly ve fondech uzlů jsou vyprázdněné nebo vyprázdněné a poškozované.

Poznámka:

Pokud váš cluster používal --attach-acr k načtení z imagí ze služby Azure Container Registry, musíte po aktualizaci clusteru spustit az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID> příkaz, aby nově vytvořený kubelet používaný pro spravovanou identitu získal oprávnění k vyžádání z ACR. Jinak nebudete moct po upgradu načíst Z ACR.

Získání aktuální spravované identity řídicí roviny pro cluster AKS

  1. Pomocí příkazu ověřte, že cluster AKS používá spravovanou identitu přiřazenou uživatelem az aks show .

    az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
    

    Pokud váš cluster používá spravovanou identitu, výstup se zobrazí clientId s hodnotou MSI. Cluster používající instanční objekt zobrazuje ID objektu. Příklad:

    {
      "clientId": "msi"
    }
    
  2. Po potvrzení, že cluster používá spravovanou identitu, pomocí příkazu vyhledejte ID az aks show prostředku spravované identity.

    az aks show -g <RGName> -n <ClusterName> --query "identity"
    

    U spravované identity přiřazené uživatelem by měl výstup vypadat podobně jako v následujícím příkladu výstupu:

    {
      "principalId": null,
      "tenantId": null,
      "type": "UserAssigned",
      "userAssignedIdentities": <identity-resource-id>
          "clientId": "<client-id>",
          "principalId": "<principal-id>"
    },
    

Aktualizace clusteru pomocí identity kubeletu

  1. Pokud nemáte spravovanou identitu kubelet, vytvořte ji pomocí az identity create příkazu.

    az identity create --name myKubeletIdentity --resource-group myResourceGroup
    

    Výstup by měl vypadat podobně jako v následujícím příkladu výstupu:

    {
      "clientId": "<client-id>",
      "clientSecretUrl": "<clientSecretUrl>",
      "id": "/subscriptions/<subscriptionid>/resourcegroups/myResourceGroup/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity",
      "location": "westus2",
      "name": "myKubeletIdentity",
      "principalId": "<principal-id>",
      "resourceGroup": "myResourceGroup",                       
      "tags": {},
      "tenantId": "<tenant-id>",
      "type": "Microsoft.ManagedIdentity/userAssignedIdentities"
    }
    
  2. Pomocí příkazu aktualizujte cluster pomocí existujících identit az aks update . Nezapomeňte zadat ID prostředku spravované identity pro řídicí rovinu zahrnutím argumentu assign-identity a spravované identity kubelet pro assign-kubelet-identity argument.

    az aks update \
        --resource-group myResourceGroup \
        --name myManagedCluster \
        --enable-managed-identity \
        --assign-identity <identity-resource-id> \
        --assign-kubelet-identity <kubelet-identity-resource-id>
    

    Výstup úspěšné aktualizace clusteru s použitím vlastní spravované identity kubeletu by měl vypadat jako v následujícím příkladu výstupu:

      "identity": {
        "principalId": null,
        "tenantId": null,
        "type": "UserAssigned",
        "userAssignedIdentities": {
          "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": {
            "clientId": "<client-id>",
            "principalId": "<principal-id>"
          }
        }
      },
      "identityProfile": {
        "kubeletidentity": {
          "clientId": "<client-id>",
          "objectId": "<object-id>",
          "resourceId": "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myKubeletIdentity"
        }
      },
    

Další kroky

  • Pomocí šablon Azure Resource Manageru vytvořte cluster s podporou spravované identity.
  • Zjistěte, jak [používat kubelogin][kubelogin-authentication] pro všechny podporované metody ověřování Microsoft Entra v AKS.