Authentifizieren per Azure Container Registry über Azure Kubernetes Service

Sie müssen einen Authentifizierungsmechanismus einrichten, wenn Sie Azure Container Registry (ACR) mit Azure Kubernetes Service (AKS) verwenden. Dieser Vorgang wird als Teil der Azure CLI, von Azure PowerShell und des Azure-Portals implementiert, indem Sie Ihrer ACR-Instanz die erforderlichen Berechtigungen erteilen. In diesem Artikel werden Beispiele für die Konfiguration der Authentifizierung zwischen diesen Azure-Diensten beschrieben.

Sie können die AKS-zu-ACR-Integration mithilfe der Azure CLI oder mit Azure PowerShell einrichten. Die Integration von AKS zu ACR weist die Rolle AcrPull der verwaltetenAzure Active Directory-Identität (Azure AD) zu, die Ihrem AKS-Cluster zugeordnet ist.

Wichtig

Beim Anfügen von ACR tritt ein Latenzproblem mit Azure Active Directory-Gruppen auf. Wenn die AcrPull-Rolle einer Azure AD-Gruppe zugewiesen und die Kubelet-Identität der Gruppe hinzugefügt wird, um die RBAC-Konfiguration abzuschließen, kann es zu einer Verzögerung von bis zu einer Stunde kommen, bevor die RBAC-Gruppe wirksam wird. Es wird empfohlen, die Bring Your Own-Kubelet-Identität als Problemumgehung zu verwenden. Sie können eine benutzerseitig zugewiesene Identität vorab erstellen, sie der Azure AD-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 Azure AD-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.

Erstellen eines neuen AKS-Clusters mit ACR-Integration

Sie können die AKS- und ACR-Integration während der Erstellung Ihres AKS-Clusters einrichten. Damit ein AKS-Cluster mit ACR interagieren kann, wird eine verwaltete Azure AD-Identität verwendet.

Erstellen einer ACR-Instanz

Wenn Sie noch nicht über eine ACR-Instanz verfügen, erstellen Sie eine mit dem folgenden Befehl.

# 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

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

Wenn Sie bereits über eine ACR-Instanz verfügen, verwenden Sie den folgenden Befehl, um einen neuen AKS-Cluster mit ACR-Integration zu erstellen. 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. Geben Sie gültige Werte für die unten stehenden Parameter an.

# 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

Alternativ können Sie den ACR-Namen mithilfe einer ACR-Ressourcen-ID im folgenden Format angeben:

/subscriptions/\<subscription-id\>/resourceGroups/\<resource-group-name\>/providers/Microsoft.ContainerRegistry/registries/\<name\>

Hinweis

Wenn Sie eine ACR-Instanz verwenden, die sich in einem anderen Abonnement als Ihr AKS-Cluster befindet, verwenden Sie beim Anfügen oder Trennen eines Clusters die ACR-Ressourcen-ID.

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

Dieser Schritt kann mehrere Minuten in Anspruch nehmen.

Konfigurieren der ACR-Integration für vorhandene AKS-Cluster

Anfügen einer ACR-Instanz an einen AKS-Cluster

Integrieren Sie eine vorhandene ACR-Instanz mit einem vorhandenen AKS-Cluster mithilfe des --attach-acr-Parameters und gültiger Werte für acr-name oder 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>

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-Instanz und einem AKS-Cluster mithilfe des --detach-acr-Parameters und gültiger Werte 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

Führen Sie den folgenden Befehl aus, um ein Image aus Docker Hub in Ihre ACR-Instanz zu importieren.

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

Bereitstellen des Beispielimages aus ACR in AKS

Stellen Sie sicher, dass Sie über die richtigen AKS-Anmeldeinformationen verfügen.

az aks get-credentials -g myResourceGroup -n myAKSCluster

Erstellen Sie eine Datei namens acr-nginx.yaml mithilfe des folgenden YAML-Beispiels. Ersetzen Sie acr-name durch den Namen Ihrer ACR-Instanz.

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

Führen Sie nach dem Erstellen der Datei die folgende Bereitstellung in Ihrem AKS-Cluster aus.

kubectl apply -f acr-nginx.yaml

Sie können die Bereitstellung überwachen, indem Sie kubectl get pods ausführen.

kubectl get pods

Die Ausgabe sollte zwei aktive Pods anzeigen.

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

Problembehandlung