Share via


Usare un entità servizio con il servizio Azure Kubernetes (AKS)

Un cluster del servizio Azure Kubernetes richiede un’entità servizio Microsoft Entra o un'identità gestita per creare e gestire in modo dinamico altre risorse di Azure, ad esempio Azure Load Balancer o Registro Azure Container.

Nota

È consigliabile usare le identità gestite per eseguire l'autenticazione con altre risorse in Azure e rappresentano il metodo di autenticazione predefinito per il cluster del servizio Azure Kubernetes. Per altre informazioni sull'uso di un'identità gestita con il cluster, vedere Usare un'identità gestita assegnata dal sistema.

Questo articolo illustra come creare e usare un'entità servizio per i cluster del servizio Azure Kubernetes.

Operazioni preliminari

Per creare un'entità servizio Microsoft Entra, è necessario disporre delle autorizzazioni necessarie per registrare un'applicazione con il tenant di Microsoft Entra e per assegnare l'applicazione a un ruolo nella sottoscrizione. Se non si dispone delle autorizzazioni necessarie, è necessario chiedere all'ID o all'amministratore della sottoscrizione di Microsoft Entra di assegnare le autorizzazioni necessarie o di creare un'entità servizio da usare con il cluster del servizio Azure Kubernetes.

Se si usa un'entità servizio da un tenant Microsoft Entra diverso, sono disponibili altre considerazioni sulle autorizzazioni disponibili quando si distribuisce il cluster. È possibile che non si disponga delle autorizzazioni appropriate per leggere e scrivere informazioni sulla directory. Per altre informazioni, vedere Che cosa sono le autorizzazioni utente predefinite in Microsoft Entra ID?

Prerequisiti

  • Se si usa l'interfaccia della riga di comando di Azure, è necessaria la versione 2.0.59 o successiva dell'interfaccia della riga di comando di Azure. Eseguire az --version per trovare la versione. Se è necessario eseguire l'installazione o l'aggiornamento, vedere Installare l'interfaccia della riga di comando di Azure.
  • Se si usa Azure PowerShell, è necessario Azure PowerShell versione 5.0.0 o successiva. Eseguire Get-InstalledModule -Name Az per trovare la versione. Se è necessario installare o aggiornare, vedere Installare il modulo Azure Az PowerShell.

Creare un'entità servizio manualmente

  1. Creare un'entità servizio usando il comando az ad sp create-for-rbac.

    az ad sp create-for-rbac --name myAKSClusterServicePrincipal
    

    L'output dovrebbe essere simile all'output di esempio seguente:

    {
      "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
      "displayName": "myAKSClusterServicePrincipal",
      "name": "http://myAKSClusterServicePrincipal",
      "password": "e763725a-5eee-40e8-a466-dc88d980f415",
      "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
    }
    
  2. Copiare i valori per appId e password dall'output. Questi vengono usati durante la creazione di un cluster del servizio Azure Kubernetes nella sezione successiva.

Specificare un'entità servizio per un cluster servizio Azure Kubernetes

  • Usare un'entità servizio esistente per un nuovo cluster del servizio Azure Kubernetes usando il comando az aks create, e usare i parametri --service-principal e --client-secret per specificare il appId e password dall'output ricevuto nella sezione precedente.

    az aks create \
        --resource-group myResourceGroup \
        --name myAKSCluster \
        --service-principal <appId> \
        --client-secret <password>
    

    Nota

    Se si usa un'entità servizio esistente con segreto personalizzato, assicurarsi che il segreto non sia più lungo di 190 byte.

Delegare l'accesso ad altre risorse di Azure

È possibile usare l'entità servizio per il cluster del servizio Azure Kubernetes per accedere ad altre risorse. Ad esempio, se si vuole distribuire il cluster del servizio Azure Kubernetes in una subnet di rete virtuale di Azure esistente o connettersi al Registro Azure Container, è necessario delegare l'accesso a tali risorse all'entità servizio. L'autorizzazione concessa a un cluster che usa un'identità gestita assegnata dal sistema può richiedere fino a 60 minuti per popolare.

  • Creare un'assegnazione di ruolo usando il comando az role assignment create. Assegnare l’oggetto appId a un determinato ambito, ad esempio un gruppo di risorse o una risorsa di rete virtuale. Il ruolo definisce le autorizzazioni che l'entità servizio ha per la risorsa.

    Nota

    L'oggetto --scope per una risorsa deve essere un ID risorsa completo, ad esempio /subscriptions/<guid>/resourceGroups/myResourceGroup o /subscriptions/<guid >/resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.

    az role assignment create --assignee <appId> --scope <resourceScope> --role Contributor
    

Le sezioni seguenti illustrano in dettaglio le deleghe comuni che potrebbe essere necessario assegnare.

Registro Azure Container

Se si usa Registro Azure Container come archivio immagini del contenitore, è necessario concedere autorizzazioni all'entità servizio per il cluster del servizio Azure Kubernetes per leggere ed eseguire il pull delle immagini. È consigliabile usare il comando az aks create o az aks update per l'integrazione con un registro e assegnare il ruolo appropriato per l'entità servizio. Per i passaggi dettagliati, vedere Eseguire l'autenticazione con Registro Azure Container dal servizio Azure Kubernetes.

Rete

È possibile usare le funzionalità di rete avanzate in cui la rete virtuale e la subnet o gli indirizzi IP pubblici sono in un altro gruppo di risorse. Assegnare il ruolo predefinito Collaboratore rete nella subnet all'interno della rete virtuale. In alternativa, è possibile creare un ruolo personalizzato con autorizzazioni per accedere alle risorse di rete in tale gruppo di risorse. Per altre informazioni, vedere Autorizzazioni del servizio Azure Kubernetes.

Storage

Se è necessario accedere alle risorse disco esistenti in un altro gruppo di risorse, assegnare uno dei set di autorizzazioni di ruolo seguenti:

Istanze di Azure Container

Se si usa Virtual Kubelet per l’integrazione con il servizio Azure Kubernetes e si sceglie di eseguire Istanze di Azure Container nel gruppo di risorse separato dal cluster del servizio Azure Kubernetes, è necessario concedere all'entità servizio del cluster Azure Kubernetes le autorizzazioni da collaboratore per il gruppo di risorse di Istanze di Azure Container.

Altre considerazioni

Quando si usa il servizio Azure Kubernetes e un'entità servizio Microsoft Entra, tenere presente quanto segue:

  • L'entità servizio per Kubernetes fa parte della configurazione del cluster, ma non usa questa identità per distribuire il cluster.
  • Per impostazione predefinita, le credenziali dell'entità servizio sono valide per un anno. È possibile aggiornare o ruotare le credenziali dell'entità servizio in qualsiasi momento.
  • Ogni entità servizio è associata a un'applicazione Microsoft Entra. È possibile associare l'entità servizio per un cluster Kubernetes a qualsiasi nome dell'applicazione Microsoft Entra valido( ad esempio: https://www.contoso.org/example). L'URL per l'applicazione non deve essere necessariamente un endpoint reale.
  • Quando si specifica l'ID client dell'entità servizio, usare il valore di appId.
  • Nelle macchine virtuali del nodo agente nel cluster Kubernetes le credenziali dell'entità servizio vengono archiviate nel file /etc/kubernetes/azure.json.
  • Quando si elimina un cluster del servizio Azure Kubernetes creato usando il comando az aks create, l'entità servizio creata non viene eliminata automaticamente.
    • Per eliminare l'entità servizio, eseguire una query per servicePrincipalProfile.clientId del cluster ed eliminarla usando il comando az ad sp delete. Sostituire i valori per il parametro -g per il nome del gruppo di risorse e -n parametro per il nome del cluster:

      az ad sp delete --id $(az aks show -g myResourceGroup -n myAKSCluster --query servicePrincipalProfile.clientId -o tsv)
      

Risoluzione dei problemi

L'interfaccia della riga di comando di Azure memorizza nella cache le credenziali dell'entità servizio per i cluster del servizio Azure Kubernetes. Se queste credenziali scadono, si verificano errori durante la distribuzione del cluster del servizio Azure Kubernetes. Se si esegue il comando az aks create e si riceve un messaggio di errore simile al seguente, potrebbe indicare un problema con le credenziali dell'entità servizio memorizzate nella cache:

Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.

È possibile controllare la data di scadenza delle credenziali dell'entità servizio usando il comando az ad app credential list con la query "[].endDateTime".

az ad app credential list --id <app-id> --query "[].endDateTime" -o tsv

La scadenza predefinita per le credenziali dell'entità servizio è di un anno. Se le credenziali sono precedenti a un anno, è possibile reimpostare le credenziali esistenti o creare una nuova entità servizio.

Risoluzione dei problemi generali dell'interfaccia della riga di comando di Azure

L'interfaccia della riga di comando di Azure può essere eseguita in diversi ambienti della shell, ma con lievi variazioni di formato. Se si hanno risultati imprevisti con i comandi dell'interfaccia della riga di comando di Azure, vedere Come usare correttamente l'interfaccia della riga di comando di Azure.

Passaggi successivi

Per altre informazioni sulle entità servizio Microsoft Entra, vedere oggetti applicazione e entità servizio.

Per informazioni su come aggiornare le credenziali, vedere Aggiornare o ruotare le credenziali per un'entità servizio nel servizio Azure Kubernetes.