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
- Você precisa da função de proprietário, administrador de conta do Azure ou coadministrador do Azure em sua assinatura do Azure.
- Para evitar a necessidade de uma dessas funções, você pode usar uma identidade gerenciada existente para autenticar o ACR do AKS. Para obter mais informações, consulte Usar uma identidade gerenciada do Azure para autenticar em uma ACR.
- 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 aMYACR
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
Certifique-se de ter as credenciais AKS adequadas usando o
az aks get-credentials
comando.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
Execute a implementação no cluster AKS usando o
kubectl apply
comando.kubectl apply -f acr-nginx.yaml
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
- Valide se o registro está acessível a partir do cluster AKS usando o
az aks check-acr
comando. - Saiba mais sobre o monitoramento ACR.
- Saiba mais sobre a saúde ACR.
Azure Kubernetes Service