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
- Você precisa ter a função de Proprietário, administrador da conta do Azure ou coadministrador do Azure na 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 mais informações, consulte Usar uma identidade gerenciada do Azure para fazer a autenticação para um ACR.
- Se você está usando a CLI do Azure, este artigo exige que você esteja executando a CLI do Azure versão 2.7.0 ou posterior. Execute
az --version
para encontrar a versão. Se você precisa instalar ou atualizar, consulte Instalar a CLI do Azure. - Se você estiver usando Azure PowerShell, este artigo exigirá que você esteja executando o Azure PowerShell versão 5.9.0 ou posterior. Execute
Get-InstalledModule -Name Az
para encontrar a versão. Se precisar instalar ou atualizar, consulte Instalar o Azure PowerShell. - Veja exemplos e a sintaxe de uso do Terraform para configurar o ACR na referência do Terraform.
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ávelMYACR
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 --name $MYACR --resource-group 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 --name myAKSCluster --resource-group 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 --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>
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 --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 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 --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Implante a imagem de exemplo do ACR para o AKS
Certifique-se de que você tenha as credenciais do AKS adequadas usando o comando
az aks get-credentials
.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
Execute a implantação no seu cluster do AKS usando o comando
kubectl apply
.kubectl apply -f acr-nginx.yaml
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
- Valide se o registro está acessível no cluster do AKS usando o comando
az aks check-acr
. - Saiba mais sobre o Monitoramento do ACR.
- Saiba mais sobre oACR Health.
Azure Kubernetes Service