Dela via


Autentisera med Azure Container Registry (ACR) från Azure Kubernetes Service (AKS)

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 eller 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 Microsoft Entra-ID-identiteten 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 Microsoft Entra-grupper när du kopplar ACR. Om AcrPull-rollen beviljas till en Microsoft Entra-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 identity som en lösning. Du kan skapa en användartilldelad identitet i förväg, lägga till den i Microsoft Entra-gruppen 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 Microsoft Entra-gruppen innan en token genereras av kubelet, vilket undviker svarstidsproblemet.

Kommentar

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 avbildningshämtningshemlighet.

Innan du börjar

  • Du behöver rollen Ägare, Azure-kontoadministratör eller Azure-medadministratör i 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 en ny ACR

  • Om du inte redan har en ACR skapar du en med kommandot az acr create . I följande exempel anges variabeln MYACR till namnet på ACR, mycontainerregistry, och variabeln används för att skapa registret. Ditt ACR-namn måste vara globalt unikt och endast använda gemener.

    MYACR=mycontainerregistry
    
    az acr create --name $MYACR --resource-group myContainerRegistryResourceGroup --sku basic
    

Skapa ett nytt AKS-kluster och integrera med en befintlig ACR

  • Skapa ett nytt AKS-kluster och integrera med en befintlig ACR med kommandot az aks create med parametern--attach-acr . Med det här kommandot kan du auktorisera en befintlig ACR i din prenumeration och konfigurerar lämplig AcrPull-roll för den hanterade identiteten.

    MYACR=mycontainerregistry
    
    az aks create --name myAKSCluster --resource-group myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Det här kommandot kan ta flera minuter att slutföra.

    Kommentar

    Om du använder en ACR som finns i en annan prenumeration än ditt AKS-kluster eller föredrar att använda ACR-resurs-ID :t i stället för ACR-namnet kan du göra det med hjälp av följande syntax:

    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr /subscriptions/<subscription-id>/resourceGroups/myContainerRegistryResourceGroup/providers/Microsoft.ContainerRegistry/registries/myContainerRegistry
    

Konfigurera ACR-integrering för ett befintligt AKS-kluster

Koppla en ACR till ett befintligt AKS-kluster

  • Integrera en befintlig ACR med ett befintligt AKS-kluster med kommandot az aks update med parametern--attach-acr och ett giltigt värde för acr-name eller 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>
    

    Kommentar

    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 kommandot az aks update med parametern--detach-acr och ett giltigt värde för acr-name eller 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>
    

Arbeta med ACR och AKS

Importera en avbildning till din ACR

  • Importera en avbildning från Docker Hub till din ACR med hjälp av az acr import kommandot .

    az acr import --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
    

Distribuera exempelbilden från ACR till AKS

  1. Kontrollera att du har rätt AKS-autentiseringsuppgifter med kommandot az aks get-credentials .

    az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
    
  2. Skapa en fil med namnet acr-nginx.yaml med hjälp av följande YAML-exempel och 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
    
  3. Kör distributionen i AKS-klustret med hjälp av kubectl apply kommandot .

    kubectl apply -f acr-nginx.yaml
    
  4. Övervaka distributionen med kommandot kubectl get pods .

    kubectl get pods
    

    Utdata bör visa två poddar som körs, enligt följande exempelutdata:

    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