Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo illustra come abilitare un'identità gestita kubelet creata in un cluster del servizio Azure Kubelet nuovo o esistente, ottenere le proprietà dell'identità gestita kubelet e aggiungere un'assegnazione di ruolo per l'identità gestita kubelet.
Prerequisiti
Leggere Panoramica delle identità gestite nel servizio Azure Kubernetes (AKS) per comprendere i diversi tipi di identità gestite disponibili in AKS e come usarle per accedere in modo sicuro alle risorse Azure.
Imposta l'abbonamento come abbonamento attivo corrente usando il comando
az account set.az account set --subscription <subscription-id>
Un gruppo di risorse di Azure esistente. Se non è disponibile, è possibile crearne uno usando il
az group createcomando .az group create \ --name <resource-group-name> \ --location <location>
- Azure CLI versione 2.26.0 o successiva installata. Eseguire
az --versionper trovare la versione. Se è necessario installare o aggiornare, vedere Installare Azure CLI.
- Terraform installato localmente. Per istruzioni di installazione, vedere Installare Terraform.
Limitazioni
- Dopo aver creato un cluster con un'identità gestita, non è possibile tornare all'uso di un'entità servizio.
- Lo spostamento o la migrazione di un cluster abilitato per l'identità gestita a un tenant diverso non è supportato.
- Se nel cluster è abilitata l'identità gestita dal pod di Microsoft Entra (
aad-pod-identity), i pod di identità gestita dal nodo modificano le tabelle iptable dei nodi per intercettare le chiamate all'endpoint IMDS (Azure Instance Metadata). Questa configurazione implica che qualsiasi richiesta inviata all'endpoint IMDS venga intercettata da NMI, anche se un particolare pod non utilizzaaad-pod-identity.- È possibile configurare la definizione di risorsa personalizzata (CRD) di AzurePodIdentityException per specificare che le richieste all'endpoint IMDS provenienti da un pod che corrispondono a etichette definite nel CRD devono essere inoltrate tramite proxy senza alcuna elaborazione in NMI. Escludere i pod di sistema con l'etichetta
kubernetes.azure.com/managedby: aksnello spazio dei nomi kube-system inaad-pod-identityconfigurando il CRD AzurePodIdentityException. Per ulteriori informazioni, vedere Usare le identità gestite dai pod di Microsoft Entra nel servizio Azure Kubernetes (AKS). - Per configurare un'eccezione, installare mic-exception YAML.
- È possibile configurare la definizione di risorsa personalizzata (CRD) di AzurePodIdentityException per specificare che le richieste all'endpoint IMDS provenienti da un pod che corrispondono a etichette definite nel CRD devono essere inoltrate tramite proxy senza alcuna elaborazione in NMI. Escludere i pod di sistema con l'etichetta
- Un'identità kubelet pre-creata deve essere un'identità gestita assegnata dall'utente.
- Le aree Cina orientale e Cina settentrionale in Microsoft Azure gestite da 21Vianet non sono supportate.
Importante
Tutte le funzionalità di Microsoft Defender for Cloud verranno ritirate ufficialmente nell'Azure nella regione della Cina il 18 agosto 2026. A causa di questo prossimo ritiro, i clienti di Azure in Cina non sono più in grado di eseguire l'onboarding di nuove sottoscrizioni al servizio. Una nuova sottoscrizione è una sottoscrizione che non è già stata inserita nel servizio Microsoft Defender for Cloud prima del 18 agosto 2025, la data dell'annuncio di ritiro. Per altre informazioni sul ritiro, vedere Annuncio relativo alla deprecazione di Microsoft Defender for Cloud in Microsoft Azure gestito da 21Vianet.
I clienti devono collaborare con i rappresentanti dell'account per Microsoft Azure gestito da 21Vianet per valutare l'impatto di questo ritiro sulle proprie operazioni.
Considerazioni sull'aggiornamento del cluster
Quando si aggiorna un cluster, prendere in considerazione le informazioni seguenti:
- Un aggiornamento funziona solo se è disponibile un aggiornamento VHD da utilizzare. Se si esegue l'ultimo VHD, è necessario attendere che il prossimo VHD sia disponibile per effettuare l'aggiornamento.
- L'interfaccia della riga di comando di Azure garantisce che l'autorizzazione del componente aggiuntivo sia impostata correttamente dopo la migrazione. Se non si usa l'interfaccia della riga di comando di Azure per eseguire l'operazione di migrazione, è necessario gestire manualmente l'autorizzazione dell'identità del componente aggiuntivo. Per un esempio relativo all'uso di un modello di Azure Resource Manager (ARM), vedere Assign Azure roles using ARM templates.
- Se il cluster usava
--attach-acrper eseguire il pull da immagini da Azure Container Registry (ACR), è necessario eseguire il comandoaz aks update --resource-group <resource-group-name> --name <aks-cluster-name> --attach-acr <acr-resource-id>dopo aver aggiornato il cluster per consentire al kubelet appena creato usato per l'identità gestita di ottenere l'autorizzazione per eseguire il pull da Registro Azure Container. In caso contrario, non sarà possibile prelevare da Azure Container Registry dopo l'aggiornamento.
Creare un'identità gestita da kubelet
Se non si ha un'identità gestita kubelet, crearne una usando il comando az identity create.
az identity create \
--name <kubelet-identity-name> \
--resource-group <resource-group-name>
L'output dovrebbe essere simile all'output di esempio seguente:
{
"clientId": "<client-id>",
"clientSecretUrl": "<clientSecretUrl>",
"id": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>",
"location": "<location>",
"name": "<kubelet-identity-name>",
"principalId": "<principal-id>",
"resourceGroup": "<resource-group-name>",
"tags": {},
"tenantId": "<tenant-id>",
"type": "Microsoft.ManagedIdentity/userAssignedIdentities"
}
Assegnare un ruolo controllo degli accessi in base al ruolo all'identità gestita kubelet
Assegnare il ruolo acrpull nell'identità gestita da kubelet usando il comando az role assignment create.
az role assignment create \
--assignee <kubelet-client-id> \
--role "acrpull" \
--scope "<acr-registry-id>"
Abilitare un'identità gestita del kubelet in un nuovo cluster AKS
Creare un cluster AKS utilizzando le identità esistenti usando il comando az aks create.
az aks create \
--resource-group <resource-group-name> \
--name <aks-cluster-name> \
--network-plugin azure \
--vnet-subnet-id <vnet-subnet-id> \
--dns-service-ip 10.2.0.10 \
--service-cidr 10.2.0.0/24 \
--assign-identity <identity-resource-id> \
--assign-kubelet-identity <kubelet-identity-resource-id> \
--generate-ssh-keys
Una creazione riuscita di un cluster AKS utilizzando un'identità gestita da kubelet dovrebbe produrre un output simile al seguente:
...
"identity": {
"principalId": null,
"tenantId": null,
"type": "UserAssigned",
"userAssignedIdentities": {
"/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": {
"clientId": "<client-id>",
"principalId": "<principal-id>"
}
}
},
"identityProfile": {
"kubeletidentity": {
"clientId": "<client-id>",
"objectId": "<object-id>",
"resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>"
}
},
...
Aggiornare un cluster esistente per usare un'identità gestita da kubelet
Per aggiornare un cluster esistente per usare l'identità gestita kubelet, ottenere prima di tutto l'identità gestita del piano di controllo corrente per il cluster del servizio Azure Kubernetes.
Avviso
Aggiornando l'identità gestita da kubelet aggiorna i pool di nodi del cluster del servizio Azure Kubernetes AKS, assicurarsi di avere le corrette configurazioni di disponibilità, ad esempio Pod Disruption Budgets, configurate prima di eseguire questa operazione per evitare interruzioni del carico di lavoro o eseguire l'aggiornamento durante una finestra di manutenzione.
Verificare che il cluster AKS stia usando l'identità gestita assegnata dall'utente usando il comando
az aks show.az aks show \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --query "servicePrincipalProfile"Se il cluster usa un'identità gestita, l'output viene visualizzato
clientIdcon un valore msi. Un cluster che usa un'entità servizio mostra un ID oggetto. Per esempio:{ "clientId": "msi" }Dopo aver confermato che il cluster usa un'identità gestita, trovare l'ID risorsa dell'identità gestita usando il comando
az aks show.az aks show --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --query "identity"Per un'identità gestita assegnata dall'utente, l'output dovrebbe essere simile all'output di esempio seguente:
{ "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": <identity-resource-id> "clientId": "<client-id>", "principalId": "<principal-id>" },Aggiornare il cluster con le identità esistenti usando il comando
az aks update. Specificare l'ID risorsa dell'identità gestita assegnata dall'utente per il piano di controllo per il parametroassign-identity. Specificare l'ID risorsa dell'identità gestita kubelet per il parametroassign-kubelet-identity.az aks update \ --resource-group <resource-group-name> \ --name <aks-cluster-name> \ --enable-managed-identity \ --assign-identity <identity-resource-id> \ --assign-kubelet-identity <kubelet-identity-resource-id>L'output per un aggiornamento riuscito del cluster usando la propria identità gestita di kubelet dovrebbe assomigliare al seguente output di esempio:
... "identity": { "principalId": null, "tenantId": null, "type": "UserAssigned", "userAssignedIdentities": { "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<identity-name>": { "clientId": "<client-id>", "principalId": "<principal-id>" } } }, "identityProfile": { "kubeletidentity": { "clientId": "<client-id>", "objectId": "<object-id>", "resourceId": "/subscriptions/<subscription-id>/resourcegroups/<resource-group-name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<kubelet-identity-name>" } }, ...
Ottenere le proprietà dell'identità gestita da kubelet
Ottenere le proprietà dell'identità gestita da kubelet usando il comando az aks show ed eseguire la query sulla proprietà identityProfile.kubeletidentity.
az aks show \
--name <aks-cluster-name> \
--resource-group <resource-group-name> \
--query "identityProfile.kubeletidentity"
Creare il file di configurazione terraform
I file di configurazione terraform definiscono l'infrastruttura creata e gestita da Terraform.
Creare un file denominato
main.tfe aggiungere il codice seguente per definire la versione terraform e specificare il provider di Azure:terraform { required_version = ">= 1.0" required_providers { azurerm = { source = "hashicorp/azurerm" version = "~> 4.0" } } } provider "azurerm" { features {} }Aggiungi il seguente codice a
main.tfper creare un gruppo di risorse di Azure. È possibile modificare il nome e la posizione del gruppo di risorse in base alle esigenze.resource "azurerm_resource_group" "example" { name = "aks-rg" location = "East US" }
Creare un cluster AKS con un'identità gestita di kubelet precreata usando Terraform.
Aggiungere il codice seguente a main.tf per creare un'identità gestita kubelet e un cluster AKS che usa l'identità gestita kubelet.
resource "azurerm_user_assigned_identity" "kubelet" {
name = "aks-kubelet-identity"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
}
resource "azurerm_kubernetes_cluster" "kubelet_identity" {
name = "aks-kubelet"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
dns_prefix = "akskubelet"
identity {
type = "UserAssigned"
identity_ids = [azurerm_user_assigned_identity.kubelet.id]
}
kubelet_identity {
client_id = azurerm_user_assigned_identity.kubelet.client_id
object_id = azurerm_user_assigned_identity.kubelet.principal_id
user_assigned_identity_id = azurerm_user_assigned_identity.kubelet.id
}
default_node_pool {
name = "system"
node_count = 1
vm_size = "Standard_DS2_v2"
}
}
Aggiungere un'assegnazione di ruolo per l'identità gestita kubelet usando Terraform
Aggiungere il codice seguente a main.tf per creare un'assegnazione di ruolo per l'identità gestita kubelet. Questo esempio assegna il ruolo AcrPull all'identità gestita kubelet per concedergli le autorizzazioni per eseguire il pull delle immagini dal Registro Azure Container. L'assegnazione di ruolo ha come ambito il gruppo di risorse.
Annotazioni
Negli scenari di produzione assegnare il ruolo AcrPull nell'ambito di Registro Azure Container anziché al gruppo di risorse.
resource "azurerm_role_assignment" "kubelet_acr_pull" {
scope = azurerm_resource_group.example.id
role_definition_name = "AcrPull"
principal_id = azurerm_user_assigned_identity.kubelet.principal_id
}
Inizializzare Terraform
Inizializzare Terraform nella directory contenente il main.tf file usando il terraform init comando . Questo comando scarica il provider di Azure necessario per gestire le risorse di Azure con Terraform.
terraform init
Crea un piano di esecuzione di Terraform
Creare un piano di esecuzione terraform usando il comando terraform plan. Questo comando mostra le risorse che Terraform creerà o modificherà nella sottoscrizione di Azure.
terraform plan
Applicare la configurazione di Terraform
Dopo aver esaminato e confermato il piano di esecuzione, applicare la configurazione di Terraform usando il terraform apply comando . Questo comando crea o modifica le risorse definite nel main.tf file nella sottoscrizione di Azure.
terraform apply
Verificare la distribuzione di Terraform
Dopo aver applicato la configurazione di Terraform, è possibile verificare la distribuzione usando il az aks show comando con il --query parametro per filtrare l'output e visualizzare le informazioni sull'identità. Per esempio:
az aks show \
--name <cluster-name> \
--resource-group <resource-group> \
--query identity.type \
--output tsv
Contenuti correlati
Per ulteriori informazioni sulle identità gestite nel servizio Azure Kubernetes Service (AKS), vedere gli articoli seguenti: