Compartir vía


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

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 variable MYACR 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

  1. 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
    
  2. 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
    
  3. Ejecute la implementación en el clúster de AKS mediante el comando kubectl apply.

    kubectl apply -f acr-nginx.yaml
    
  4. 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