Używanie jednostki usługi z usługą Azure Kubernetes Service (AKS)
Klaster AKS wymaga jednostki usługi Microsoft Entra lub tożsamości zarządzanej do dynamicznego tworzenia innych zasobów platformy Azure, takich jak usługa Azure Load Balancer lub usługa Azure Container Registry (ACR, Azure Load Balancer lub Azure Container Registry).
Aby uzyskać optymalne zabezpieczenia i łatwość użycia, firma Microsoft zaleca używanie tożsamości zarządzanych, a nie jednostek usług w celu autoryzowania dostępu z klastra usługi AKS do innych zasobów na platformie Azure. Tożsamość zarządzana to specjalny typ jednostki usługi, który może służyć do uzyskiwania poświadczeń firmy Microsoft Entra bez konieczności zarządzania i zabezpieczania poświadczeń. Aby uzyskać więcej informacji na temat używania tożsamości zarządzanej z klastrem, zobacz Używanie tożsamości zarządzanej w usłudze AKS.
W tym artykule pokazano, jak utworzyć jednostkę usługi i używać jej z klastrami usługi AKS.
Zanim rozpoczniesz
Aby utworzyć jednostkę usługi Microsoft Entra, musisz mieć uprawnienia do rejestrowania aplikacji w dzierżawie firmy Microsoft Entra i przypisania aplikacji do roli w ramach subskrypcji. Jeśli nie masz niezbędnych uprawnień, musisz poprosić administratora usługi Microsoft Entra ID lub administratora subskrypcji o przypisanie niezbędnych uprawnień lub wstępne utworzenie jednostki usługi do użycia z klastrem usługi AKS.
Jeśli używasz jednostki usługi z innej dzierżawy firmy Microsoft Entra, istnieją inne zagadnienia dotyczące uprawnień dostępnych podczas wdrażania klastra. Być może nie masz odpowiednich uprawnień do odczytywania i zapisywania informacji o katalogu. Aby uzyskać więcej informacji, zobacz Jakie są domyślne uprawnienia użytkownika w identyfikatorze Entra firmy Microsoft?
Wymagania wstępne
- Jeśli używasz interfejsu wiersza polecenia platformy Azure, potrzebujesz interfejsu wiersza polecenia platformy Azure w wersji 2.0.59 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, potrzebujesz programu Azure PowerShell w wersji 5.0.0 lub nowszej. Uruchom polecenie
Get-InstalledModule -Name Az
, aby dowiedzieć się, jaka wersja jest używana. Jeśli musisz zainstalować lub uaktualnić, zobacz Instalowanie modułu Azure Az programu PowerShell.
Tworzenie jednostki usługi
Utwórz jednostkę usługi przed utworzeniem klastra.
Utwórz jednostkę usługi przy użyciu
az ad sp create-for-rbac
polecenia .az ad sp create-for-rbac --name myAKSClusterServicePrincipal
Dane wyjściowe powinny być podobne do następujących przykładowych danych wyjściowych:
{ "appId": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "displayName": "myAKSClusterServicePrincipal", "name": "http://myAKSClusterServicePrincipal", "password": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "tenant": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" }
Skopiuj wartości dla
appId
ipassword
z danych wyjściowych. Są one używane podczas tworzenia klastra usługi AKS w następnej sekcji.
Określanie jednostki usługi dla klastra usługi AKS
Użyj istniejącej jednostki usługi dla nowego klastra usługi AKS przy użyciu
az aks create
polecenia i użyj--service-principal
parametrów i--client-secret
, aby określićappId
wartości ipassword
z danych wyjściowych odebranych w poprzedniej sekcji.az aks create \ --resource-group myResourceGroup \ --name myAKSCluster \ --service-principal <appId> \ --client-secret <password> \ --generate-ssh-keys
Uwaga
Jeśli używasz istniejącej jednostki usługi z dostosowanym wpisem tajnym, upewnij się, że wpis tajny nie jest dłuższy niż 190 bajtów.
Delegowanie dostępu do innych zasobów platformy Azure
Aby uzyskać dostęp do innych zasobów, możesz użyć jednostki usługi dla klastra usługi AKS. Jeśli na przykład chcesz wdrożyć klaster usługi AKS w istniejącej podsieci sieci wirtualnej platformy Azure, połącz się z usługą Azure Container Registry (ACR) lub kluczami dostępu lub wpisami tajnymi w magazynie kluczy z klastra, musisz delegować dostęp do tych zasobów do jednostki usługi. Aby delegować dostęp, przypisz rolę kontroli dostępu na podstawie ról (RBAC) platformy Azure do jednostki usługi.
Ważne
Propagacja uprawnień udzielonych jednostce usługi skojarzonej z klastrem może potrwać 60 minut.
Utwórz przypisanie roli przy użyciu
az role assignment create
polecenia . Podaj wartość identyfikatora appID jednostki usługi dla parametruappId
. Określ zakres przypisania roli, taki jak grupa zasobów lub zasób sieci wirtualnej. Przypisanie roli określa, jakie uprawnienia ma jednostka usługi w zasobie i w jakim zakresie.Aby na przykład przypisać uprawnienia jednostki usługi do uzyskiwania dostępu do wpisów tajnych w magazynie kluczy, możesz użyć następującego polecenia:
az role assignment create \ --assignee <appId> \ --scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group>/providers/Microsoft.KeyVault/vaults/<vault-name>" \ --role "Key Vault Secrets User"
Uwaga
Element
--scope
dla zasobu musi być pełnym identyfikatorem zasobu, takim jak /subscriptions/<guid>/resourceGroups/myResourceGroup lub /subscriptions/guid>/<resourceGroups/myResourceGroupVnet/providers/Microsoft.Network/virtualNetworks/myVnet.
W poniższych sekcjach opisano typowe delegowanie, które mogą być konieczne do przypisania do jednostki usługi.
Azure Container Registry
Jeśli używasz usługi Azure Container Registry (ACR) jako magazynu obrazów kontenera, musisz udzielić uprawnień jednostce usługi dla klastra usługi AKS w celu odczytywania i ściągania obrazów. Zalecamy użycie az aks create
polecenia or az aks update
w celu zintegrowania z rejestrem i przypisania odpowiedniej roli dla jednostki usługi. Aby uzyskać szczegółowe instrukcje, zobacz Uwierzytelnianie za pomocą usługi Azure Container Registry z usługi Azure Kubernetes Service.
Sieć
Możesz użyć zaawansowanych funkcji sieciowych, w przypadku których sieć wirtualna i podsieć lub publiczne adresy IP znajdują się w innej grupie zasobów. Przypisz wbudowaną rolę Współautor sieci w podsieci w sieci wirtualnej. Alternatywnie możesz utworzyć rolę niestandardową z uprawnieniami dostępu do zasobów sieciowych w tej grupie zasobów. Aby uzyskać więcej informacji, zobacz Uprawnienia usługi AKS.
Storage
Jeśli musisz uzyskać dostęp do istniejących zasobów dysku w innej grupie zasobów, przypisz jeden z następujących zestawów uprawnień roli:
- Utwórz rolę niestandardową i zdefiniuj uprawnienia roli Microsoft.Compute/disks/read i Microsoft.Compute/disks/write lub
- Przypisz wbudowaną rolę Współautor maszyny wirtualnej w grupie zasobów.
Azure Container Instances
Jeśli używasz wirtualnego rozwiązania Kubelet do integracji z usługą AKS i wybierzesz uruchamianie usługi Azure Container Instances (ACI) w grupie zasobów niezależnie od klastra usługi AKS, jednostka usługi klastra usługi AKS musi mieć przyznane uprawnienia Współautor w grupie zasobów usługi ACI.
Inne uwagi
W przypadku korzystania z usługi AKS i jednostki usługi Microsoft Entra należy wziąć pod uwagę następujące kwestie:
- Jednostka usługi dla platformy Kubernetes jest częścią konfiguracji klastra, ale nie używaj tej tożsamości do wdrożenia klastra.
- Domyślnie poświadczenia jednostki usługi są ważne przez jeden rok. Poświadczenia jednostki usługi można aktualizować lub obracać w dowolnym momencie.
- Każda jednostka usługi jest skojarzona z aplikacją firmy Microsoft Entra. Jednostkę usługi dla klastra Kubernetes można skojarzyć z dowolną prawidłową nazwą aplikacji Firmy Microsoft Entra (na przykład: https://www.contoso.org/example). Adres URL dla aplikacji nie musi być rzeczywistym punktem końcowym.
- Podczas określania identyfikatora klienta jednostki usługi użyj wartości
appId
. - Na maszynach wirtualnych węzła agenta w klastrze Kubernetes poświadczenia jednostki usługi są przechowywane w
/etc/kubernetes/azure.json
pliku. - Usunięcie klastra usługi AKS utworzonego
az aks create
przy użyciu polecenia spowoduje, że utworzona jednostka usługi nie zostanie automatycznie usunięta.Aby usunąć jednostkę usługi, wykonaj zapytanie dotyczące parametru servicePrincipalProfile.clientId klastra i usuń je przy użyciu
az ad sp delete
polecenia . Zastąp wartości parametru-g
dla nazwy grupy zasobów i-n
parametru nazwy klastra:az ad sp delete --id $(az aks show \ --resource-group myResourceGroup \ --name myAKSCluster \ --query servicePrincipalProfile.clientId \ --output tsv)
Rozwiązywanie problemów
Interfejs wiersza polecenia platformy Azure buforuje poświadczenia jednostki usługi dla klastrów usługi AKS. Jeśli te poświadczenia wygasną, podczas wdrażania klastra usługi AKS mogą wystąpić błędy. Jeśli uruchomisz az aks create
polecenie i zostanie wyświetlony komunikat o błędzie podobny do następującego, może to wskazywać na problem z poświadczeniami jednostki usługi w pamięci podręcznej:
Operation failed with status: 'Bad Request'.
Details: The credentials in ServicePrincipalProfile were invalid. Please see https://aka.ms/aks-sp-help for more details.
(Details: adal: Refresh request failed. Status Code = '401'.
Datę wygaśnięcia poświadczeń jednostki usługi można sprawdzić przy użyciu az ad app credential list
polecenia z zapytaniem "[].endDateTime"
.
az ad app credential list \
--id <app-id> \
--query "[].endDateTime" \
--output tsv
Domyślny czas wygasania poświadczeń jednostki usługi wynosi jeden rok. Jeśli poświadczenia są starsze niż rok, możesz zresetować istniejące poświadczenia lub utworzyć nową jednostkę usługi.
Ogólne rozwiązywanie problemów z interfejsem wiersza polecenia platformy Azure
Interfejs wiersza polecenia platformy Azure może działać w kilku środowiskach powłoki, ale z niewielkimi odmianami formatu. Jeśli masz nieoczekiwane wyniki za pomocą poleceń interfejsu wiersza polecenia platformy Azure, zobacz Jak pomyślnie używać interfejsu wiersza polecenia platformy Azure.
Następne kroki
Aby uzyskać więcej informacji na temat jednostek usługi Microsoft Entra, zobacz Obiekty aplikacji i jednostki usługi.
Aby uzyskać informacje na temat sposobu aktualizowania poświadczeń, zobacz Aktualizowanie lub obracanie poświadczeń dla jednostki usługi w usłudze AKS.
Azure Kubernetes Service