Freigeben über


Allgemeine Problembehandlung des Istio-Dienst-Gitter-Add-Ons

In diesem Artikel werden allgemeine Strategien (die microsoft kubectlistioctlAzure Kubernetes Service Service (AKS) verwenden und andere Tools verwenden, um Probleme zu beheben, die mit dem Istio-Dienstgitter-Add-On für Microsoft Azure Kubernetes Service (AKS) zusammenhängen. Dieser Artikel enthält auch eine Liste möglicher Fehlermeldungen, Gründe für Fehlervorkommnisse und Empfehlungen zur Behebung dieser Fehler.

Voraussetzungen

Prüfliste zur Problembehandlung: Verwenden von Kubectl

Die folgenden Schritte zur Problembehandlung verwenden verschiedene kubectl Befehle, mit denen Sie hängen gebliebene Pods oder Fehler im Istio-Daemon (Istiod) debuggen können.

Schritt 1: Abrufen von Istiod-Pod-Protokollen

Rufen Sie die Istiod-Pod-Protokolle ab, indem Sie den folgenden Befehl für kubectl-Protokolle ausführen:

kubectl logs --selector app=istiod --namespace aks-istio-system

Schritt 2: Springen (Löschen) eines Pods

Möglicherweise haben Sie einen guten Grund, einen Pod neu zu starten. Da Esiod eine Bereitstellung ist, ist es sicher, den Pod einfach zu löschen, indem der Befehl kubectl delete ausgeführt wird:

kubectl delete pods <istio-pod> --namespace aks-istio-system

Der Istio-Pod wird von einer Bereitstellung verwaltet, sodass der Pod automatisch neu erstellt und erneut bereitgestellt wird, nachdem Sie den Istio-Pod direkt gelöscht haben. Daher ist das Löschen des Pods eine alternative Methode zum Neustarten des Pods.

Notiz

Alternativ können Sie die Bereitstellung direkt neu starten, indem Sie den folgenden Kubectl-Rollout-Neustartbefehl ausführen:

kubectl rollout restart deployment <istiod-asm-revision> --namespace aks-istio-system

Schritt 3: Überprüfen des Status von Ressourcen

Wenn Istiod nicht geplant ist oder der Pod nicht reagiert, sollten Sie den Status der Bereitstellung und der Replikatsätze überprüfen. Führen Sie dazu den Befehl "kubectl get " aus:

kubectl get <resource-type> [[--selector app=istiod] | [<resource-name>]]

Der aktuelle Ressourcenstatus wird am Ende der Ausgabe angezeigt. Die Ausgabe zeigt möglicherweise auch Ereignisse an, die der Controllerschleife zugeordnet sind.

Schritt 4: Abrufen von benutzerdefinierten Ressourcendefinitionstypen

Um die Typen von benutzerdefinierten Ressourcendefinitionen (CRDs) anzuzeigen, die Istio verwendet, führen Sie den kubectl get Folgenden Befehl aus:

kubectl get crd | grep istio

Führen Sie als Nächstes den folgenden kubectl get Befehl aus, um alle Ressourcennamen auflisten, die auf einer bestimmten CRD basieren:

kubectl get <crd-type> --all-namespaces

Schritt 5: Anzeigen der Liste der Istiod-Pods

Zeigen Sie die Liste der Istiod-Pods an, indem Sie den folgenden kubectl get Befehl ausführen:

kubectl get pod --namespace aks-istio-system --output yaml

Schritt 6: Abrufen weiterer Informationen zur Envoy-Konfiguration

Wenn Konnektivitätsprobleme zwischen Pods auftreten, erhalten Sie weitere Informationen zur Envoy-Konfiguration, indem Sie den folgenden Kubectl-exec-Befehl für den Administratorport von Envoy ausführen:

kubectl exec --namespace <pod-namespace> \
    "$(kubectl get pods \
        --namespace <pod-namespace> \
        --selector app=sleep \
        --output jsonpath='{.items[0].metadata.name}')" \
    --container sleep \
-- curl -s localhost:15000/clusters

Schritt 7: Abrufen der Sidecar-Protokolle für die Quell- und Ziel-Sidecars

Rufen Sie die Sidecar-Protokolle für die Quell- und Ziel-Sidecars ab, indem Sie den folgenden kubectl logs Befehl zweimal ausführen (das erste Mal für den Quell pod und das zweite Mal für den Ziel-Pod):

kubectl logs <pod-name> --namespace <pod-namespace> --container istio-proxy

Prüfliste zur Problembehandlung: Verwenden von istioctl

Die folgenden Schritte zur Problembehandlung beschreiben, wie Sie Informationen sammeln und Ihre Gitterumgebung debuggen, indem Sie verschiedene istioctl Befehle ausführen.

Warnung

Einige istioctl Befehle senden Anforderungen an alle Sidecars.

Notiz

Bevor Sie beginnen, beachten Sie, dass Die meisten istioctl Befehle erfordern, dass Sie die Überarbeitung der Steuerungsebene kennen müssen. Sie können diese Informationen aus dem Suffix der Istiod-Bereitstellungen oder der Pods abrufen, oder Sie können den folgenden Istioctl-Taglistenbefehl ausführen:

istioctl tag list

Schritt 1: Stellen Sie sicher, dass Istio ordnungsgemäß installiert ist

Um zu überprüfen, ob Sie über eine korrekte Istio-Add-On-Installation verfügen, führen Sie den folgenden Befehl "istioctl verify-install" aus:

istioctl verify-install --istioNamespace aks-istio-system --revision <tag>

Schritt 2: Analysieren von Namespaces

Um alle Namespaces zu analysieren oder einen bestimmten Namespace zu analysieren, führen Sie den folgenden Isioctl-Analysebefehl aus :

istioctl analyze --istioNamespace aks-istio-system \
    --revision <tag> \
    [--all-namespaces | --namespace <namespace-name>] \
    [--failure-threshold {Info | Warning | Error}]

Schritt 3: Abrufen des Proxystatus

Führen Sie den folgenden Istioctl-Proxystatusbefehl aus, um den Proxystatus abzurufen:

istioctl proxy-status pod/<pod-name> \
    --istioNamespace aks-istio-system \
    --revision <tag> \
    --namespace <pod-namespace>

Schritt 4: Herunterladen der Proxykonfiguration

Führen Sie zum Herunterladen der Proxykonfiguration den folgenden Befehl "istioctl proxy-config all " aus:

istioctl proxy-config all <pod-name> \
    --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --output json

Notiz

Statt die all Variante des istioctl proxy-config Befehls zu verwenden, können Sie eine der folgenden Varianten verwenden:

Schritt 5: Überprüfen des Einfügungsstatus

Führen Sie den folgenden experimentellen Check-Inject-Befehl aus, um den Einfügestatus der Ressource zu überprüfen:

istioctl experimental check-inject --istioNamespace aks-istio-system \
    --namespace <pod-namespace> \
    --labels <label-selector> | <pod-name> | deployment/<deployment-name>

Schritt 6: Abrufen eines vollständigen Fehlerberichts

Ein vollständiger Fehlerbericht enthält die detailliertesten Informationen. Es kann jedoch auch zeitaufwändig auf einem großen Cluster sein, da er alle Pods enthält. Sie können den Fehlerbericht auf bestimmte Namespaces beschränken. Sie können den Bericht auch auf bestimmte Bereitstellungen, Pods oder Bezeichnungsmarkierer beschränken.

Führen Sie zum Abrufen eines Fehlerberichts den folgenden Istioctl-Fehlerberichtsbefehl aus:

istioctl bug-report --istioNamespace aks-istio-system \
    [--include <namespace-1>[, <namespace-2>[, ...]]]

Prüfliste zur Problembehandlung: Verschiedene Probleme

Schritt 1: Beheben von Ressourcennutzungsproblemen

Wenn bei Envoy eine hohe Speicherauslastung auftritt, überprüfen Sie Ihre Envoy-Einstellungen auf die Datensammlung von Statistiken. Wenn Sie Istio-Metriken über MeshConfig anpassen, denken Sie daran, dass bestimmte Metriken eine hohe Kardinalität aufweisen können und daher einen höheren Speicherbedarf schaffen. Andere Felder in MeshConfig, z. B. Parallelität, wirken sich auf die CPU-Auslastung aus und sollten sorgfältig konfiguriert werden.

Standardmäßig fügt Istio Informationen zu allen Diensten hinzu, die sich im Cluster befinden, zu jeder Envoy-Konfiguration. Das Sidecar kann den Umfang dieser Ergänzung nur auf Workloads innerhalb bestimmter Namespaces beschränken. Weitere Informationen finden Sie unter "Achten Sie auf diesen Istio-Proxy-Sidecar-Speicherfall.For more information, see Watch out for this Istio proxy sidecar memory pitfall.

Die folgende Sidecar Definition im aks-istio-system Namespace schränkt z. B. die Envoy-Konfiguration für alle Proxys über das Gitter und aks-istio-system andere Workloads innerhalb desselben Namespace wie diese spezifische Anwendung ein.

apiVersion: networking.istio.io/v1alpha3
kind: Sidecar
metadata:
  name: sidecar-restrict-egress
  namespace: aks-istio-system  # Needs to be deployed in the root namespace.
spec:
  egress:
  - hosts:
    - "./*"
    - "aks-istio-system/*"

Sie können auch versuchen, die Option Istio discoverySelectors in MeshConfig zu verwenden. Die discoverySelectors Option enthält ein Array von Kubernetes-Selektoren und kann das Bewusstsein von Istiod auf bestimmte Namespaces beschränken (im Gegensatz zu allen Namespaces im Cluster). Weitere Informationen finden Sie unter Verwenden von Ermittlungsauswahlen zum Konfigurieren von Namespaces für Ihr Istio-Dienstgitter.

Schritt 2: Beheben von Datenverkehrs- und Sicherheitsfehlern

Um häufige Probleme mit der Verkehrsverwaltung und sicherheitsrelevanten Konfigurationen zu beheben, die häufig von Istio-Benutzern auftreten, finden Sie Informationen zu Problemen bei der Verkehrsverwaltung und zu Sicherheitsproblemen auf der Istio-Website.

Links zu anderen Themen wie Sidecar Injection, Observability und Upgrades finden Sie unter Häufig auftretende Probleme auf der Istio-Dokumentationswebsite.

Schritt 3: Vermeiden von CoreDNS-Überladungen

Probleme, die sich auf coreDNS-Überladung beziehen, erfordern möglicherweise, dass Sie bestimmte Istio-DNS-Einstellungen ändern, z. B. das dnsRefreshRate Feld in der Istio MeshConfig-Definition.

Schritt 4: Fixieren von Poden- und Sidecar-Rennbedingungen

Wenn Ihre Anwendungs-Pod vor dem Start des Envoy-Sidecars gestartet wird, reagiert die Anwendung möglicherweise nicht mehr, oder sie wird neu gestartet. Anweisungen zum Vermeiden dieses Problems finden Sie unter Pod oder Container, die mit Netzwerkproblemen beginnen, wenn istio-proxy nicht bereit ist. Insbesondere kann das Festlegen des holdApplicationUntilProxyStarts MeshConfig-Felds defaultConfig dazu beitragen, diese Rennbedingungen zu true verhindern.

Schritt 5: Konfigurieren eines Diensteintrags bei Verwendung eines HTTP-Proxys für ausgehenden Datenverkehr

Wenn Ihr Cluster einen HTTP-Proxy für den ausgehenden Internetzugriff verwendet, müssen Sie einen Diensteintrag konfigurieren. Weitere Informationen finden Sie unter HTTP-Proxyunterstützung in Azure Kubernetes Service.

Fehlermeldungen

Die folgende Tabelle enthält eine Liste möglicher Fehlermeldungen (für die Bereitstellung des Add-Ons, das Aktivieren von Eingangsgateways und das Ausführen von Upgrades), den Grund, warum ein Fehler aufgetreten ist, und Empfehlungen zum Beheben des Fehlers.

Fehler Ursache Empfehlungen
Azure service mesh is not supported in this region Das Feature ist während der Vorschau nicht in der Region verfügbar (es ist in der öffentlichen Cloud, aber nicht in der souveränen Cloud verfügbar). Informationen zur Funktion in unterstützten Regionen finden Sie in der öffentlichen Dokumentation.
Missing service mesh mode: {} Sie haben die Moduseigenschaft im Dienstgitterprofil der verwalteten Clusteranforderung nicht festgelegt. Legen Sie im Feld ServiceMeshProfile der managedCluster API-Anforderung die mode Eigenschaft auf Istio.
Invalid istio ingress mode: {} Sie legen einen ungültigen Wert für den Eingangsmodus fest, wenn Sie den Eingangsmodus innerhalb des Dienstgitterprofils hinzufügen. Legen Sie den Eingangsmodus in der API-Anforderung auf eine External oder Internalmehrere .
Too many ingresses for type: {}. Only {} ingress gateway are allowed Sie haben versucht, zu viele Eingänge auf dem Cluster zu erstellen. Erstellen Sie höchstens einen externen Eingangs- und einen internen Eingangsschritt für den Cluster.
Istio profile is missing even though Service Mesh mode is Istio Sie haben das Istio-Add-On aktiviert, ohne das Istio-Profil bereitzustellen. Wenn Sie das Istio-Add-On aktivieren, geben Sie komponentenspezifische Informationen (Eingangsgateway, Plug-In-Zertifizierungsstelle) für das Istio-Profil und die jeweilige Revision an.
Istio based Azure service mesh is incompatible with feature %s Sie haben versucht, eine andere Erweiterung, ein Add-On oder ein Feature zu verwenden, das derzeit nicht mit dem Istio-Add-On kompatibel ist (z. B. Open Service Mesh). Bevor Sie das Istio-Add-On aktivieren, deaktivieren Sie zuerst das andere Feature, und bereinigen Sie alle entsprechenden Ressourcen.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Sie haben nicht alle erforderlichen Parameter für die Plug-In-Zertifizierungsstelle bereitgestellt. Stellen Sie alle erforderlichen Parameter für das Feature der Plug-In-Zertifizierungsstelle (CA) bereit (weitere Informationen finden Sie unter Einrichten des Istio-basierten Dienstgitter-Add-Ons mit Plug-In-Zertifizierungsstellenzertifikaten).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Sie haben das CSI-Treiber-Add-On "AKS Secrets-Store"-Treiber nicht aktiviert, bevor Sie die Plug-In-Zertifizierungsstelle verwendet haben. Richten Sie Azure Key Vault ein, bevor Sie das Plug-In-Zertifizierungsstellenfeature verwenden.
'KeyVaultId': '%s' is not a valid Azure keyvault resource identifier. Please make sure that the format matches '/subscriptions//resourceGroups//providers/Microsoft.KeyVault/vaults/' Sie haben eine ungültige AKS-Ressourcen-ID verwendet. Sehen Sie sich das Format an, das in der Fehlermeldung erwähnt wird, um eine gültige Azure Key Vault-ID für das Plug-In-Zertifizierungsstellenfeature festzulegen.
Kubernetes version is missing in orchestrator profile Ihre Anforderung fehlt die Kubernetes-Version. Daher kann eine Versionskompatibilitätsprüfung nicht möglich sein. Stellen Sie sicher, dass Sie die Kubernetes-Version in Istio-Add-On-Upgradevorgängen bereitstellen.
Service mesh revision %s is not compatible with cluster version %s. To find information about mesh-cluster compatibility, use 'az aks mesh get-upgrades' Sie haben versucht, eine Istio-Add-On-Revision zu aktivieren, die mit der aktuellen Kubernetes-Clusterversion nicht kompatibel ist. Verwenden Sie den Befehl "az aks mesh get-upgrades ", um zu erfahren, welche Istio-Add-On-Überarbeitungen für den aktuellen Cluster verfügbar sind.
Kubernetes version %s not supported. Please upgrade to a supported cluster version first. To find compatibility information, use 'az aks mesh get-upgrades' Sie verwenden eine nicht unterstützte Kubernetes-Version. Upgrade auf eine unterstützte Kubernetes-Version.
ServiceMeshProfile revision field must not be empty Sie haben versucht, das Istio-Add-On zu aktualisieren, ohne eine Überarbeitung anzugeben. Geben Sie die Revision und alle anderen Parameter an (weitere Informationen finden Sie unter "Kleinere Überarbeitungsupgrade").
Request exceeds maximum allowed number of revisions (%d) Sie haben versucht, einen Upgradevorgang auszuführen, obwohl bereits (%d) Überarbeitungen installiert sind. Schließen Sie den Upgradevorgang ab, oder führen Sie einen Rollback durch, bevor Sie ein Upgrade auf eine andere Revision durchführen.
Mesh upgrade is in progress. Please complete or roll back the current upgrade before attempting to retrieve versioning and compatibility information Sie haben versucht, auf Überarbeitungs- und Kompatibilitätsinformationen zuzugreifen, bevor Sie den aktuellen Upgradevorgang abschließen oder zurücksetzen. Schließen Sie den aktuellen Upgradevorgang ab, oder führen Sie einen Rollback durch, bevor Sie Überarbeitungs- und Kompatibilitätsinformationen abrufen.

References

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.