Autenticación con Azure Container Registry desde Azure Kubernetes Service (AKS)
Cuando usa Azure Container Registry (ACR) con Azure Kubernetes Service (AKS), debe establecer un mecanismo de autenticación. Puede configurar los permisos necesarios entre ACR y AKS mediante la CLI de Azure, Azure PowerShell o Azure Portal. En este artículo se proporcionan ejemplos para configurar la autenticación entre estos servicios de Azure mediante la CLI de Azure o Azure PowerShell.
La integración de AKS en ACR asigna el rol AcrPull a la identidad administrada de Microsoft Entra ID asociada al grupo de agentes del clúster de AKS. Para obtener más información sobre las identidades administradas de AKS, consulte Resumen de identidades administradas.
Importante
Hay un problema de latencia con los grupos de Microsoft Entra al adjuntar ACR. Si se concede el rol AcrPull a un grupo de Microsoft Entra y la identidad kubelet se agrega al grupo para completar la configuración de RBAC, podría haber cierto retraso antes de que el grupo de RBAC surta efecto. Si ejecuta una automatización que requiere que se complete la configuración de RBAC, se recomienda usar una identidad kubelet propia como solución alternativa. Puede crear previamente una identidad asignada por el usuario, agregarla al grupo de Microsoft Entra y, a continuación, usar la identidad como identidad de kubelet para crear un clúster de AKS. Esto garantiza que la identidad se agrega al grupo de Microsoft Entra antes de que kubelet genere un token, lo que evita el problema de latencia.
Nota:
En este artículo se trata la autenticación automática entre AKS y ACR. Si necesita extraer una imagen de un registro externo privado, use un secreto de extracción de imágenes.
Antes de empezar
- Necesita el rol de propietario, administrador de cuenta de Azure o coadministrador de Azure en la suscripción de Azure.
- Para evitar necesitar uno de estos roles, puede usar en su lugar una identidad administrada existente para autenticar ACR desde AKS. Para obtener más información, consulte Use la identidad administrada de Azure para autenticarse en ACR.
- Si usa la CLI de Azure, en este artículo es necesario que ejecute la versión 2.7.0 de la CLI de Azure o cualquier versión posterior. Ejecute
az --version
para encontrar la versión. Si necesita instalarla o actualizarla, vea Instalación de la CLI de Azure. - Si usa Azure PowerShell, en este artículo es necesario que ejecute la versión 5.9.0 de Azure PowerShell o cualquier versión posterior. Ejecute
Get-InstalledModule -Name Az
para encontrar la versión. Si necesita instalarla o actualizarla, consulte el artículo sobre la instalación de Azure PowerShell. - Puede encontrar ejemplos y sintaxis para usar Terraform para configurar ACR en la referencia de Terraform.
Crear un ACR
Si aún no tiene un ACR, cree uno con el comando
az acr create
. En el ejemplo siguiente se establece la variableMYACR
en el nombre de ACR, mycontainerregistry y se usa la variable para crear el registro. El nombre de ACR debe ser único globalmente y usar solo letras minúsculas.MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
Creación de un nuevo clúster de AKS e integración con un ACR existente
Cree un nuevo clúster de AKS e intégrelo con un ACR existente mediante el comando
az aks create
con el parámetro--attach-acr
. Este comando permite autorizar un ACR existente en su suscripción y configura el rol AcrPull adecuado para la identidad administrada.MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Este comando puede tardar varios minutos en completarse.
Nota
Si usa un ACR ubicado en una suscripción diferente del clúster de AKS o prefiere usar el identificador de recurso de ACR en lugar del nombre de ACR, puede hacerlo con la sintaxis siguiente:
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
Configuración de la integración de ACR para un clúster de AKS existente
Asociación de un ACR a un clúster de AKS ya existente
Integración de un ACR existente con un clúster de AKS existente mediante el comando
az aks update
con el parámetro--attach-acr
y un valor válido para 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:
El comando
az aks update --attach-acr
usa los permisos del usuario que ejecuta el comando para crear la asignación de roles de ACR. Este rol se asigna a la identidad administrada de kubelet. Para obtener más información sobre las identidades administradas de AKS, consulte Resumen de identidades administradas.
Desasociación de un ACR de un clúster de AKS
Quite la integración entre un ACR y un clúster de AKS mediante el comando
az aks update
con el parámetro--detach-acr
y un valor válido para 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 de ACR y AKS
Importación de una imagen en ACR
Importe una imagen de Docker Hub en el ACR mediante el comando
az acr import
.az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Implementación de la imagen de ejemplo de ACR en AKS
Asegúrese de que tiene las credenciales de AKS mediante el comando
az aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Cree un archivo denominado acr-nginx.yaml con el siguiente código YAML de ejemplo y reemplace acr-name por el nombre de 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
Ejecute la implementación en el clúster de AKS mediante el comando
kubectl apply
.kubectl apply -f acr-nginx.yaml
Supervise la implementación con el comando
kubectl get pods
.kubectl get pods
La salida debe mostrar dos pods en ejecución, como se muestra en la salida de ejemplo siguiente:
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Solución de problemas
- Valide que el registro sea accesible desde el clúster de AKS mediante el comando
az aks check-acr
. - Obtenga más información sobre la supervisión de ACR.
- Obtenga más información sobre el mantenimiento de ACR.
Azure Kubernetes Service