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.
  • 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