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.
- Pour éviter d’avoir besoin de l’un de ces rôles, vous pouvez utiliser une identité managée existante pour authentifier ACR auprès d’AKS. Pour plus d’informations, consultez Utiliser une identité managée Azure pour s’authentifier auprès d’un ACR.
- 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 variableMYACR
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 --name $MYACR --resource-group 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 --name myAKSCluster --resource-group 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 --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>
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 --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>
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 --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Déployer l’exemple d’image depuis ACR vers AKS
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 --resource-group myResourceGroup --name myAKSCluster
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
Exécutez le déploiement dans votre cluster AKS à l’aide de la commande
kubectl apply
.kubectl apply -f acr-nginx.yaml
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
- Vérifiez que le registre est accessible à partir du cluster AKS à l’aide de la commande
az aks check-acr
. - En savoir plus sur la supervision ACR.
- En savoir plus sur l’intégrité ACR.
Azure Kubernetes Service