Använda en hanterad identitet i Azure Kubernetes Service (AKS)
Azure Kubernetes Service-kluster (AKS) kräver en identitet för åtkomst till Azure-resurser som lastbalanserare och hanterade diskar. Identiteten kan vara en hanterad identitet eller ett huvudnamn för tjänsten.
Den här artikeln innehåller information om hur du aktiverar följande hanterade identitetstyper i ett nytt eller befintligt AKS-kluster:
- Systemtilldelad hanterad identitet
- Ta med din egen användartilldelade hanterade identitet
- Fördefinierad Kubelet-hanterad identitet
Översikt
När du distribuerar ett AKS-kluster skapas en systemtilldelad hanterad identitet automatiskt och hanteras av Azure-plattformen, så det kräver inte att du etablerar eller roterar några hemligheter. Mer information finns i Hanterade identiteter för Azure-resurser.
AKS skapar inte automatiskt ett huvudnamn för tjänsten, så du måste skapa ett. Kluster som använder ett huvudnamn för tjänsten upphör så småningom att gälla och tjänstens huvudnamn måste förnyas för att undvika att påverka klusterautentiseringen med identiteten. Att hantera tjänstens huvudnamn ökar komplexiteten, så det är enklare att använda hanterade identiteter i stället. Samma behörighetskrav gäller för både tjänstens huvudnamn och hanterade identiteter. Hanterade identiteter använder certifikatbaserad autentisering. Varje hanterad identitets autentiseringsuppgifter har en giltighetstid på 90 dagar och distribueras efter 45 dagar.
AKS använder både systemtilldelade och användartilldelade hanterade identitetstyper, och dessa identiteter är oföränderliga. Dessa identitetstyper bör inte förväxlas med en Microsoft Entra-arbetsbelastningsidentitet, som är avsedd att användas av ett program som körs på en podd.
Viktigt!
Den öppen källkod Microsoft Entra-poddhanterade identiteten (förhandsversion) i Azure Kubernetes Service blev inaktuell den 24 september 2022 och projektet arkiverades i september 2023. Mer information finns i utfasningsmeddelandet. AKS Managed-tillägget börjar fasas ut i september 2024.
Vi rekommenderar att du först läser översikten över Microsoft Entra-arbetsbelastnings-ID . Entra-arbetsbelastnings-ID-autentisering ersätter Microsoft Entra-poddhanterad identitet (förhandsversion) och är den rekommenderade metoden för att aktivera ett program som körs på en podd för att autentisera sig mot andra Azure-tjänster som stöder det.
Innan du börjar
Kontrollera att du har Azure CLI version 2.23.0 eller senare installerat. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI.Om du vill använda en i förväg skapad kubelet-hanterad identitet behöver du Azure CLI version 2.26.0 eller senare installerad.
Om du vill uppdatera hanterad identitet i ett befintligt kluster behöver du Azure CLI version 2.49.0 eller senare installerat.
Begränsningar
- Klienter som flyttar eller migrerar ett hanterat identitetsaktiverat kluster stöds inte.
- Om klustret har Microsoft Entra poddhanterad identitet (
aad-pod-identity
) aktiverad ändrar NMI-poddar (Node-Managed Identity) iptables för noderna för att fånga upp anrop till IMDS-slutpunkten (Azure Instance Metadata). Den här konfigurationen innebär att alla begäranden som görs till metadataslutpunkten fångas upp av NMI, även om podden inte använderaad-pod-identity
. AzurePodIdentityException CRD kan konfigureras för att informera omaad-pod-identity
begäranden till metadataslutpunkten som kommer från en podd som matchar etiketter som definierats i CRD bör vara proxied utan någon bearbetning i NMI. Systempoddar medkubernetes.azure.com/managedby: aks
etikett i kube-system-namnområdet bör undantas genomaad-pod-identity
att konfigurera AzurePodIdentityException CRD.- Mer information finns i Inaktivera Microsoft Entra ID-pod-identity för en specifik podd eller ett visst program.
- Om du vill konfigurera ett undantag installerar du YAML med mikrofonfel.
- AKS stöder inte användning av en systemtilldelad hanterad identitet när du använder en anpassad privat DNS-zon.
Sammanfattning av hanterade identiteter
AKS använder flera hanterade identiteter för inbyggda tjänster och tillägg.
Identitet | Name | Användningsfall | Standardbehörigheter | Ta med din egen identitet |
---|---|---|---|---|
Kontrollplan | AKS-klusternamn | Används av AKS-kontrollplanskomponenter för att hantera klusterresurser, inklusive inkommande lastbalanserare och AKS-hanterade offentliga IP-adresser, Autoskalning av kluster, Azure Disk, Fil, Blob CSI-drivrutiner. | Deltagarroll för nodresursgrupp | Stöds |
Kubelet | AKS-klusternamn-agentpool | Autentisering med Azure Container Registry (ACR). | N/A (för kubernetes v1.15+) | Stöds |
Tillägg | AzureNPM | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | Nätverksövervakning i AzureCNI | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | azure-policy (gatekeeper) | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | azure-policy | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | Kalikå | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | Instrumentpanel | Ingen identitet krävs. | Ej tillämpligt | Nej |
Tillägg | programroutning | Hanterar Azure DNS- och Azure Key Vault-certifikat | Key Vault Secrets User-roll för Key Vault, DNZ-zondeltagareroll för DNS-zoner, Privat DNS zondeltagareroll för privata DNS-zoner | Nej |
Tillägg | HTTPApplicationRouting | Hanterar nödvändiga nätverksresurser. | Läsarroll för nodresursgrupp, deltagarroll för DNS-zon | Nej |
Tillägg | Inkommande programgateway | Hanterar nödvändiga nätverksresurser. | Deltagarroll för nodresursgrupp | Nej |
Tillägg | omsagent | Används för att skicka AKS-mått till Azure Monitor. | Övervaka utgivarrollen för mått | Nej |
Tillägg | Virtual-Node (ACI Anslut or) | Hanterar nödvändiga nätverksresurser för Azure Container Instances (ACI). | Deltagarroll för nodresursgrupp | Nej |
Tillägg | Kostnadsanalys | Används för att samla in kostnadsallokeringsdata | ||
Arbetsbelastningsidentitet | Microsoft Entra-arbetsbelastnings-ID | Gör att program kan komma åt molnresurser på ett säkert sätt med Microsoft Entra-arbetsbelastnings-ID. | Ej tillämpligt | Nej |
Aktivera hanterade identiteter i ett nytt AKS-kluster
Kommentar
AKS skapar en användartilldelad kubelet-identitet i nodresursgruppen om du inte anger en egen kubelet-hanterad identitet.
Kommentar
Om klustret redan använder hanterad identitet och identiteten har ändrats, till exempel om du uppdaterar klusteridentitetstypen från systemtilldelad till användartilldelad, finns det en fördröjning för kontrollplanskomponenter att växla till den nya identiteten. Kontrollplanskomponenter fortsätter att använda den gamla identiteten tills dess token upphör att gälla. När token har uppdaterats växlar de till den nya identiteten. Den här processen kan ta flera timmar.
Skapa en Azure-resursgrupp med kommandot
az group create
.az group create --name myResourceGroup --location westus2
Skapa ett AKS-kluster med kommandot
az aks create
.az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
Hämta autentiseringsuppgifter för att komma åt klustret med hjälp av
az aks get-credentials
kommandot .az aks get-credentials --resource-group myResourceGroup --name myManagedCluster
Aktivera hanterade identiteter i ett befintligt AKS-kluster
Kör kommandot för att uppdatera ditt befintliga AKS-kluster som använder tjänstens huvudnamn för att använda en systemtilldelad hanterad identitet az aks update
.
az aks update -g myResourceGroup -n myManagedCluster --enable-managed-identity
När du har uppdaterat klustret använder kontrollplanet och poddarna den hanterade identiteten. Kubelet fortsätter att använda ett huvudnamn för tjänsten tills du uppgraderar din agentpool. Du kan använda az aks nodepool upgrade --resource-group myResourceGroup --cluster-name myAKSCluster --name mynodepool --node-image-only
kommandot på noderna för att uppdatera till en hanterad identitet. En uppgradering av nodpoolen orsakar stilleståndstid för ditt AKS-kluster eftersom noderna i nodpoolerna är avspärrade/tömda och omskapade.
Kommentar
Tänk på följande när du uppdaterar klustret:
En uppdatering fungerar bara om det finns en VHD-uppdatering att använda. Om du kör den senaste virtuella hårddisken måste du vänta tills nästa virtuella hårddisk är tillgänglig för att kunna utföra uppdateringen.
Azure CLI säkerställer att tilläggets behörighet har angetts korrekt efter migreringen. Om du inte använder Azure CLI för att utföra migreringsåtgärden måste du hantera addon-identitetens behörighet själv. Ett exempel på hur du använder en ARM-mall (Azure Resource Manager) finns i Tilldela Azure-roller med ARM-mallar.
Om klustret använde
--attach-acr
för att hämta från avbildningar från Azure Container Registry måste du köraaz aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR resource ID>
kommandot efter uppdateringen av klustret så att den nyligen skapade kubelet som används för hanterad identitet får behörighet att hämta från ACR. Annars kan du inte hämta från ACR efter uppdateringen.
Lägga till rolltilldelning för hanterad identitet
När du skapar och använder ett eget virtuellt nätverk, kopplar Azure-diskar, statiska IP-adresser, routningstabeller eller användartilldelade kubelet-identiteter där resurserna ligger utanför resursgruppen för arbetsnoden lägger Azure CLI till rolltilldelningen automatiskt. Om du använder en ARM-mall eller en annan metod måste du använda huvud-ID:t för den klusterhanterade identiteten för att utföra en rolltilldelning.
Om du inte använder Azure CLI, men du använder ditt eget virtuella nätverk, ansluter Azure-diskar, statiska IP-adresser, routningstabeller eller användartilldelade kubelet-identiteter som ligger utanför resursgruppen för arbetsnoden, rekommenderar vi att du använder användartilldelad hanterad identitet för kontrollplanet. För att kontrollplanet ska använda en systemtilldelad hanterad identitet kan vi inte hämta identitets-ID:t innan klustret skapas, vilket gör att rolltilldelningen inte börjar gälla.
Hämta huvud-ID för hanterad identitet
Hämta den befintliga identitetens huvud-ID med kommandot
az identity show
.az identity show --ids <identity-resource-id>
Dina utdata bör likna följande exempelutdata:
{ "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" }
Lägg till rolltilldelning
För ett VNet, en ansluten Azure-disk, en statisk IP-adress eller en routningstabell utanför standardresursgruppen för arbetsnoden Contributor
måste du tilldela rollen för den anpassade resursgruppen.
Tilldela rollen för
Contributor
den anpassade resursgruppen med kommandotaz role assignment create
.az role assignment create --assignee <control-plane-identity-principal-id> --role "Contributor" --scope "<custom-resource-group-resource-id>"
För en användartilldelad kubelet-identitet utanför standardresursgruppen för arbetsnoden måste du tilldela rollen Hanterad identitetsoperator på kubelet-identiteten för kontrollplanets hanterade identitet.
Managed Identity Operator
Tilldela rollen på kubelet-identitetenaz role assignment create
med kommandot .az role assignment create --assignee <control-plane-identity-principal-id> --role "Managed Identity Operator" --scope "<kubelet-identity-resource-id>"
Kommentar
Det kan ta upp till 60 minuter innan de behörigheter som beviljas till klustrets hanterade identitet fylls i.
Ta med din egen hanterade identitet
Skapa ett kluster med användartilldelad hanterad identitet
En anpassad användartilldelad hanterad identitet för kontrollplanet ger åtkomst till den befintliga identiteten innan klustret skapas. Den här funktionen möjliggör scenarier som att använda ett anpassat VNet eller utgåendeTyp av UDR med en i förväg skapad hanterad identitet.
Kommentar
Regionerna USDOD Central, USDOD East och USGov Iowa i Azure US Government-molnet stöds inte.
AKS skapar en användartilldelad kubelet-identitet i nodresursgruppen om du inte anger en egen kubelet-hanterad identitet.
Om du inte har en hanterad identitet skapar du en med kommandot
az identity create
.az identity create --name myIdentity --resource-group myResourceGroup
Dina utdata bör likna följande exempelutdata:
{ "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" }
Kommentar
Det kan ta upp till 60 minuter innan de behörigheter som beviljas till klustrets hanterade identitet fylls i.
Innan du skapar klustret lägger du till rolltilldelningen för hanterad identitet med kommandot
az role assignment create
.Skapa klustret med användartilldelad hanterad identitet.
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>
Uppdatera hanterad identitet i ett befintligt kluster
Kommentar
Att migrera en hanterad identitet för kontrollplanet, från systemtilldelad till användartilldelad, orsakar ingen stilleståndstid för kontrollplanet och agentpoolerna. Under tiden fortsätter kontrollplanskomponenterna att använda den gamla systemtilldelade identiteten i flera timmar tills nästa token uppdateras.
Om du inte har en hanterad identitet skapar du en med kommandot
az identity create
.az identity create --name myIdentity --resource-group myResourceGroup
Dina utdata bör likna följande exempelutdata:
{ "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" }
När du har skapat den anpassade användartilldelade hanterade identiteten för kontrollplanet lägger du till rolltilldelningen för den hanterade identiteten
az role assignment create
med kommandot .Uppdatera klustret med dina befintliga identiteter med hjälp av
az aks update
kommandot . Se till att ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkluderaassign-identity
argumentet.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-managed-identity \ --assign-identity <identity-resource-id>
Dina utdata för en lyckad klusteruppdatering med din egen kubelet-hanterade identitet bör likna följande exempelutdata:
"identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscriptionid>/resourcegroups/resourcegroups/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myIdentity": { "clientId": "<client-id>", "principalId": "<principal-id>" } } },
Använda en i förväg skapad kubelet-hanterad identitet
En kubelet-identitet ger åtkomst till den befintliga identiteten innan klustret skapas. Den här funktionen möjliggör scenarier som anslutning till ACR med en i förväg skapad hanterad identitet.
Förskapade kubelet-identitetsbegränsningar
- Fungerar bara med ett användartilldelat hanterat kluster.
- Regionerna Kina, östra och Kina, norra i Microsoft Azure som drivs av 21Vianet stöds inte.
Skapa användartilldelade hanterade identiteter
Hanterad identitet för kontrollplan
Om du inte har någon hanterad identitet för kontrollplanet skapar du en med hjälp av
az identity create
.az identity create --name myIdentity --resource-group myResourceGroup
Dina utdata bör likna följande exempelutdata:
{ "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" }
kubelet managed identity
Om du inte har en kubelet-hanterad identitet skapar du en med kommandot
az identity create
.az identity create --name myKubeletIdentity --resource-group myResourceGroup
Dina utdata bör likna följande exempelutdata:
{ "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" }
Skapa ett kluster med användartilldelad kubelet-identitet
Nu kan du skapa ditt AKS-kluster med dina befintliga identiteter. Ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkludera assign-identity
argumentet och den kubelet-hanterade identiteten assign-kubelet-identity
med argumentet .
Skapa ett AKS-kluster med dina befintliga identiteter med kommandot
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>
Ett lyckat AKS-kluster som skapas med din egen kubelet-hanterade identitet bör likna följande exempelutdata:
"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" } },
Uppdatera ett befintligt kluster med kubelet-identitet
Varning
Uppdatering av kubelet-hanterad identitet uppgraderar nodpooler, vilket orsakar stilleståndstid för AKS-klustret eftersom noderna i nodpoolerna är avspärrade/tömda och omskapade.
Kommentar
Om klustret använde --attach-acr
för att hämta från avbildningar från Azure Container Registry måste du köra az aks update --resource-group myResourceGroup --name myAKSCluster --attach-acr <ACR Resource ID>
kommandot efter uppdateringen av klustret så att den nyligen skapade kubelet som används för hanterad identitet får behörighet att hämta från ACR. Annars kan du inte hämta från ACR efter uppgraderingen.
Hämta den aktuella hanterade identiteten för kontrollplanet för ditt AKS-kluster
Bekräfta att AKS-klustret använder den användartilldelade hanterade identiteten
az aks show
med hjälp av kommandot .az aks show -g <RGName> -n <ClusterName> --query "servicePrincipalProfile"
Om klustret använder en hanterad identitet visas
clientId
utdata med värdet msi. Ett kluster som använder tjänstens huvudnamn visar ett objekt-ID. Till exempel:{ "clientId": "msi" }
När du har bekräftat att klustret använder en hanterad identitet letar du reda på den hanterade identitetens resurs-ID med kommandot
az aks show
.az aks show -g <RGName> -n <ClusterName> --query "identity"
För en användartilldelad hanterad identitet bör dina utdata se ut ungefär som i följande exempelutdata:
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": <identity-resource-id> "clientId": "<client-id>", "principalId": "<principal-id>" },
Uppdatera klustret med kubelet-identitet
Om du inte har en kubelet-hanterad identitet skapar du en med kommandot
az identity create
.az identity create --name myKubeletIdentity --resource-group myResourceGroup
Dina utdata bör likna följande exempelutdata:
{ "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" }
Uppdatera klustret med dina befintliga identiteter med hjälp av
az aks update
kommandot . Se till att ange resurs-ID för den hanterade identiteten för kontrollplanet genom att inkluderaassign-identity
argumentet och den kubelet-hanterade identiteten förassign-kubelet-identity
argumentet.az aks update \ --resource-group myResourceGroup \ --name myManagedCluster \ --enable-managed-identity \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id>
Dina utdata för en lyckad klusteruppdatering med din egen kubelet-hanterade identitet bör likna följande exempelutdata:
"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" } },
Nästa steg
- Använd Azure Resource Manager-mallar för att skapa ett hanterat identitetsaktiverat kluster.
- Lär dig hur du [använder kubelogin][kubelogin-authentication] för alla Microsoft Entra-autentiseringsmetoder som stöds i AKS.