Udostępnij za pośrednictwem


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

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 lub SchedulingDisabled
  • 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:

  1. W witrynie Azure Portal wyszukaj i wybierz pozycję Zasady.

  2. W okienku nawigacji Zasady znajdź sekcję Tworzenie , a następnie wybierz pozycję Przypisania.

  3. W tabeli przypisań znajdź wiersz zawierający nazwę przypisania, którą chcesz zmienić, a następnie wybierz nazwę przypisania.

  4. Na stronie przypisywania zasad dla tego przypisania wybierz pozycję Edytuj przypisanie.

  5. Wybierz kartę Parametry.

  6. Wyczyść pole Pokaż tylko parametry, które wymagają opcji wprowadzania lub przeglądania.

  7. 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:

  1. Microsoft.ContainerService/managedClusters/runCommand/action Dodaj role i Microsoft.ContainerService/managedClusters/commandResults/read .

  2. 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.