Usare un'entità servizio con servizio Azure Kubernetes (Servizio Azure Kubernetes)

Per accedere ad altre risorse di Azure Active Directory (Azure AD), un cluster del servizio Azure Kubernetes richiede un'entità servizio Azure Active Directory (AD) o un'identità gestita. È necessaria un'entità servizio o un'identità gestita per creare e gestire dinamicamente altre risorse di Azure, ad esempio un servizio di bilanciamento del carico di Azure o un registro contenitori.

Le identità gestite sono il modo consigliato per eseguire l'autenticazione con altre risorse in Azure ed è 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 servizio Azure Kubernetes.

Prima di iniziare

Per creare un'entità servizio di Azure AD, sono necessarie le autorizzazioni per registrare un'applicazione con il tenant di Azure AD e per assegnare l'applicazione a un ruolo nella sottoscrizione. Se non si dispone delle autorizzazioni necessarie, è necessario chiedere all'amministratore di Azure AD o alla sottoscrizione 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 di Azure AD diverso, sono disponibili altre considerazioni sulle autorizzazioni disponibili quando si distribuisce il cluster. Potrebbero non essere disponibili le autorizzazioni appropriate per leggere e scrivere informazioni sulla directory. Per altre informazioni, vedere Informazioni sulle autorizzazioni utente predefinite in Azure Active Directory?

Prerequisiti

Interfaccia della riga di comando di Azure versione 2.0.59 o successiva. 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.

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 manualmente un'entità servizio

Per creare manualmente un'entità servizio con l'interfaccia della riga di comando di Azure, usare il comando az ad sp create-for-rbac.

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

L'output è simile all'esempio seguente: Copiare i valori per appId e password. Questi valori serviranno per creare il cluster servizio Azure Kubernetes nella sezione successiva.

{
  "appId": "559513bd-0c19-4c1a-87cd-851a26afd5fc",
  "displayName": "myAKSClusterServicePrincipal",
  "name": "http://myAKSClusterServicePrincipal",
  "password": "e763725a-5eee-40e8-a466-dc88d980f415",
  "tenant": "72f988bf-86f1-41af-91ab-2d7cd011db48"
}

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

Per usare un'entità servizio esistente quando si crea un cluster servizio Azure Kubernetes con il comando az servizio Azure Kubernetes create, utilizzare i parametri --service-principal e --client-secret per specificare appId e password dall'output del comando az ad sp create-for-rbac:

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 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 a Registro Azure Container (ACR), è necessario delegare l'accesso a tali risorse all'entità servizio.

Per delegare le autorizzazioni, 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. Un ruolo definisce quindi le autorizzazioni che l'entità servizio possiede nella risorsa, come illustrato nell'esempio seguente:

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

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

Nota

Se l'assegnazione di ruolo Collaboratore è stata rimossa dal gruppo di risorse del nodo, le operazioni seguenti potrebbero non riuscire. L'autorizzazione concessa a un cluster usando un'identità gestita assegnata dal sistema può richiedere fino a 60 minuti per popolare.

Le sezioni seguenti illustrano le delega comuni che potrebbero essere necessarie per assegnare.

Registro Azure Container

Se si usa Registro Azure Container (ACR) come archivio immagini contenitore, è necessario concedere le autorizzazioni all'entità servizio per il cluster del servizio Kubernetes per leggere e eseguire il pull delle immagini. Attualmente, la configurazione consigliata consiste nell'usare il comando az aks create o az aks update per integrare con un Registro di sistema e assegnare il ruolo appropriato per l'entità servizio. Per i passaggi dettagliati, vedere Eseguire l'autenticazione con Registro Azure Container da 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 di 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 Servizio Azure Kubernetes.

Archiviazione

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

Istanze di Azure Container

Se si usa Virtual Kubelet per l'integrazione con il servizio Azure Kubelet e si sceglie di eseguire Istanze di Azure Container (ACI) nel gruppo di risorse separato dal cluster del servizio Azure Kubernetes, l'entità servizio cluster del servizio Azure Kubernetes deve essere concessa alle autorizzazioni Collaboratore per il gruppo di risorse ACI.

Altre considerazioni

Quando si usa il servizio Azure Kubernetes e un'entità servizio Azure AD, prendere in considerazione quanto segue:

  • L'entità servizio per Kubernetes fa parte della configurazione del cluster. Tuttavia, non usare 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 Azure AD. L'entità servizio per un cluster Kubernetes può essere associata a qualsiasi nome applicazione Azure AD 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 usa il comando az servizio Azure Kubernetes create per generare automaticamente l'entità servizio, le credenziali dell'entità servizio vengono scritte nel file ~/.azure/aksServicePrincipal.json nel computer utilizzato per eseguire il comando.
  • Se non si specifica un'entità servizio con i comandi dell'interfaccia della riga di comando del servizio Azure Kubernetes, viene usata l'entità servizio predefinita in .~/.azure/aksServicePrincipal.json
  • Facoltativamente, è possibile rimuovere il file e il aksServicePrincipal.json servizio Azure Kubernetes crea una nuova entità servizio.
  • Quando si elimina un cluster del servizio Azure Kubernetes creato da az aks create, l'entità servizio creata automaticamente non viene eliminata.
    • Per eliminare l'entità servizio, eseguire una query per il servizio servicePrincipalProfile.clientId e quindi eliminarla usando il comando az ad sp delete . Sostituire i valori per il parametro per il -g nome del gruppo di risorse e -n il parametro per il nome del cluster:

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

Risolvere problemi

Le credenziali dell'entità servizio per un cluster del servizio Azure Kubernetes vengono memorizzate nella cache dall'interfaccia della riga di comando di Azure. Se queste credenziali sono scadute, si verificano errori durante la distribuzione del cluster del servizio Azure Kubernetes. Il seguente messaggio di errore durante l'esecuzione di az aks create può 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'.

Controllare l'età del file di credenziali eseguendo il comando seguente:

ls -la $HOME/.azure/aksServicePrincipal.json

La scadenza predefinita per le credenziali dell'entità servizio è di un anno. Se il file aksServicePrincipal.json è precedente a un anno, eliminare il file e riprovare a distribuire il cluster del servizio Azure Kubernetes.

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 variazioni di formato leggero. 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 di Azure Active Directory, 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.