Uwierzytelnianie za pomocą Azure Container Registry (ACR) z usługi Azure Kubernetes Service (AKS)

W przypadku korzystania z usługi Azure Container Registry (ACR) z usługą Azure Kubernetes Service (AKS) należy ustanowić mechanizm uwierzytelniania. Wymagane uprawnienia można skonfigurować między usługami ACR i AKS przy użyciu interfejsu wiersza polecenia platformy Azure, programu Azure PowerShell lub witryny Azure Portal. Ten artykuł zawiera przykłady konfigurowania uwierzytelniania między tymi usługami platformy Azure przy użyciu interfejsu wiersza polecenia platformy Azure lub programu Azure PowerShell.

Integracja usługi AKS z usługą ACR przypisuje rolę AcrPull do tożsamości zarządzanej identyfikatora entra firmy Microsoft skojarzonej z pulą agentów w klastrze usługi AKS. Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi AKS, zobacz Podsumowanie tożsamości zarządzanych.

Ważne

Podczas dołączania usługi ACR występuje problem z opóźnieniami w grupach firmy Microsoft Entra. Jeśli rola AcrPull zostanie udzielona grupie Microsoft Entra, a tożsamość kubelet zostanie dodana do grupy w celu ukończenia konfiguracji kontroli dostępu opartej na rolach, może wystąpić opóźnienie, zanim grupa RBAC zostanie włączona. Jeśli uruchamiasz automatyzację, która wymaga ukończenia konfiguracji RBAC, zalecamy użycie tożsamości Bring your own kubelet jako obejścia. Możesz wstępnie utworzyć tożsamość przypisaną przez użytkownika, dodać ją do grupy Microsoft Entra, a następnie użyć tożsamości jako tożsamości kubelet, aby utworzyć klaster usługi AKS. Dzięki temu tożsamość zostanie dodana do grupy Microsoft Entra przed wygenerowaniem tokenu przez narzędzie kubelet, co pozwala uniknąć problemu z opóźnieniami.

Uwaga

W tym artykule opisano automatyczne uwierzytelnianie między usługami AKS i ACR. Jeśli musisz ściągnąć obraz z prywatnego rejestru zewnętrznego, użyj wpisu tajnego ściągania obrazu.

Zanim rozpoczniesz

  • Potrzebujesz roli właściciel, administrator konta platformy Azure lub współadministrator platformy Azure w ramach subskrypcji platformy Azure.
  • Jeśli używasz interfejsu wiersza polecenia platformy Azure, ten artykuł wymaga interfejsu wiersza polecenia platformy Azure w wersji 2.7.0 lub nowszej. Uruchom polecenie az --version, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie interfejsu wiersza polecenia platformy Azure.
  • Jeśli używasz programu Azure PowerShell, w tym artykule jest wymagany program Azure PowerShell w wersji 5.9.0 lub nowszej. Uruchom polecenie Get-InstalledModule -Name Az, aby dowiedzieć się, jaka wersja jest używana. Jeśli konieczna będzie instalacja lub uaktualnienie, zobacz Instalowanie programu Azure PowerShell.
  • Przykłady i składnia służąca do używania narzędzia Terraform do konfigurowania usługi ACR można znaleźć w dokumentacji programu Terraform.

Tworzenie nowego rekordu ACR

  • Jeśli jeszcze nie masz usługi ACR, utwórz je przy użyciu az acr create polecenia . Poniższy przykład ustawia zmienną MYACR na nazwę ACR, mycontainerregistry i używa zmiennej do utworzenia rejestru. Nazwa usługi ACR musi być globalnie unikatowa i używać tylko małych liter.

    MYACR=mycontainerregistry
    
    az acr create -n $MYACR -g myContainerRegistryResourceGroup --sku basic
    

Tworzenie nowego klastra usługi AKS i integracja z istniejącym usługą ACR

  • Utwórz nowy klaster usługi AKS i zintegruj go z istniejącym usługą ACR przy użyciu az aks create polecenia z parametrem--attach-acr. To polecenie umożliwia autoryzowanie istniejącego usługi ACR w ramach subskrypcji i konfigurowanie odpowiedniej roli usługi AcrPull dla tożsamości zarządzanej.

    MYACR=mycontainerregistry
    
    az aks create -n myAKSCluster -g myResourceGroup --generate-ssh-keys --attach-acr $MYACR
    

    Wykonanie tego polecenia może potrwać kilka minut.

    Uwaga

    Jeśli używasz usługi ACR znajdującej się w innej subskrypcji niż klaster usługi AKS lub wolisz użyć identyfikatora zasobu usługi ACR zamiast nazwy usługi ACR, możesz to zrobić przy użyciu następującej składni:

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

Konfigurowanie integracji usługi ACR dla istniejącego klastra usługi AKS

Dołączanie usługi ACR do istniejącego klastra usługi AKS

  • Zintegruj istniejący rekord ACR z istniejącym klastrem usługi AKS przy użyciu az aks update polecenia z --attach-acr parametrem i prawidłową wartością acr-name lub 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>
    

    Uwaga

    Polecenie az aks update --attach-acr używa uprawnień użytkownika uruchamiającego polecenie w celu utworzenia przypisania roli usługi ACR. Ta rola jest przypisywana do tożsamości zarządzanej kubelet . Aby uzyskać więcej informacji na temat tożsamości zarządzanych usługi AKS, zobacz Podsumowanie tożsamości zarządzanych.

Odłączanie usługi ACR od klastra usługi AKS

  • Usuń integrację między usługą ACR i klastrem usługi AKS przy użyciu az aks update polecenia z --detach-acr parametrem i prawidłową wartością acr-name lub 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>
    

Praca z usługą ACR i usługą AKS

Importowanie obrazu do usługi ACR

  • Zaimportuj obraz z usługi Docker Hub do usługi ACR przy użyciu az acr import polecenia .

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

Wdrażanie przykładowego obrazu z usługi ACR w usłudze AKS

  1. Upewnij się, że masz odpowiednie poświadczenia usługi AKS przy użyciu az aks get-credentials polecenia .

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Utwórz plik o nazwie acr-nginx.yaml przy użyciu następującego przykładowego kodu YAML i zastąp ciąg acr-name nazwą usługi 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. Uruchom wdrożenie w klastrze usługi AKS przy użyciu kubectl apply polecenia .

    kubectl apply -f acr-nginx.yaml
    
  4. Monitoruj wdrożenie przy użyciu kubectl get pods polecenia .

    kubectl get pods
    

    Dane wyjściowe powinny zawierać dwa uruchomione zasobniki, jak pokazano w następujących przykładowych danych wyjściowych:

    NAME                                 READY   STATUS    RESTARTS   AGE
    nginx0-deployment-669dfc4d4b-x74kr   1/1     Running   0          20s
    nginx0-deployment-669dfc4d4b-xdpd6   1/1     Running   0          20s
    

Rozwiązywanie problemów

  • Sprawdź, czy rejestr jest dostępny z klastra az aks check-acr usługi AKS przy użyciu polecenia .
  • Dowiedz się więcej o monitorowaniu usługi ACR.
  • Dowiedz się więcej o kondycji usługi ACR.