S’authentifier auprès d’Azure Container Registry à partir d’Azure Kubernetes Service (AKS)

Vous devez établir un mécanisme d’authentification lorsque vous utilisez Azure Container Registry (ACR) avec Azure Kubernetes Service (AKS). Vous pouvez configurer les autorisations requises entre ACR et AKS à l’aide d’Azure CLI, d’Azure PowerShell ou du portail Azure. Cet article fournit des exemples de configuration de l’authentification entre ces services Azure à l’aide d’Azure CLI ou d’Azure PowerShell.

L’intégration d’AKS à ACR attribue le rôle AcrPull à l’identité managée Microsoft Entra ID associée au pool d’agents dans votre cluster AKS. Pour plus d’informations sur les identités managées AKS, consultez Résumé des identités managées.

Important

Il existe un problème de latence avec les groupes Microsoft Entra lors de l’attachement d’ACR. Si le rôle AcrPull est accordé à un groupe Microsoft Entra et que l’identité kubelet est ajoutée au groupe pour effectuer la configuration RBAC, il peut y avoir un délai avant que le groupe RBAC prenne effet. Si vous exécutez une automatisation qui nécessite que la configuration RBAC soit terminée, nous vous recommandons d’utiliser Apporter votre propre identité kubelet comme solution de contournement. Vous pouvez précréer une identité affectée par l’utilisateur, l’ajouter au groupe Microsoft Entra, puis utiliser l’identité comme identité kubelet pour créer un cluster AKS. Cela garantit que l’identité est ajoutée au groupe Microsoft Entra avant qu’un jeton soit généré par kubelet, ce qui permet d’éviter le problème de latence.

Remarque

Cet article traite de l’authentification automatique entre AKS et ACR. Si vous devez extraire une image d’un registre externe privé, utilisez un secret d’extraction d’image.

Avant de commencer

  • Vous avez besoin du rôle Propriétaire, Administrateur de compte Azure ou Coadministrateur Azure sur votre abonnement Azure.
  • Si vous utilisez l’interface Azure CLI, cet article implique que vous exécutiez l’interface Azure CLI version 2.7.0 ou ultérieure. Exécutez az --version pour trouver la version. Si vous devez installer ou mettre à niveau, voir Installer Azure CLI.
  • Si vous utilisez Azure PowerShell, cet article nécessite que vous exécutiez Azure PowerShell version 5.9.0 ou ultérieure. Exécutez Get-InstalledModule -Name Az pour trouver la version. Si vous avez besoin de procéder à une installation ou à une mise à niveau, consultez Installer Azure PowerShell.
  • Vous trouverez des exemples et une syntaxe pour utiliser Terraform pour configurer ACR dans la référence Terraform.

Créer un registre ACR

  • Si vous n’avez pas encore de registre ACR, créez-en un à l’aide de la commande az acr create. L’exemple suivant définit la variable MYACR sur le nom du registre ACR, mycontainerregistry, et utilise la variable pour créer le registre. Votre nom ACR doit être globalement unique et utiliser uniquement des minuscules.

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

Créer un cluster AKS et l’intégrer à un ACR existant

  • Créez un cluster AKS et intégrez-le à un registre ACR existant à l’aide de la commande az aks create avec le paramètre --attach-acr. Cette commande vous permet d’autoriser un ACR existant dans votre abonnement et configure le rôle AcrPull approprié pour l’identité managée.

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

    Cette commande peut prendre plusieurs minutes.

    Notes

    Si vous utilisez un registre ACR situé dans un autre abonnement que votre cluster AKS ou si vous préférez utiliser l’ID de ressource ACR plutôt que le nom ACR, vous pouvez le faire à l’aide de la syntaxe suivante :

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

Configurer une intégration ACR pour un cluster AKS existant

Attacher un registre ACR à un cluster AKS existant

  • Intégrez un registre ACR existant à un cluster AKS existant à l’aide de la commande az aks update avec le paramètre --attach-acr et une valeur valide pour acr-name ou 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>
    

    Notes

    La commande az aks update --attach-acr utilise les autorisations de l’utilisateur qui exécute la commande pour créer l’attribution de rôle ACR. Ce rôle est attribué à l’identité managée kubelet. Pour plus d’informations sur les identités managées AKS, consultez Résumé des identités managées.

Détacher un ACR d’un cluster AKS

  • Supprimez l’intégration entre un registre ACR et un cluster AKS à l’aide de la commande az aks update avec le paramètre --detach-acr et une valeur valide pour acr-name ou 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>
    

Utilisation d’ACR et AKS

Importer une image dans votre instance ACR

  • Importez une image de Docker Hub dans votre registre ACR à l’aide de la commande az acr import.

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

Déployer l’exemple d’image depuis ACR vers AKS

  1. Vérifiez que vous disposez des informations d’identification AKS appropriées à l’aide de la commande az aks get-credentials.

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Créez un fichier nommé acr-nginx.yaml à l’aide de l’exemple YAML suivant et remplacez acr-name par le nom de votre registre ACR.

    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. Exécutez le déploiement dans votre cluster AKS à l’aide de la commande kubectl apply.

    kubectl apply -f acr-nginx.yaml
    
  4. Surveillez le déploiement à l’aide de la commande kubectl get pods.

    kubectl get pods
    

    La sortie doit afficher deux pods en cours d’exécution, comme indiqué dans l’exemple de sortie suivant :

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

Dépannage