Eseguire l'autenticazione con Registro Container di Azure (ACR) dal servizio Azure Kubernetes (AKS)

Quando si usa Registro Azure Container con il servizio Azure Kubernetes, è necessario stabilire un meccanismo di autenticazione. È possibile configurare le autorizzazioni necessarie tra Registro Azure Container e il servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure, Azure PowerShell o il portale di Azure. Questo articolo fornisce esempi su come configurare l'autenticazione tra questi servizi di Azure usando l'interfaccia della riga di comando di Azure o Azure PowerShell.

L'integrazione del servizio Azure Kubernetes in Registro Azure Container assegna il ruolo AcrPull all'identità gestita dell'ID di Entra Microsoft associata al pool di agenti nel cluster del servizio Azure Kubernetes. Per altre informazioni sulle identità gestite del servizio Azure Kubernetes, vedere Riepilogo delle identità gestite.

Importante

È stato riscontrato un problema di latenza durante il collegamento dei gruppi Microsoft Entra con Registro Azure Container. Se il ruolo AcrPull viene concesso a un gruppo Microsoft Entra e l'identità kubelet viene aggiunta al gruppo per completare la configurazione del controllo degli accessi in base al ruolo, potrebbe verificarsi un ritardo nell’applicazione del gruppo del controllo degli accessi in base al ruolo. Se si usa un processo automatizzato che richiede il completamento della configurazione del controllo degli accessi in base al ruolo, è consigliabile usare Bring Your Own Kubelet Identity come soluzione alternativa. È possibile pre-creare un'identità assegnata dall'utente, aggiungerla al gruppo Microsoft Entra, quindi usare l'identità come identità kubelet per creare un cluster nel servizio Azure Kubernetes. In questo modo l'identità viene aggiunta al gruppo Microsoft Entra prima che kubelet generi un token e si evita così il problema di latenza.

Nota

Questo articolo illustra l'autenticazione automatica tra il servizio Azure Kubernetes e Registro Azure Container. Se è necessario eseguire il pull di un'immagine da un registro esterno privato, usare un segreto di pull dell’immagine.

Operazioni preliminari

Creare un nuovo servizio Registro Azure Container

  • Se non si dispone già un servizio Registro Azure Container, crearne uno usando il comando az acr create. Nell'esempio seguente la MYACR variabile viene impostata sul nome del servizio Registro Azure Container, mycontainerregistry e tale variabile viene quindi usata per creare il Registro di sistema. Il nome del servizio Registro Azure Container deve essere univoco a livello globale e contenere solo lettere minuscole.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

Creare un nuovo cluster del servizio Azure Kubernetes e integrarlo con un servizio Registro Azure Container esistente

  • Creare un nuovo cluster del servizio Azure Kubernetes e integrarlo con un servizio Registro Azure Container esistente usando il comando az aks create con il parametro --attach-acr . Questo comando consente di autorizzare un servizio Registro Azure Container esistente nella sottoscrizione e di configurare il ruolo AcrPull appropriato per l'identità gestita.

    MYACR=mycontainerregistry
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Il completamento di questo comando può richiedere alcuni minuti.

    Nota

    Se si usa un servizio Registro Azure Container presente in una sottoscrizione diversa dal cluster del servizio Azure Kubernetes o si preferisce usare l’ID risorsa di Registro Azure Container anziché il nome del servizio Registro Azure Container, è possibile farlo usando la sintassi seguente:

    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
    

Configurare l'integrazione di Registro Azure Container per un cluster del servizio Azure Kubernetes esistente

Collegare un servizio Registro Azure Container a un cluster del servizio Azure Kubernetes esistente

  • Integrare un servizio Registro Azure Container esistente con un cluster del servizio Azure Kubernetes esistente usando il comando az aks updatecon il parametro --attach-acr e un valore valido per acr-name o acr-resource-id.

    # Attach using acr-name
    az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-name>
    
    # Attach using acr-resource-id
    az aks update --name myAKSCluster --resource-group myResourceGroup --attach-acr <acr-resource-id>
    

    Nota

    Il comando az aks update --attach-acr usa le autorizzazioni dell'utente che esegue il comando per creare l'assegnazione del ruolo di Registro Azure Container. Questo ruolo viene assegnato all'identità gestita kubelet. Per altre informazioni sulle identità gestite del servizio Azure Kubernetes, vedere Riepilogo delle identità gestite.

Scollegare un servizio Registro Azure Container da un cluster del servizio Azure Kubernetes

  • Rimuovere l'integrazione tra un servizio Registro Azure Container e un cluster del servizio Azure Kubernetes usando il comando az aks update con il parametro --detach-acr e un valore valido per acr-name o acr-resource-id.

    # Detach using acr-name
    az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-name>
    
    # Detach using acr-resource-id
    az aks update --name myAKSCluster --resource-group myResourceGroup --detach-acr <acr-resource-id>
    

Uso di Registro Azure Container e del servizio Azure Kubernetes

Importare un'immagine in Registro Azure Container

  • Importare un'immagine da Docker Hub in Registro Azure Container usando il comando az acr import.

    az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
    

Distribuire l'immagine di esempio da Registro Azure Container al servizio Azure Kubernetes

  1. Assicurarsi di disporre delle credenziali del servizio Azure Kubernetes appropriate usando il comando az aks get-credentials.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Creare un file denominato acr-nginx.yaml usando il codice YAML di esempio seguente e sostituire acr-name con il nome del servizio Registro Azure Container.

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: nginx0-deployment
      labels:
        app: nginx0-deployment
    spec:
      replicas: 2
      selector:
        matchLabels:
          app: nginx0
      template:
        metadata:
          labels:
            app: nginx0
        spec:
          containers:
          - name: nginx
            image: <acr-name>.azurecr.io/nginx:v1
            ports:
            - containerPort: 80
    
  3. Eseguire la distribuzione nel cluster del servizio Azure Kubernetes usando il comando kubectl apply.

    kubectl apply -f acr-nginx.yaml
    
  4. Monitorare la distribuzione usando il comando kubectl get pods.

    kubectl get pods
    

    L'output dovrebbe mostrare due pod in esecuzione, come illustrato nell'output di esempio seguente:

    NAME                                 READY   STATUS    RESTARTS   AGE
    nginx0-deployment-669dfc4d4b-x74kr   1/1     Running   0          20s
    nginx0-deployment-669dfc4d4b-xdpd6   1/1     Running   0          20s
    

Risoluzione dei problemi