Authentifizieren per Azure Container Registry (ACR) aus Azure Kubernetes Service (AKS)

Wenn Sie Azure Container Registry (ACR) mit Azure Kubernetes Service (AKS) verwenden, müssen Sie einen Authentifizierungsmechanismus einrichten. Sie können die erforderlichen Berechtigungen zwischen ACR und AKS mithilfe der Azure CLI, der Azure PowerShell und dem Azure-Portal konfigurieren. Dieser Artikel enthält Beispiele zum Konfigurieren der Authentifizierung zwischen diesen Azure-Diensten mithilfe der Azure CLI oder Azure PowerShell.

Die Integration von AKS mit ACR weist die Rolle AcrPull der verwaltetenMicrosoft Entra ID-Identität zu, die dem Agentpool in Ihrem AKS-Cluster zugeordnet ist. Weitere Informationen zu verwalteten AKS-Identitäten finden Sie unter Zusammenfassung der verwalteten Identitäten.

Wichtig

Beim Anfügen von ACR tritt ein Latenzproblem mit Microsoft Entra-Gruppen auf. Wenn die Rolle AcrPull einer Microsoft Entra-Gruppe zugewiesen und die Kubelet-Identität der Gruppe hinzugefügt wird, um die RBAC-Konfiguration abzuschließen, kann es zu einer Verzögerung kommen, bevor die RBAC-Gruppe wirksam wird. Wenn Sie eine Automatisierung ausführen, die den Abschluss der RBAC-Konfiguration voraussetzt, wird empfohlen, Bring Your Own Kubelet-Identität als Problemumgehung zu verwenden. Sie können eine benutzerseitig zugewiesene Identität vorab erstellen, sie der Microsoft Entra-Gruppe hinzufügen und dann die Identität als Kubelet-Identität verwenden, um einen AKS-Cluster zu erstellen. Dadurch wird sichergestellt, dass die Identität der Microsoft Entra-Gruppe hinzugefügt wird, bevor ein Token von Kubelet generiert wird, wodurch das Latenzproblem vermieden wird.

Hinweis

In diesem Artikel wird die automatische Authentifizierung zwischen AKS und ACR beschrieben. Wenn Sie ein Image aus einer privaten externen Registrierung abrufen, verwenden Sie ein Geheimnis für Imagepullvorgänge.

Voraussetzungen

  • Sie benötigen die Rolle Besitzer, Azure-Kontoadministrator oder Azure-Co-Administrator in Ihrem Azure-Abonnement.
  • Wenn Sie die Azure CLI verwenden, müssen Sie für diesen Artikel mindestens die Azure CLI-Version 2.7.0 ausführen. Führen Sie az --version aus, um die Version zu ermitteln. Informationen zum Durchführen einer Installation oder eines Upgrades finden Sie bei Bedarf unter Installieren der Azure CLI.
  • Wenn Sie Azure PowerShell verwenden, erfordert dieser Artikel, dass Sie Azure PowerShell-Version 5.9.0 oder höher verwenden. Führen Sie Get-InstalledModule -Name Az aus, um die Version zu ermitteln. Falls Sie eine Installation oder ein Upgrade ausführen müssen, finden Sie unter Installieren von Azure PowerShell weitere Informationen.
  • Beispiele und Syntax zur Verwendung von Terraform zum Konfigurieren von ACR finden Sie in der Terraform-Referenz.

Erstellen einer neuen ACR

  • Wenn Sie noch nicht über eine ACR verfügen, erstellen Sie eine mit dem Befehl az acr create. Im folgenden Beispiel wird die Variable MYACR auf den Namen der ACR, mycontainerregistry, festgelegt, und die Variable wird verwendet, um die Registrierung zu erstellen. Ihr ACR-Name muss global eindeutig sein und darf nur Kleinbuchstaben verwenden.

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

Erstellen eines neuen AKS-Clusters und Integration in eine vorhandene ACR-Instanz

  • Erstellen Sie einen neuen AKS-Cluster, und integrieren Sie ihn mit dem Befehl az aks create mit dem --attach-acr-Parameter in eine vorhandene ACR. Mit diesem Befehl können Sie eine vorhandene ACR-Instanz in Ihrem Abonnement autorisieren und die entsprechende Rolle AcrPull für die verwaltete Identität konfigurieren.

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

    Dieser Befehl kann mehrere Minuten in Anspruch nehmen.

    Hinweis

    Wenn Sie eine ACR verwenden, die sich in einem anderen Abonnement als Ihr AKS-Cluster befindet, oder lieber die ACR-Ressourcen-ID anstelle des ACR-Namens verwenden möchten, können Sie dies mithilfe der folgenden Syntax tun:

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

Konfigurieren der ACR-Integration für einen vorhandenen AKS-Cluster

Anfügen einer ACR an einen vorhandenen AKS-Cluster

  • Integrieren Sie eine vorhandene ACR mit dem Befehl az aks update mit dem --attach-acr-Parameter und einem gültigen Wert für acr-name oder acr-resource-id in einen vorhandenen AKS-Cluster.

    # 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>
    

    Hinweis

    Der Befehl az aks update --attach-acr verwendet die Berechtigungen des Benutzers, der den Befehl zum Erstellen der ACR-Rollenzuweisung ausführt. Diese Rolle wird der verwalteten Kubelet-Identität zugewiesen. Weitere Informationen zu verwalteten AKS-Identitäten finden Sie unter Zusammenfassung der verwalteten Identitäten.

Trennen einer ACR-Instanz von einem AKS-Cluster

  • Entfernen Sie die Integration zwischen einer ACR und einem AKS-Cluster mithilfe des Befehls az aks update mit dem --detach-acr-Parameter und einem gültigen Wert für acr-name oder 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>
    

Arbeiten mit ACR und AKS

Importieren eines Images in Ihre ACR

  • Importieren Sie mit dem Befehl az acr import ein Image aus Docker Hub in Ihre ACR.

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

Bereitstellen des Beispielimages aus ACR in AKS

  1. Stellen Sie sicher, dass Sie über die richtigen AKS-Anmeldeinformationen verfügen, indem Sie den Befehl az aks get-credentials verwenden.

    az aks get-credentials -g myResourceGroup -n myAKSCluster
    
  2. Erstellen Sie eine Datei namens acr-nginx.yaml mithilfe des folgenden YAML-Beispiels, und ersetzen Sie acr-name durch den Namen Ihrer 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. Führen Sie die Bereitstellung in Ihrem AKS-Cluster mit dem Befehl kubectl apply aus.

    kubectl apply -f acr-nginx.yaml
    
  4. Überwachen Sie die Bereitstellung mit dem Befehl kubectl get pods.

    kubectl get pods
    

    Die Ausgabe sollte zwei ausgeführte Pods anzeigen, wie in der folgenden Beispielausgabe gezeigt:

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

Problembehandlung