Rozwiązywanie problemów z błędami "az aks command invoke"
W tym artykule opisano sposób rozwiązywania problemów z błędami az aks command invoke w interfejsie wiersza polecenia platformy Microsoft Azure, dzięki czemu można pomyślnie nawiązać połączenie z dowolnym klastrem usługi Azure Kubernetes Service (AKS), zwłaszcza z prywatnym klastrem usługi AKS.
Inne metody połączenia muszą używać dodatkowych składników konfiguracji, jak pokazano w poniższej tabeli.
Metody połączenia | Dodatkowy składnik konfiguracji |
---|---|
Sieć wirtualna | Wirtualna sieć prywatna (VPN) |
Sieć równorzędna | Azure ExpressRoute |
Prywatny punkt końcowy | Serwer przesiadkowy |
az aks command invoke
Polecenie interfejsu wiersza polecenia platformy Azure to alternatywny sposób nawiązywania połączenia z klastrem, który nie wymaga dodatkowych składników konfiguracji.
Po uruchomieniu az aks command invoke
polecenia interfejs wiersza polecenia platformy Azure automatycznie tworzy command-<ID>
zasobnik w aks-command
przestrzeni nazw, aby uzyskać dostęp do klastra usługi AKS i pobrać wymagane informacje.
Wymagania wstępne
Narzędzie Kubernetes kubectl . Aby zainstalować narzędzie kubectl przy użyciu interfejsu wiersza polecenia platformy Azure, uruchom polecenie az aks install-cli .
Symptomy
W poniższej tabeli wymieniono typowe az aks command invoke
komunikaty o błędach. Każdy komunikat o błędzie zawiera link do sekcji opisującą przyczynę wystąpienia błędu oraz sposób jego naprawy.
Komunikat o błędzie | Link |
---|---|
Operacja zwróciła nieprawidłowy stan "Nie znaleziono" | Przyczyna 1: Nie można utworzyć zasobnika z powodu ograniczeń węzła lub zasobów |
Nie można uruchomić polecenia w klastrze zarządzanym z powodu błędu kubernetes. szczegóły: element webhook wstępu "validation.gatekeeper.sh" odrzucił żądanie: <komunikat specyficzny dla zasad> | Przyczyna 2. Usługa Azure Policy nie zezwala na tworzenie zasobnika |
Błąd z serwera (zabronione): przestrzenie nazw są zabronione: Użytkownik "<ID>" nie może wyświetlić listy zasobów "<resource>" w grupie interfejsu API "" w zakresie klastra | Przyczyna 3. Wymagane role nie są przyznawane |
Nie można nawiązać połączenia z tożsamością usługi zarządzanej. Upewnij się, że tożsamość usługi zarządzanej jest skonfigurowana poprawnie. Zwrócone żądanie tokenu get: odpowiedź [400]; |
Przyczyna 4. Wystąpił problem z usługą Cloud Shell |
Przyczyna 1: Nie można utworzyć zasobnika z powodu ograniczeń węzła lub zasobów
Operacja zwraca Not Found
stan, ponieważ command-<ID>
zasobnik nie może osiągnąć stanu pomyślnego, takiego jak Running
. (W wielu przypadkach zasobnik pozostaje w Pending
stanie). W takim przypadku węzły nie mogą zaplanować zasobnika. Ten scenariusz może mieć różne przyczyny, takie jak następujące przyczyny:
- Ograniczenia zasobów
- Węzły, które mają
NotReady
stan lubSchedulingDisabled
- Węzły, które mają defekty, których zasobnik nie może tolerować
- Inne przyczyny
Rozwiązanie 1. Zmień konfigurację, aby można było zaplanować i uruchomić zasobnik
Upewnij się, że command-<ID>
zasobnik można zaplanować i uruchomić, dostosowując konfigurację. Na przykład:
- Zwiększ rozmiar puli węzłów i upewnij się, że nie ma żadnych ograniczeń zabezpieczania zasobników, takich jak defekty,
command-<ID>
aby można było wdrożyć zasobnik. - Dostosuj żądania zasobów i limity w specyfikacji zasobnika.
Przyczyna 2. Usługa Azure Policy nie zezwala na tworzenie zasobnika
Jeśli masz określone zasady platformy Azure, az aks command invoke
polecenie może zakończyć się niepowodzeniem z powodu niedozwolonej konfiguracji w zasobniku command-<ID>
. Na przykład możesz mieć zasady platformy Azure, które wymagają głównego systemu plików tylko do odczytu lub innej konkretnej konfiguracji.
Rozwiązanie 2. Wyklucz przestrzeń nazw dla zasad, które uniemożliwiają tworzenie zasobników
Zalecamy wykluczenie aks-command
przestrzeni nazw skojarzonych zasad platformy Azure, które nie zezwalają na tworzenie zasobnika. Aby uzyskać więcej informacji na temat wykluczania, zobacz Omówienie zakresu w usłudze Azure Policy
Aby wykluczyć usługę Azure Policy:
W witrynie Azure Portal wyszukaj i wybierz pozycję Zasady.
W okienku nawigacji Zasady znajdź sekcję Tworzenie , a następnie wybierz pozycję Przypisania.
W tabeli przypisań znajdź wiersz zawierający nazwę przypisania, którą chcesz zmienić, a następnie wybierz nazwę przypisania.
Na stronie przypisywania zasad dla tego przypisania wybierz pozycję Edytuj przypisanie.
Wybierz kartę Parametry.
Wyczyść pole Pokaż tylko parametry, które wymagają opcji wprowadzania lub przeglądania.
W polu Wykluczenia przestrzeni nazw dodaj przestrzeń nazw aks-command do listy przestrzeni nazw, które mają zostać wykluczone.
Alternatywnie, jeśli zasady nie są wbudowanymi zasadami, możesz sprawdzić konfigurację command-<ID>
zasobnika i dostosować zasady zgodnie z potrzebami. Aby zapoznać się z konfiguracją YAML zasobnika, uruchom następujące polecenie:
kubectl get pods command-<ID> --namespace aks-command --output yaml
Przestrzeń nazw można wykluczyć aks-command
z restrykcyjnych zasad, uruchamiając następujące polecenie:
az policy exemption create --name ExemptAksCommand --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster} --policyAssignment /subscriptions/{subscription-id}/providers/Microsoft.Authorization/policyAssignments/{policy-assignment-id}
Przyczyna 3. Wymagane role nie są przyznawane
Aby użyć az aks command invoke
polecenia, musisz mieć dostęp do następujących ról w klastrze:
Microsoft.ContainerService/managedClusters/runCommand/action
Microsoft.ContainerService/managedClusters/commandResults/read
Jeśli nie masz tych ról, az aks command invoke
polecenie nie może pobrać wymaganych informacji.
Rozwiązanie 3. Dodawanie wymaganych ról
Aby rozwiązać ten problem, wykonaj poniższe czynności:
Microsoft.ContainerService/managedClusters/runCommand/action
Dodaj role iMicrosoft.ContainerService/managedClusters/commandResults/read
.Przypisz niezbędne role użytkownikowi:
az role assignment create --assignee {user-principal-name} --role "Azure Kubernetes Service Cluster User Role" --scope /subscriptions/{subscription-id}/resourceGroups/{resource-group}/providers/Microsoft.ContainerService/managedClusters/{aks-cluster}
Przyczyna 4. Wystąpił problem z usługą Cloud Shell
Polecenie az aks command invoke
nie jest przetwarzane zgodnie z oczekiwaniami, gdy jest uruchamiane bezpośrednio w środowisku usługi Azure Cloud Shell . Jest to znany problem w usłudze Cloud Shell.
Rozwiązanie 4a: najpierw uruchom polecenie az login
W usłudze Cloud Shell uruchom polecenie az login przed uruchomieniem az aks command invoke
polecenia . Na przykład:
az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"
Rozwiązanie 4b: uruchamianie polecenia na komputerze lokalnym lub maszynie wirtualnej
az aks command invoke
Uruchom polecenie na komputerze lokalnym lub dowolnej maszynie wirtualnej z zainstalowanym interfejsem wiersza polecenia platformy Azure.
Zastrzeżenie dotyczące innych firm
Produkty innych firm omówione w tym artykule są wytwarzane przez producentów niezależnych od firmy Microsoft. Firma Microsoft nie udziela żadnych gwarancji, dorozumianych ani żadnego innego rodzaju, w odniesieniu do wydajności lub niezawodności tych produktów.
Skontaktuj się z nami, aby uzyskać pomoc
Jeśli masz pytania lub potrzebujesz pomocy, utwórz wniosek o pomoc techniczną lub zadaj pytanie w społeczności wsparcia dla platformy Azure. Możesz również przesłać opinię o produkcie do społeczności opinii na temat platformy Azure.