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
Das Kubernetes-Kubectl-Tool. Führen Sie zum Installieren von Kubectl mithilfe der Azure CLI den Befehl "az aks install-cli " aus.
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
oderSchedulingDisabled
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:
Suchen Sie im Azure-Portal nach Richtlinie, und wählen Sie sie aus.
Suchen Sie im Navigationsbereich "Richtlinie" den Abschnitt "Dokumenterstellung", und wählen Sie dann "Aufgaben" aus.
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.
Wählen Sie auf der Seite "Richtlinienzuweisung" für diese Aufgabe "Aufgabe bearbeiten" aus.
Wählen Sie dann die Registerkarte Parameter aus.
Deaktivieren Sie die Option "Nur Anzeigen", die Eingabe- oder Überprüfungsoption benötigen.
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:
Fügen Sie die Rollen und
Microsoft.ContainerService/managedClusters/commandResults/read
dieMicrosoft.ContainerService/managedClusters/runCommand/action
Rollen hinzu.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.