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.
- Aby uniknąć konieczności posiadania jednej z tych ról, możesz zamiast tego użyć istniejącej tożsamości zarządzanej do uwierzytelniania usługi ACR z usługi AKS. Aby uzyskać więcej informacji, zobacz Używanie tożsamości zarządzanej platformy Azure do uwierzytelniania w usłudze ACR.
- 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 --name $MYACR --resource-group 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 --name myAKSCluster --resource-group 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 --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>
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 --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>
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 --name <acr-name> --source docker.io/library/nginx:latest --image nginx:v1
Wdrażanie przykładowego obrazu z usługi ACR w usłudze AKS
Upewnij się, że masz odpowiednie poświadczenia usługi AKS przy użyciu
az aks get-credentials
polecenia .az aks get-credentials --resource-group myResourceGroup --name myAKSCluster
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
Uruchom wdrożenie w klastrze usługi AKS przy użyciu
kubectl apply
polecenia .kubectl apply -f acr-nginx.yaml
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.
Azure Kubernetes Service