Allgemeine Problembehandlung des Istio-Dienst-Gitter-Add-Ons
In diesem Artikel werden allgemeine Strategien (die microsoft kubectl
istioctl
Azure 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
Das Kubernetes-Kubectl-Tool oder ein ähnliches Tool zum Herstellen einer Verbindung mit dem Cluster
Hinweis: Führen Sie zum Installieren von Kubectl mithilfe der Azure CLI den Befehl "az aks install-cli " aus.
Das Befehlszeilentool Istio istioctl
Das Client-URL-Tool (cURL)
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. Es wird automatisch neu erstellt und erneut bereitgestellt, nachdem Sie es 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 den folgenden kubectl get
Befehl aus, um alle Ressourcennamen auflisten zu können, die auf einer bestimmten CRD basieren:
kubectl get <crd-type> --all-namespaces
Schritt 5: Anzeigen der Liste der Istiod-Pods
Führen Sie den folgenden kubectl get
Befehl aus, um die Liste der Istiod-Pods anzuzeigen:
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.
Alle istioctl
Befehle müssen zusammen mit dem --istioNamespace aks-istio-system
Flag ausgeführt werden, das auf die AKS-Add-On-Installation von Istio verweist.
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. Das Ausführen dieses Berichts kann jedoch 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 auf Workloads beschränken, die sich nur in bestimmten Namespaces befinden. 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 im Gitter aks-istio-system
und 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 | `Reason` | 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 Internal mehrere . |
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
Allgemeine Tipps zum Debuggen von Istio finden Sie unter Istio-Diagnosetools
Problembehandlung beim Istio-Dienst-Gitter-Add-On MeshConfig
Problembehandlung beim Istio-Dienst-Gitter-Add-On-Eingangsgateway
Problembehandlung beim Problembehandlung beim Istio-Dienstgitter-Gitter-Add-On
Problembehandlung beim Istio-Dienstgitter-Add-In-Plug-In-Zertifizierungsstellenzertifikat
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.