Partilhar via


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 gerida do Microsoft Entra ID associada ao pool de agentes no seu cluster AKS. Para obter mais informações sobre identidades gerenciadas pelo AKS, consulte Resumo de identidades gerenciadas.

Importante

Existe 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 de o grupo RBAC ter efeito. Se estiver a executar automatização que requer que a configuração do RBAC esteja concluída, recomendamos que use Traga a sua própria identidade do kubelet como 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 precisar obter uma imagem de um registo externo privado, utilize um segredo de obtenção de imagem.

Nota

A integração de AKS-ACR não az aks --attach-acr é suportada para registros em que o modo de permissões de atribuição de função está definido como "RBAC Registry + ABAC Repository Permissions". Esta limitação será abordada no futuro. https://aka.ms/acr/auth/abac Visite para obter mais informações sobre os registros ACR habilitados para ABAC.

Antes de começar

  • Você precisa da função de proprietário, administrador de conta do Azure ou coadministrador do Azure em sua assinatura do Azure.
  • Se você estiver usando a CLI do Azure, este artigo requer que você esteja executando a CLI do Azure versão 2.7.0 ou posterior. Executar az --version para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure CLI (Instalar o Azure CLI).
  • Se você estiver usando o Azure PowerShell, este artigo requer que você esteja executando o Azure PowerShell versão 5.9.0 ou posterior. Executar Get-InstalledModule -Name Az para localizar a versão. Se precisar de instalar ou atualizar, veja Install Azure PowerShell(Instalar o Azure PowerShell).
  • Exemplos e sintaxe para usar o Terraform para configurar o ACR podem ser encontrados na referência Terraform.

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 com um ACR existente utilizando o comando az aks create com o parâmetro --attach-acr. 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.

Desassociar 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