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

Quando si usa Registro Azure Container (ACR) con servizio Azure Kubernetes (AKS), è necessario stabilire un meccanismo di autenticazione. È possibile configurare le autorizzazioni necessarie tra Registro Azure Container e servizio Azure Kubernetes usando l'interfaccia della riga di comando di Azure, Azure PowerShell o portale di Azure. Questo articolo fornisce esempi per 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 a Registro Azure Container assegna il ruolo AcrPull all'identità gestita dell'ID 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

Si è verificato un problema di latenza con i gruppi di Microsoft Entra quando si collega 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 prima che il gruppo controllo degli accessi in base al ruolo venga applicato. Se si esegue l'automazione che richiede il completamento della configurazione del controllo degli accessi in base al ruolo, è consigliabile usare Bring your own kubelet identity (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 del servizio Azure Kubernetes. In questo modo l'identità viene aggiunta al gruppo Microsoft Entra prima che venga generato un token da kubelet, evitando così il problema di latenza.

Nota

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

Operazioni preliminari

Creare un nuovo Registro Azure Container

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

    MYACR=mycontainerregistry
    
    az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
    

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

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

    MYACR=mycontainerregistry
    
    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Il completamento di questo comando può richiedere alcuni minuti.

    Nota

    Se si usa un Registro Azure Container che si trova in una sottoscrizione diversa dal cluster del servizio Azure Kubernetes o si preferisce usare l'ID risorsa registro Azure Container anziché il nome del 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 del Registro Azure Container per un cluster del servizio Azure Kubernetes esistente

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

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

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

    Nota

    Il az aks update --attach-acr comando usa le autorizzazioni dell'utente che esegue il comando per creare l'assegnazione di ruolo del 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 registro Azure Container da un cluster del servizio Azure Kubernetes

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

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

Uso del servizio Azure Container e del servizio Azure Kubernetes

Importare un'immagine nel Registro Azure Container

  • Importare un'immagine dall'hub Docker nel Registro Azure Container usando il az acr import comando .

    az acr import  -n <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 az aks get-credentials comando .

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Creare un file denominato acr-nginx.yaml usando il codice YAML di esempio seguente e sostituire acr-name con il nome del 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 kubectl apply comando .

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

    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

  • Verificare che il Registro di sistema sia accessibile dal cluster del servizio Azure Kubernetes usando il az aks check-acr comando .
  • Altre informazioni sul monitoraggio di Registro Azure Container.
  • Altre informazioni sull'integrità del Registro Azure Container.