Freigeben über


Allgemeine Problembehandlung für das Istio-Dienstnetz-Add-On

In diesem Artikel werden allgemeine Strategien (mit kubectl, istioctlund anderen Tools) zur Behandlung von Problemen im Zusammenhang mit dem Istio Service Mesh-Add-On für Microsoft Azure Kubernetes Service (AKS) erläutert. Dieser Artikel enthält auch eine Liste möglicher Fehlermeldungen, Gründe für Fehlerereignisse und Empfehlungen zur Behebung dieser Fehler.

Voraussetzungen

Prüfliste zur Problembehandlung: Verwenden von kubectl

In den folgenden Schritten zur Problembehandlung werden verschiedene kubectl Befehle verwendet, mit denen Sie hängen gebliebene Pods oder Fehler im Istio-Daemon (Istiod) debuggen können.

Schritt 1: Abrufen von Istiod-Podprotokollen

Rufen Sie die Istiod-Podprotokolle ab, indem Sie den folgenden Befehl kubectl logs 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 Es sich bei Istiod um eine Bereitstellung handelt, ist es sicher, den Pod einfach zu löschen, indem Sie den Befehl kubectl delete ausführen:

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.

Hinweis

Alternativ können Sie die Bereitstellung direkt neu starten, indem Sie den folgenden Befehl kubectl rollout restart ausführen :

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

Schritt 3: Überprüfen der status von Ressourcen

Wenn Istiod nicht geplant ist oder der Pod nicht reagiert, sollten Sie die status der Bereitstellung und die Replikatgruppen überprüfen. Führen Sie hierzu den Befehl kubectl get aus:

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

Die aktuelle Ressourcen-status wird am Ende der Ausgabe angezeigt. In der Ausgabe werden möglicherweise auch Ereignisse angezeigt, die der Controllerschleife zugeordnet sind.

Schritt 4: Abrufen benutzerdefinierter Ressourcendefinitionstypen

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

kubectl get crd | grep istio

Führen Sie als Nächstes den folgenden kubectl get Befehl aus, um alle Ressourcennamen aufzulisten, 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 Sidecarprotokolle 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 Quellpod und das zweite Mal für den Zielpod):

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

Checkliste zur Problembehandlung: Verwenden von istioctl

In den folgenden Schritten zur Problembehandlung wird beschrieben, wie Sie Informationen sammeln und Ihre Gitterumgebung debuggen, indem Sie verschiedene istioctl Befehle ausführen.

Warnung

Einige istioctl Befehle senden Anforderungen an alle Sidecars.

Hinweis

Bevor Sie beginnen, beachten Sie, dass Sie bei den meisten istioctl Befehlen die Revision der Steuerungsebene kennen müssen. Sie können diese Informationen entweder aus dem Suffix der Istiod-Bereitstellungen oder der Pods abrufen, oder Sie können den folgenden Befehl istioctl tag list ausführen:

istioctl tag list

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

Führen Sie den folgenden Befehl istioctl verify-install aus, um zu überprüfen, ob Sie über eine korrekte Istioctl-Add-On-Installation verfügen:

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

Schritt 2: Analysieren von Namespaces

Führen Sie den folgenden istioctl analyze-Befehl aus, um alle Namespaces oder einen bestimmten Namespace zu analysieren:

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

Schritt 3: Abrufen des Proxy-status

Führen Sie den folgenden Befehl istioctl proxy-status aus, um die Proxy-status 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

Hinweis

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

Schritt 5: Überprüfen der Einschleusung status

Führen Sie den folgenden befehl istioctl experimental check-inject aus, um die einschleusung status 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 in einem großen Cluster zeitaufwändig sein, da er alle Pods umfasst. Sie können den Fehlerbericht auf bestimmte Namespaces beschränken. Sie können den Bericht auch auf bestimmte Bereitstellungen, Pods oder Bezeichnungsselektoren beschränken.

Führen Sie den folgenden Befehl istioctl bug-report aus, um einen Fehlerbericht abzurufen:

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

Checkliste zur Problembehandlung: Verschiedene Probleme

Schritt 1: Beheben von Ressourcennutzungsproblemen

Wenn in Envoy eine hohe Arbeitsspeicherauslastung auftritt, überprüfen Sie ihre Envoy-Einstellungen für die Sammlung von Statistikdaten. Wenn Sie Istio-Metriken über MeshConfig anpassen, denken Sie daran, dass bestimmte Metriken eine hohe Kardinalität aufweisen und daher einen höheren Speicherbedarf erzeugen können. 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 jeder Envoy-Konfiguration Informationen zu allen Diensten im Cluster hinzu. Der Sidecar kann den Umfang dieser Ergänzung nur auf Workloads innerhalb bestimmter Namespaces beschränken. Weitere Informationen finden Sie unter Achten Sie auf diese Istio-Proxy-Sidecar-Speicherlücke.

Die folgende Sidecar Definition im aks-istio-system Namespace schränkt z. B. die Envoy-Konfiguration für alle Proxys im Gitter auf aks-istio-system und andere Workloads innerhalb desselben Namespace wie die jeweilige 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 Istio discoverySelectors-Option in MeshConfig zu verwenden. Die discoverySelectors Option enthält ein Array von Kubernetes-Selektoren und kann die Bekanntheit von Istiod auf bestimmte Namespaces (im Gegensatz zu allen Namespaces im Cluster) beschränken. Weitere Informationen finden Sie unter Verwenden von Ermittlungsselektoren zum Konfigurieren von Namespaces für Ihr Istio-Dienstnetz.

Schritt 2: Beheben von Problemen mit falscher Konfiguration von Datenverkehr und Sicherheit

Informationen zu häufig auftretenden Problemen bei der Datenverkehrsverwaltung und sicherheitsrelevanten Fehlkonfiguration, die bei Istio-Benutzern häufig auftreten, finden Sie unter Probleme mit der Datenverkehrsverwaltung und Sicherheitsprobleme auf der Istio-Website.

Links zu Anderen Problemen wie Einspritzen von Seitenwagen, Einblick und Upgrades finden Sie auf der Istio-Dokumentationswebsite unter Allgemeine Probleme .

Schritt 3: Vermeiden einer CoreDNS-Überladung

Probleme im Zusammenhang mit der CoreDNS-Überladung erfordern möglicherweise, dass Sie bestimmte Dns-Einstellungen von Istio ändern müssen, z. B. das dnsRefreshRate Feld in der Istio MeshConfig-Definition.

Schritt 4: Beheben von Pod- und Sidecar-Racebedingungen

Wenn Ihr Anwendungspod gestartet wird, bevor der Envoy-Sidecar gestartet wird, reagiert die Anwendung möglicherweise nicht mehr oder sie wird neu gestartet. Anweisungen zum Vermeiden dieses Problems finden Sie unter Pods oder Container beginnen mit Netzwerkproblemen, wenn istio-proxy nicht bereit ist. Insbesondere das Festlegen des holdApplicationUntilProxyStarts MeshConfig-Felds unter defaultConfig auf true kann dazu beitragen, diese Racebedingungen zu verhindern.

Fehlermeldungen

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

Error Grund Empfehlungen
Azure service mesh is not supported in this region Das Feature ist in der Region während der Vorschau nicht verfügbar (es ist in der öffentlichen Cloud, aber nicht in der Sovereign Cloud verfügbar). Weitere Informationen finden Sie in der öffentlichen Dokumentation zu den unterstützten Regionen.
Missing service mesh mode: {} Sie haben die Moduseigenschaft nicht im Service Mesh-Profil der verwalteten Clusteranforderung festgelegt. Legen Sie im Feld ServiceMeshProfile der managedCluster API-Anforderung die mode -Eigenschaft auf fest Istio.
Invalid istio ingress mode: {} Sie legen einen ungültigen Wert für den Eingangsmodus fest, wenn Sie den Eingang innerhalb des Dienstgitterprofils hinzufügen. Legen Sie den Eingangsmodus in der API-Anforderung auf oder ExternalInternalfest.
Too many ingresses for type: {}. Only {} ingress gateway are allowed Sie haben versucht, zu viele Eingangsdaten im Cluster zu erstellen. Create höchstens einen externen und einen internen Eingang im 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 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 sauber alle entsprechenden Ressourcen aus.
ServiceMeshProfile is missing required parameters: %s for plugin certificate authority Sie haben nicht alle erforderlichen Parameter für die Plug-In-Zertifizierungsstelle bereitgestellt. Geben Sie alle erforderlichen Parameter für die Plug-In-Zertifizierungsstelle (ZS) an (weitere Informationen finden Sie unter Einrichten eines Istio-basierten Service Mesh-Add-Ons mit Plug-In-Zertifizierungsstellenzertifikaten).
AzureKeyvaultSecretsProvider addon is required for Azure Service Mesh plugin certificate authority feature Sie haben das Add-On AKS Secrets-Store CSI-Treiber nicht aktiviert, bevor Sie die Plug-In-Zertifizierungsstelle verwendet haben. Richten Sie Azure Key Vault ein, bevor Sie das Feature der Plug-In-Zertifizierungsstelle 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. Informationen zum Festlegen einer gültigen Azure Key Vault-ID für das Plug-In-ZS-Feature finden Sie im in der Fehlermeldung erwähnten Format.
Kubernetes version is missing in orchestrator profile In Ihrer Anforderung fehlt die Kubernetes-Version. Daher kann keine Versionskompatibilitätsprüfung ausgeführt werden. Stellen Sie sicher, dass Sie die Kubernetes-Version in Istio-Add-On-Upgradevorgängen angeben.
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 Azure CLI-Befehl az aks mesh get-upgrades , um zu erfahren, welche Istio-Add-On-Revisionen 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. Führen Sie ein Upgrade auf eine unterstützte Kubernetes-Version durch.
ServiceMeshProfile revision field must not be empty Sie haben versucht, das Istio-Add-On ohne Angabe einer Revision zu aktualisieren. Geben Sie die Revision und alle anderen Parameter an (weitere Informationen finden Sie unter Kleineres Revisionsupgrade).
Request exceeds maximum allowed number of revisions (%d) Sie haben versucht, einen Upgradevorgang durchzuführen, obwohl bereits (%d) Revisionen installiert sind. Schließen Sie den Upgradevorgang ab, oder führen Sie einen Rollback aus, 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 Revisions- und Kompatibilitätsinformationen zuzugreifen, bevor Sie den aktuellen Upgradevorgang abschließen oder zurücksetzen. Führen Sie den aktuellen Upgradevorgang aus, oder führen Sie ein Rollback aus , bevor Sie Revisions- 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.