Autenticar com o Azure Container Registry (ACR) a partir do Azure Kubernetes Service (AKS)

Ao usar o Azure Container Registry (ACR) com o Serviço Kubernetes do Azure (AKS), você precisa estabelecer um mecanismo de autenticação. Você pode configurar as permissões necessárias entre ACR e AKS usando a CLI do Azure, o Azure PowerShell ou o portal do Azure. Este artigo fornece exemplos para configurar a autenticação entre esses serviços do Azure usando a CLI do Azure ou o Azure PowerShell.

A integração AKS com ACR atribui a função AcrPull à identidade gerenciada do Microsoft Entra ID associada ao pool de agentes em seu cluster AKS. Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

Importante

Há um problema de latência com os grupos do Microsoft Entra ao anexar o ACR. Se a função AcrPull for concedida a um grupo do Microsoft Entra e a identidade kubelet for adicionada ao grupo para concluir a configuração do RBAC, pode haver um atraso antes que o grupo RBAC entre em vigor. Se você estiver executando a automação que requer que a configuração do RBAC seja concluída, recomendamos que você use Bring your own kubelet identity como uma solução alternativa. Você pode pré-criar uma identidade atribuída pelo usuário, adicioná-la ao grupo Microsoft Entra e, em seguida, usar a identidade como a identidade kubelet para criar um cluster AKS. Isso garante que a identidade seja adicionada ao grupo Microsoft Entra antes que um token seja gerado pelo kubelet, o que evita o problema de latência.

Nota

Este artigo aborda a autenticação automática entre AKS e ACR. Se você precisar extrair uma imagem de um registro externo privado, use um segredo de pull de imagem.

Antes de começar

Criar um novo ACR

  • Se você ainda não tiver um ACR, crie um usando o az acr create comando. O exemplo a seguir define a MYACR variável como o nome do ACR, mycontainerregistry, e usa a variável para criar o registro. Seu nome ACR deve ser globalmente exclusivo e usar apenas letras minúsculas.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

Crie um novo cluster AKS e integre-se com um ACR existente

  • Crie um novo cluster AKS e integre-se com um ACR existente usando o az aks create comando com o --attach-acr parâmetro. Este comando permite que você autorize um ACR existente em sua assinatura e configura a função AcrPull apropriada para a identidade gerenciada.

    MYACR=mycontainerregistry
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Este comando pode demorar vários minutos a concluir.

    Nota

    Se estiver a utilizar um ACR localizado numa subscrição diferente do cluster AKS ou preferir utilizar o ID do recurso ACR em vez do nome ACR, pode fazê-lo utilizando a seguinte sintaxe:

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

Configurar a integração ACR para um cluster AKS existente

Anexar um ACR a um cluster AKS existente

  • Integre um ACR existente com um cluster AKS existente usando o az aks update comando com o --attach-acr parâmetro e um valor válido para 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>
    

    Nota

    O az aks update --attach-acr comando usa as permissões do usuário que executa o comando para criar a atribuição de função ACR. Essa função é atribuída à identidade gerenciada pelo kubelet . Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

Desanexar um ACR de um cluster AKS

  • Remova a integração entre um ACR e um cluster AKS usando o az aks update comando com o --detach-acr parâmetro e um valor válido para 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>
    

Trabalhando com ACR & AKS

Importar uma imagem para o ACR

  • Importe uma imagem do Docker Hub para o ACR usando o az acr import comando.

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

Implantar a imagem de exemplo do ACR no AKS

  1. Certifique-se de ter as credenciais AKS adequadas usando o az aks get-credentials comando.

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Crie um arquivo chamado acr-nginx.yaml usando o seguinte exemplo de YAML e substitua acr-name pelo nome do seu 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. Execute a implementação no cluster AKS usando o kubectl apply comando.

    kubectl apply -f acr-nginx.yaml
    
  4. Monitore a implantação usando o kubectl get pods comando.

    kubectl get pods
    

    A saída deve mostrar dois pods em execução, como mostrado no exemplo de saída a seguir:

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

Resolução de Problemas