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 verwalteten Microsoft 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.
- Um eine dieser Rollen zu vermeiden, können Sie stattdessen eine vorhandene verwaltete Identität verwenden, um ACR über AKS zu authentifizieren. Weitere Informationen finden Sie unter Verwenden einer verwalteten Azure-Identität zum Authentifizieren bei ACR.
- 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 VariableMYACR
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 --name $MYACR --resource-group 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 --name myAKSCluster --resource-group 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 --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>
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 --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>
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 --name <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, indem Sie den Befehl
az aks get-credentials
verwenden.az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
Führen Sie die Bereitstellung in Ihrem AKS-Cluster mit dem Befehl
kubectl apply
aus.kubectl apply -f acr-nginx.yaml
Ü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
- Überprüfen Sie mithilfe des Befehls
az aks check-acr
, ob vom AKS-Cluster aus auf die Registrierung zugegriffen werden kann. - Weitere Informationen zur ACR-Überwachung.
- Weitere Informationen zur ACR-Integrität.
Azure Kubernetes Service