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
Ujistěte se, že máte nainstalované Azure CLI verze 2.23.0 nebo novější. Verzi zjistíte spuštěním příkazu
az --version
. Pokud potřebujete instalaci nebo upgrade, přečtěte si téma Instalace Azure CLI.Pokud chcete použít předem vytvořenou spravovanou identitu kubeletu, musíte mít nainstalované Rozhraní příkazového řádku Azure CLI verze 2.26.0 nebo novější.
Pokud chcete aktualizovat spravovanou identitu v existujícím clusteru, musíte mít nainstalované Azure CLI verze 2.49.0 nebo novější.
Omezení
- Tenanti, kteří přesouvají nebo migrují cluster s podporou spravované identity, se nepodporují.
- Pokud má cluster povolenou identitu
aad-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 informovalaad-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 skubernetes.azure.com/managedby: aks
popiskem v oboru názvů kube-system by měly být vyloučenyaad-pod-identity
konfigurací CRD AzurePodIdentityException.- Další informace naleznete v tématu Zakázání identity pod-pod Společnosti Microsoft pro konkrétní pod nebo aplikaci.
- Pokud chcete nakonfigurovat výjimku, nainstalujte YAML s výjimkou mikrofonu.
- 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.
Pomocí příkazu vytvořte skupinu
az group create
prostředků Azure.az group create --name myResourceGroup --location westus2
Pomocí příkazu vytvořte cluster
az aks create
AKS.az aks create -g myResourceGroup -n myManagedCluster --enable-managed-identity
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 spustitaz 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 argumentuassign-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
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" }
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
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" }
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 argumentuassign-identity
a spravované identity kubelet proassign-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.