Verifiëren bij Azure Container Registry (ACR) vanuit Azure Kubernetes Service (AKS)
Wanneer u Azure Container Registry (ACR) gebruikt met Azure Kubernetes Service (AKS), moet u een verificatiemechanisme instellen. U kunt de vereiste machtigingen tussen ACR en AKS configureren met behulp van de Azure CLI, Azure PowerShell of Azure Portal. Dit artikel bevat voorbeelden voor het configureren van verificatie tussen deze Azure-services met behulp van de Azure CLI of Azure PowerShell.
De AKS to ACR-integratie wijst de AcrPull-rol toe aan de door Microsoft Entra ID beheerde identiteit die is gekoppeld aan de agentgroep in uw AKS-cluster. Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.
Belangrijk
Er is een latentieprobleem met Microsoft Entra-groepen bij het koppelen van ACR. Als de AcrPull-rol wordt verleend aan een Microsoft Entra-groep en de kubelet-identiteit wordt toegevoegd aan de groep om de RBAC-configuratie te voltooien, kan er een vertraging optreden voordat de RBAC-groep van kracht wordt. Als u automatisering uitvoert waarvoor de RBAC-configuratie is voltooid, raden we u aan uw eigen kubelet-identiteit als tijdelijke oplossing te gebruiken. U kunt vooraf een door de gebruiker toegewezen identiteit maken, deze toevoegen aan de Microsoft Entra-groep en vervolgens de identiteit gebruiken als kubelet-identiteit om een AKS-cluster te maken. Dit zorgt ervoor dat de identiteit wordt toegevoegd aan de Microsoft Entra-groep voordat een token wordt gegenereerd door kubelet, waardoor het latentieprobleem wordt voorkomen.
Notitie
Dit artikel bevat informatie over automatische verificatie tussen AKS en ACR. Als u een installatiekopie uit een persoonlijk extern register wilt ophalen, gebruikt u een pull-geheim voor installatiekopieën.
Voordat u begint
- U hebt de rol Eigenaar, Azure-accountbeheerder of Medebeheerder van Azure nodig voor uw Azure-abonnement.
- Als u een van deze rollen niet nodig hebt, kunt u in plaats daarvan een bestaande beheerde identiteit gebruiken om ACR te verifiëren vanuit AKS. Zie Een door Azure beheerde identiteit gebruiken om te verifiëren bij een ACR voor meer informatie.
- Als u Azure CLI gebruikt, moet u voor dit artikel Azure CLI versie 2.7.0 of hoger uitvoeren. Voer
az --version
uit om de versie te bekijken. Als u Azure CLI 2.0 wilt installeren of upgraden, raadpleegt u Azure CLI 2.0 installeren. - Als u Azure PowerShell gebruikt, moet u voor dit artikel Azure PowerShell versie 5.9.0 of hoger gebruiken. Voer
Get-InstalledModule -Name Az
uit om de versie te bekijken. Als u PowerShell wilt installeren of upgraden, raadpleegt u De Azure PowerShell installeren. - Voorbeelden en syntaxis voor het gebruik van Terraform voor het configureren van ACR vindt u in de Terraform-verwijzing.
Een nieuwe ACR maken
Als u nog geen ACR hebt, maakt u er een met behulp van de
az acr create
opdracht. In het volgende voorbeeld wordt deMYACR
variabele ingesteld op de naam van de ACR, mycontainerregistry en wordt de variabele gebruikt om het register te maken. Uw ACR-naam moet wereldwijd uniek zijn en alleen kleine letters gebruiken.MYACR=mycontainerregistry az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
Een nieuw AKS-cluster maken en integreren met een bestaande ACR
Maak een nieuw AKS-cluster en integreer met een bestaande ACR met behulp van de
az aks create
opdracht met de--attach-acr
parameter. Met deze opdracht kunt u een bestaande ACR in uw abonnement autoriseren en de juiste AcrPull-rol configureren voor de beheerde identiteit.MYACR=mycontainerregistry az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Het uitvoeren van deze opdracht kan enkele minuten in beslag nemen.
Notitie
Als u een ACR gebruikt in een ander abonnement dan uw AKS-cluster of liever de ACR-resource-id gebruikt in plaats van de ACR-naam, kunt u dit doen met behulp van de volgende syntaxis:
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
ACR-integratie configureren voor een bestaand AKS-cluster
Een ACR koppelen aan een bestaand AKS-cluster
Integreer een bestaande ACR met een bestaand AKS-cluster met behulp van de
az aks update
opdracht met de--attach-acr
parameter en een geldige waarde voor acr-name of 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>
Notitie
De
az aks update --attach-acr
opdracht gebruikt de machtigingen van de gebruiker die de opdracht uitvoert om de ACR-roltoewijzing te maken. Deze rol wordt toegewezen aan de beheerde kubelet-identiteit . Zie Samenvatting van beheerde identiteiten in AKS voor meer informatie over beheerde AKS-identiteiten.
Een ACR loskoppelen van een AKS-cluster
Verwijder de integratie tussen een ACR en een AKS-cluster met behulp van de
az aks update
opdracht met de--detach-acr
parameter en een geldige waarde voor acr-name of 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>
Werken met ACR & AKS
Een installatiekopieën importeren in uw ACR
Importeer een installatiekopieën uit Docker Hub in uw ACR met behulp van de
az acr import
opdracht.az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
De voorbeeldinstallatiekopieën van ACR implementeren in AKS
Zorg ervoor dat u de juiste AKS-referenties hebt met behulp van de
az aks get-credentials
opdracht.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
Maak een bestand met de naam acr-nginx.yaml met behulp van het volgende YAML-voorbeeld en vervang acr-name door de naam van uw 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
Voer de implementatie uit in uw AKS-cluster met behulp van de
kubectl apply
opdracht.kubectl apply -f acr-nginx.yaml
Bewaak de implementatie met behulp van de
kubectl get pods
opdracht.kubectl get pods
In de uitvoer moeten twee actieve pods worden weergegeven, zoals wordt weergegeven in de volgende voorbeelduitvoer:
NAME READY STATUS RESTARTS AGE nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Probleemoplossing
- Controleer of het register toegankelijk is vanuit het AKS-cluster met behulp van de
az aks check-acr
opdracht. - Meer informatie over ACR-bewaking.
- Meer informatie over de ACR-status.
Azure Kubernetes Service