Autentisera med Azure Container Registry från Azure Kubernetes Service
När du använder Azure Container Registry (ACR) med Azure Kubernetes Service (AKS) måste du upprätta en autentiseringsmekanism. Du kan konfigurera de behörigheter som krävs mellan ACR och AKS med hjälp av Azure CLI, Azure PowerShell och Azure Portal. Den här artikeln innehåller exempel på hur du konfigurerar autentisering mellan dessa Azure-tjänster med hjälp av Azure CLI eller Azure PowerShell.
AKS till ACR-integreringen tilldelar AcrPull-rollen till den hanterade Azure Active Directory-identiteten (Azure AD) som är associerad med agentpoolen i ditt AKS-kluster. Mer information om AKS-hanterade identiteter finns i Sammanfattning av hanterade identiteter.
Viktigt
Det finns ett svarstidsproblem med Azure Active Directory-grupper när du kopplar ACR. Om AcrPull-rollen beviljas till en Azure AD grupp och kubelet-identiteten läggs till i gruppen för att slutföra RBAC-konfigurationen kan det uppstå en fördröjning innan RBAC-gruppen börjar gälla. Om du kör automatisering som kräver att RBAC-konfigurationen är klar rekommenderar vi att du använder Bring your own kubelet-identiteten som en lösning. Du kan skapa en användartilldelad identitet i förväg, lägga till den i gruppen Azure AD och sedan använda identiteten som kubelet-identitet för att skapa ett AKS-kluster. Detta säkerställer att identiteten läggs till i gruppen Azure AD innan en token genereras av kubelet, vilket undviker svarstidsproblemet.
Anteckning
Den här artikeln beskriver automatisk autentisering mellan AKS och ACR. Om du behöver hämta en avbildning från ett privat externt register använder du en avbildnings pull-hemlighet.
Innan du börjar
- Du måste ha rollen Ägare, Azure-kontoadministratör eller Azure-medadministratör för din Azure-prenumeration.
- För att undvika att behöva någon av dessa roller kan du i stället använda en befintlig hanterad identitet för att autentisera ACR från AKS. Mer information finns i Använda en Hanterad Azure-identitet för att autentisera till en ACR.
- Om du använder Azure CLI kräver den här artikeln att du kör Azure CLI version 2.7.0 eller senare. Kör
az --version
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Installera Azure CLI. - Om du använder Azure PowerShell kräver den här artikeln att du kör Azure PowerShell version 5.9.0 eller senare. Kör
Get-InstalledModule -Name Az
för att hitta versionen. Om du behöver installera eller uppgradera kan du läsa Install Azure PowerShell (Installera Azure PowerShell). - Exempel och syntax för att använda Terraform för att konfigurera ACR finns i Terraform-referensen.
Skapa ett nytt AKS-kluster med ACR-integrering
Du kan konfigurera AKS- och ACR-integrering när aks-klustret skapas. För att tillåta att ett AKS-kluster interagerar med ACR används en Azure AD hanterad identitet.
Skapa en ACR
Om du inte redan har en ACR skapar du en med hjälp av följande kommando.
# Set this variable to the name of your ACR. The name must be globally unique.
MYACR=myContainerRegistry
az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
Skapa ett nytt AKS-kluster och integrera med en befintlig ACR
Om du redan har en ACR använder du följande kommando för att skapa ett nytt AKS-kluster med ACR-integrering. Med det här kommandot kan du auktorisera en befintlig ACR i din prenumeration och konfigurera lämplig AcrPull-roll för den hanterade identiteten. Ange giltiga värden för parametrarna nedan.
# Set this variable to the name of your ACR. The name must be globally unique.
MYACR=myContainerRegistry
# Create an AKS cluster with ACR integration.
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
Du kan också ange ACR-namnet med hjälp av ett ACR-resurs-ID med följande format:
/subscriptions/\<subscription-id\>/resourceGroups/\<resource-group-name\>/providers/Microsoft.ContainerRegistry/registries/\<name\>
Anteckning
Om du använder en ACR som finns i en annan prenumeration än ditt AKS-kluster använder du ACR-resurs-ID :t när du kopplar eller kopplar från klustret.
az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
Det här kommandot kan ta flera minuter att slutföra.
Konfigurera ACR-integrering för befintliga AKS-kluster
Koppla en ACR till ett AKS-kluster
Integrera en befintlig ACR med ett befintligt AKS-kluster med hjälp av parametern--attach-acr
och giltiga värden för acr-name eller 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>
Anteckning
Kommandot az aks update --attach-acr
använder behörigheterna för användaren som kör kommandot för att skapa ACR-rolltilldelningen. Den här rollen tilldelas till den kubelet-hanterade identiteten. Mer information om AKS-hanterade identiteter finns i Sammanfattning av hanterade identiteter.
Koppla från en ACR från ett AKS-kluster
Ta bort integreringen mellan en ACR och ett AKS-kluster med hjälp av parametern--detach-acr
och giltiga värden för acr-name eller 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>
Arbeta med ACR & AKS
Importera en avbildning till din ACR
Kör följande kommando för att importera en avbildning från Docker Hub till din ACR.
az acr import -n <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Distribuera exempelbilden från ACR till AKS
Kontrollera att du har rätt AKS-autentiseringsuppgifter.
az aks get-credentials -g myResourceGroup -n myAKSCluster
Skapa en fil med namnet acr-nginx.yaml med yaml-exemplet nedan. Ersätt acr-name med namnet på din 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
När du har skapat filen kör du följande distribution i AKS-klustret.
kubectl apply -f acr-nginx.yaml
Du kan övervaka distributionen genom att köra kubectl get pods
.
kubectl get pods
Utdata bör visa två poddar som körs.
NAME READY STATUS RESTARTS AGE
nginx0-deployment-669dfc4d4b-x74kr 1/1 Running 0 20s
nginx0-deployment-669dfc4d4b-xdpd6 1/1 Running 0 20s
Felsökning
az aks check-acr
Kör kommandot för att verifiera att registret är tillgängligt från AKS-klustret.- Läs mer om ACR-övervakning.
- Läs mer om ACR-hälsa.