Autenticar com o Registro de Contêiner do Azure (ACR) do Serviço de Kubernetes do Azure (AKS)

Ao usar o ACR (Registro de Contêiner do Azure) com o AKS (Serviço de Kubernetes do Azure), estabeleça um mecanismo de autenticação. Você pode configurar as permissões necessárias entre o ACR e o AKS usando a CLI do Azure, o Azure PowerShell e 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 do AKS ao ACR atribui a função AcrPull à identidade gerenciada do Microsoft Entra ID associada ao pool de agentes do cluster do AKS. Para obter mais informações sobre as identidades gerenciadas do AKS, confira Resumo das identidades gerenciadas.

Importante

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

Observação

Este artigo aborda a autenticação automática entre o AKS e o ACR. Se você precisar efetuar o pull de 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 comando az acr create. O exemplo a seguir define a variável MYACR para o nome do ACR, mycontainerregistry, e usa a variável para criar o registro. O nome do seu ACR deve ser globalmente exclusivo e usar apenas letras minúsculas.

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

Criar um novo cluster do AKS e integrar-se a um ACR existente

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

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

    Esse comando pode levar vários minutos para ser concluído.

    Observação

    Se estiver usando um ACR localizado em uma assinatura diferente da do seu cluster do AKS, ou preferir usar a ID do recurso do ACR em vez do nome do ACR, poderá fazer isso usando 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 do ACR para os clusters do AKS existentes

Anexar um cluster do AKS existente

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

    Observação

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

Desanexar um ACR de um cluster do AKS

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

Trabalhando com ACR e AKS

Importe uma imagem para o seu ACR

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

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

Implante a imagem de exemplo do ACR para o AKS

  1. Certifique-se de que você tenha as credenciais do AKS adequadas usando o comando az aks get-credentials.

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Crie um arquivo chamado acr-nginx.yaml usando a seguinte amostra 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 implantação no seu cluster do AKS usando o comando kubectl apply.

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

    kubectl get pods
    

    A saída deve mostrar dois pods em execução, conforme mostrado no seguinte exemplo de saída:

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

Solução de problemas