Freigeben über


Beheben von "az aks command invoke"-Fehlern

In diesem Artikel wird beschrieben, wie Sie az aks command invoke failures in Microsoft Azure CLI beheben, damit Sie erfolgreich eine Verbindung mit einem beliebigen Azure Kubernetes Service (AKS)-Cluster herstellen können, insbesondere mit einem privaten AKS-Cluster.

Andere Verbindungsmethoden müssen zusätzliche Konfigurationskomponenten verwenden, wie in der folgenden Tabelle dargestellt.

Verbindungsmethoden Zusätzliche Konfigurationskomponente
Virtuelles Netzwerk Ein virtuelles privates Netzwerk (VPN)
Netzwerk mit Peering Azure ExpressRoute
Privater Endpunkt Jumpbox

Der az aks command invoke Azure CLI-Befehl ist eine alternative Möglichkeit zum Herstellen einer Verbindung mit einem Cluster, für die keine zusätzlichen Konfigurationskomponenten erforderlich sind.

Wenn Sie den az aks command invoke Befehl ausführen, erstellt Azure CLI automatisch einen command-<ID> Pod im aks-command Namespace, um auf den AKS-Cluster zuzugreifen und die erforderlichen Informationen abzurufen.

Voraussetzungen

Symptome

In der folgenden Tabelle sind allgemeine az aks command invoke Fehlermeldungen aufgeführt. Jede Fehlermeldung enthält einen Link zum Abschnitt, der beschreibt, warum der Fehler auftritt, und wie sie behoben werden kann.

Fehlermeldung Verknüpfung
Der Vorgang hat einen ungültigen Status "Nicht gefunden" zurückgegeben. Ursache 1: Der Pod kann aufgrund von Knoten- oder Ressourceneinschränkungen nicht erstellt werden.
Fehler beim Ausführen des Befehls im verwalteten Cluster aufgrund eines Kubernetes-Fehlers. Details: Zulassungswebhook "validation.gatekeeper.sh" verweigert die Anforderung: <richtlinienspezifische Nachricht> Ursache 2: Die Azure-Richtlinie lässt die Poderstellung nicht zu
Fehler vom Server (Verboten): Namespaces sind unzulässig: Die Benutzer-ID<> kann keine Ressource "<Ressource>" in der API-Gruppe "" im Clusterbereich auflisten. Ursache 3: Erforderliche Rollen werden nicht gewährt
Fehler beim Herstellen einer Verbindung mit MSI. Stellen Sie sicher, dass die MSI ordnungsgemäß konfiguriert ist.

Tokenanforderung wird zurückgegeben: Antwort [400];
Ursache 4: Es gibt ein Cloud Shell-Problem

Ursache 1: Der Pod kann aufgrund von Knoten- oder Ressourceneinschränkungen nicht erstellt werden.

Der Vorgang gibt einen Not Found Status zurück, da der command-<ID> Pod keinen erfolgreichen Zustand erreichen kann, z Running. B. . (In vielen Fällen bleibt der Pod im Pending Zustand.) In diesem Fall können die Knoten den Pod nicht planen. Dieses Szenario kann unterschiedliche Ursachen haben, z. B. die folgenden Ursachen:

  • Ressourceneinschränkungen
  • Knoten mit einem NotReady oder SchedulingDisabled einem Zustand
  • Knoten mit Taints, die der Pod nicht tolerieren kann
  • Weitere Ursachen

Lösung 1: Ändern der Konfiguration, sodass Sie den Pod planen und ausführen können

Stellen Sie sicher, dass der command-<ID> Pod geplant und ausgeführt werden kann, indem Sie die Konfiguration anpassen. Zum Beispiel:

  • Erhöhen Sie die Größe des Knotenpools, und stellen Sie sicher, dass keine Pod-Schattierungseinschränkungen wie Taints vorhanden sind, damit der command-<ID> Pod bereitgestellt werden kann.
  • Passen Sie Ressourcenanforderungen und Grenzwerte in Ihren Podspezifikationen an.

Ursache 2: Die Azure-Richtlinie lässt die Poderstellung nicht zu

Wenn Sie über bestimmte Azure-Richtlinien verfügen, kann der az aks command invoke Befehl aufgrund einer nicht zulässigen Konfiguration im command-<ID> Pod fehlschlagen. Sie verfügen beispielsweise über eine Azure-Richtlinie, die ein schreibgeschütztes Stammdateisystem oder eine andere spezifische Konfiguration erfordert.

Lösung 2: Ausgenommen den Namespace für Richtlinien, die die Erstellung von Pods verbieten

Es wird empfohlen, den aks-command Namespace für die zugehörigen Azure-Richtlinien auszunehmen, die die Poderstellung nicht zulassen. Weitere Informationen zur Ausnahme finden Sie unter Grundlegendes zum Gültigkeitsbereich in der Azure-Richtlinie

So setzen Sie eine Azure-Richtlinie aus:

  1. Suchen Sie im Azure-Portal nach Richtlinie, und wählen Sie sie aus.

  2. Suchen Sie im Navigationsbereich "Richtlinie" den Abschnitt "Dokumenterstellung", und wählen Sie dann "Aufgaben" aus.

  3. Suchen Sie in der Tabelle der Zuordnungen die Zeile, die den Zu ändernden Zuordnungsnamen enthält, und wählen Sie dann den Namen der Zuordnung aus.

  4. Wählen Sie auf der Seite "Richtlinienzuweisung" für diese Aufgabe "Aufgabe bearbeiten" aus.

  5. Wählen Sie dann die Registerkarte Parameter aus.

  6. Deaktivieren Sie die Option "Nur Anzeigen", die Eingabe- oder Überprüfungsoption benötigen.

  7. Fügen Sie im Feld "Namespaceausschlüsse " den Aks-Befehlsnamespace zur Liste der namespaces hinzu, die ausgeschlossen werden sollen.

Alternativ können Sie, wenn die Richtlinie keine integrierte Richtlinie ist, die Konfiguration des command-<ID> Pods überprüfen und die Richtlinie bei Bedarf anpassen. Führen Sie den folgenden Befehl aus, um die YAML-Konfiguration des Pods zu erkunden:

kubectl get pods command-<ID> --namespace aks-command --output yaml

Sie können den aks-command Namespace von restriktiven Richtlinien ausschließen, indem Sie den folgenden Befehl ausführen:

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}

Ursache 3: Erforderliche Rollen werden nicht gewährt

Um den az aks command invoke Befehl zu verwenden, müssen Sie Zugriff auf die folgenden Rollen im Cluster haben:

  • Microsoft.ContainerService/managedClusters/runCommand/action
  • Microsoft.ContainerService/managedClusters/commandResults/read

Wenn Sie nicht über diese Rollen verfügen, kann der az aks command invoke Befehl die erforderlichen Informationen nicht abrufen.

Lösung 3: Hinzufügen der erforderlichen Rollen

Gehen Sie folgendermaßen vor, um das Problem zu beheben:

  1. Fügen Sie die Rollen und Microsoft.ContainerService/managedClusters/commandResults/read die Microsoft.ContainerService/managedClusters/runCommand/action Rollen hinzu.

  2. Weisen Sie dem Benutzer die erforderlichen Rollen zu:

    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}
    

Ursache 4: Es gibt ein Cloud Shell-Problem

Der az aks command invoke Befehl wird nicht wie erwartet verarbeitet, wenn er direkt in der Azure Cloud Shell-Umgebung ausgeführt wird. Dies ist ein bekanntes Problem in Cloud Shell.

Lösung 4a: Führen Sie zuerst den Az-Anmeldebefehl aus.

Führen Sie in Cloud Shell den Az-Anmeldebefehl aus, bevor Sie den az aks command invoke Befehl ausführen. Zum Beispiel:

az login
az aks command invoke --resource-group {resource-group} --name {aks-cluster} --command "kubectl get pods"

Lösung 4b: Ausführen des Befehls auf einem lokalen Computer oder einem virtuellen Computer

Führen Sie den az aks command invoke Befehl auf einem lokalen Computer oder einem virtuellen Computer (VM) aus, auf dem Azure CLI installiert ist.

Informationen zum Haftungsausschluss von Drittanbietern

Die in diesem Artikel genannten Drittanbieterprodukte stammen von Herstellern, die von Microsoft unabhängig sind. Microsoft gewährt keine implizite oder sonstige Garantie in Bezug auf die Leistung oder Zuverlässigkeit dieser Produkte.

Kontaktieren Sie uns für Hilfe

Wenn Sie Fragen haben oder Hilfe mit Ihren Azure-Gutschriften benötigen, dann erstellen Sie beim Azure-Support eine Support-Anforderung oder fragen Sie den Azure Community-Support. Sie können auch Produktfeedback an die Azure Feedback Community senden.