Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Fehlerbehebung bei der Einrichtung von App Mesh
In diesem Thema werden häufige Probleme beschrieben, die bei der Einrichtung von App Mesh auftreten können.
Envoy-Container-Image kann nicht abgerufen werden
Symptome
Sie erhalten die folgende Fehlermeldung in einer Amazon-ECS-Aufgabe. Die Amazon-ECR-Konto-ID
und -Region
in der folgenden Nachricht können unterschiedlich sein, je nachdem, aus welchem Amazon-ECR-Repository Sie das Container-Image abgerufen haben.
CannotPullContainerError: Error response from daemon: pull access denied for 840364872350
.dkr.ecr.us-west-2
.amazonaws.com/aws-appmesh-envoy, repository does not exist or may require 'docker login'
Auflösung
Dieser Fehler weist darauf hin, dass die verwendete Aufgabenausführungsrolle nicht über die Berechtigung zur Kommunikation mit Amazon ECR verfügt und das Envoy-Container-Image nicht aus dem Repository abrufen kann. Die Ihrer Amazon-ECS-Aufgabe zugewiesene Aufgabenausführungsrolle benötigt eine IAM-Richtlinie mit den folgenden Anweisungen:
{ "Action": [ "ecr:BatchCheckLayerAvailability", "ecr:GetDownloadUrlForLayer", "ecr:BatchGetImage" ], "Resource": "arn:aws:ecr:
us-west-2
:111122223333
:repository/aws-appmesh-envoy", "Effect": "Allow" }, { "Action": "ecr:GetAuthorizationToken", "Resource": "*", "Effect": "Allow" }
Wenn Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem
Es kann keine Verbindung zum App Mesh Envoy Management Service hergestellt werden
Symptome
Ihr Envoy-Proxy kann keine Verbindung zum App Mesh Envoy-Verwaltungsservice herstellen. Sie sehen:
-
Verbindung zurückgewiesene Fehler
-
Verbindungs-Timeouts
-
Fehler beim Beheben des Verwaltungsservice-Endpunkts von App Mesh Envoy
-
gRPC-Fehler
Auflösung
Stellen Sie sicher, dass Ihr Envoy-Proxy Zugriff auf das Internet oder einen privaten VPC-Endpunkt hat und dass Ihre Sicherheitsgruppen ausgehenden Datenverkehr auf Port 443 zulassen. Die öffentlichen Endpunkte des Envoy Management Service von App Mesh folgen dem FQDN-Format (Fully Qualified Domain Name).
# App Mesh Production Endpoint appmesh-envoy-management.
Region-code
.amazonaws.com # App Mesh Preview Endpoint appmesh-preview-envoy-management.Region-code
.amazonaws.com
Mit dem folgenden Befehl können Sie Ihre Verbindung zu debuggen. Dadurch wird eine gültige, aber leere gRPC-Anforderung an den Envoy Management Service gesendet.
curl -v -k -H 'Content-Type: application/grpc' -X POST https://appmesh-envoy-management.
Region-code
.amazonaws.com:443/envoy.service.discovery.v3.AggregatedDiscoveryService/StreamAggregatedResources
Wenn Sie diese Nachrichten zurückerhalten, funktioniert Ihre Verbindung zum Envoy Management Service. Informationen zum Debuggen von gRPC-bezogenen Fehlern finden Sie unter Fehler in Envoy vom App Mesh Envoy Management Service getrennt mit Fehlertext.
grpc-status: 16 grpc-message: Missing Authentication Token
Wenn Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem
Envoy wurde mit Fehlertext vom App Mesh Envoy Management Service getrennt
Symptome
Ihr Envoy-Proxy kann keine Verbindung zum App Mesh Envoy-Verwaltungsservice herstellen und seine Konfiguration empfangen. Ihre Envoy-Proxy-Protokolle enthalten einen Protokolleintrag wie den folgenden.
gRPC config stream closed: gRPC status code
, message
Auflösung
In den meisten Fällen sollte der Nachrichtenteil des Protokolls auf das Problem hinweisen. In der folgenden Tabelle sind die gängigsten gRPC-Statuscodes aufgeführt, die Sie möglicherweise sehen, ihre Ursachen und ihre Lösungen.
gRPC-Statuscode | Ursache | Auflösung |
---|---|---|
0 |
Korrekte Trennung vom Envoy-Verwaltungsservice. | Es gibt kein Problem. App Mesh trennt gelegentlich Envoy-Proxys mit diesem Statuscode. Envoy stellt erneut eine Verbindung her und erhält weiterhin Updates. |
3 |
Der Mesh-Endpunkt (virtueller Knoten oder virtuelles Gateway) oder eine der zugehörigen Ressourcen konnte nicht gefunden werden. | Überprüfen Sie Ihre Envoy-Konfiguration erneut, um sicherzustellen, dass sie den entsprechenden Namen der App Mesh-Ressource hat, für die sie steht. Wenn Ihre App-Mesh-Ressource in andere AWS Ressourcen wie AWS Cloud Map Namespaces oder ACM-Zertifikate integriert ist, stellen Sie sicher, dass diese Ressourcen vorhanden sind. |
7 |
Der Envoy-Proxy ist nicht autorisiert, eine Aktion auszuführen, z. B. eine Verbindung zum Envoy-Verwaltungsservice herzustellen oder zugehörige Ressourcen abzurufen. | Stellen Sie sicher, dass Sie eine IAM-Richtlinie mit den entsprechenden Richtlinienanweisungen für App Mesh und andere -Services erstellen und diese Richtlinie an den IAM-Benutzer oder die IAM-Rolle anfügen, die Ihr Envoy-Proxy verwendet, um eine Verbindung zum Envoy-Verwaltungsservice herzustellen. |
8 |
Die Anzahl der Envoy-Proxys für eine bestimmte App-Mesh-Ressource überschreitet das Servicekontingent auf Kontoebene. | App Mesh service quotas Informationen zu Standard-Kontokontingenten und zum Anfordern einer Kontingenterhöhung finden Sie unter . |
16 |
Der Envoy-Proxy hat keine gültigen Authentifizierungsanmeldeinformationen für AWS. | Stellen Sie sicher, dass Envoy über die entsprechenden Anmeldeinformationen verfügt, um über einen IAM-Benutzer oder eine IAM-Rolle eine Verbindung zu -AWSServices herzustellen. Ein bekanntes Problem, #24136v1.24 und früher kann die Anmeldeinformationen nicht abrufen, wenn der Envoy-Prozess über 1024 Dateideskriptoren verwendet. Dies geschieht, wenn Envoy ein hohes Datenverkehrsvolumen bedient. Sie können dieses Problem bestätigen, indem Sie Envoy-Protokolle auf Debug-Ebene auf den Text „“ überprüfenA libcurl function was given a bad argument . Um dieses Problem zu beheben, aktualisieren Sie auf Envoy Version v1.25.1.0-prod oder höher. |
Sie können die Statuscodes und Nachrichten von Ihrem Envoy-Proxy mit Amazon CloudWatch Insights mithilfe der folgenden Abfrage beobachten:
filter @message like /gRPC config stream closed/ | parse @message "gRPC config stream closed: *, *" as StatusCode, Message
Wenn die angegebene Fehlermeldung nicht hilfreich war oder Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem
Fehler bei der Zustandsprüfung des Envoy-Containers, der Bereitschafts-Sonde oder der Liveliness-Sonde
Symptome
Ihr Envoy-Proxy schlägt Zustandsprüfungen in einer Amazon-ECS-Aufgabe, einer Amazon EC2-Instance oder einem Kubernetes-Pod fehl. Sie fragen beispielsweise die Envoy-Verwaltungsschnittstelle mit dem folgenden Befehl ab und erhalten einen anderen Status als LIVE
.
curl -s http://my-app.default.svc.cluster.local
:9901
/server_info | jq '.state'
Auflösung
Im Folgenden finden Sie eine Liste der Korrekturmaßnahmen, abhängig vom Status, der vom Envoy-Proxy zurückgegeben wird.
-
PRE_INITIALIZING
oderINITIALIZING
– Der Envoy-Proxy muss noch eine Konfiguration empfangen oder kann keine Verbindung zum App Mesh Envoy Management Service herstellen und abrufen. Der Envoy erhält möglicherweise einen Fehler vom Envoy-Verwaltungsservice, wenn er versucht, eine Verbindung herzustellen. Weitere Informationen finden Sie unter Fehler in Envoy wurde mit Fehlertext vom App Mesh Envoy Management Service getrennt. -
DRAINING
– Der Envoy-Proxy hat damit begonnen, Verbindungen als Reaktion auf eine -/healthcheck/fail
oder -/drain_listeners
Anforderung auf der Envoy-Verwaltungsschnittstelle zu leeren. Wir empfehlen nicht, diese Pfade auf der Verwaltungsschnittstelle aufzurufen, es sei denn, Sie beenden Ihre Amazon-ECS-Aufgabe, Ihre Amazon EC2-Instance oder Ihren Kubernetes-Pod.
Wenn Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem
Zustandsprüfung vom Load Balancer zum Mesh-Endpunkt schlägt fehl
Symptome
Ihr Mesh-Endpunkt wird durch die Container-Zustandsprüfung oder Bereitschafts-Sonde als fehlerfrei angesehen, aber die Zustandsprüfung vom Load Balancer zum Mesh-Endpunkt schlägt fehl.
Auflösung
Führen Sie die folgenden Schritte aus, um das Problem zu beheben.
-
Stellen Sie sicher, dass die Sicherheitsgruppe, die Ihrem Mesh-Endpunkt zugeordnet ist, eingehenden Datenverkehr auf dem Port akzeptiert, den Sie für Ihre Zustandsprüfung konfiguriert haben.
-
Stellen Sie sicher, dass die Zustandsprüfung bei manueller Anforderung konsistent erfolgreich ist, z. B. von einem Bastion-Host innerhalb Ihrer VPC.
-
Wenn Sie eine Zustandsprüfung für einen virtuellen Knoten konfigurieren, empfehlen wir, einen Endpunkt für die Zustandsprüfung in Ihrer Anwendung zu implementieren, z. B. /ping für HTTP. Dadurch wird sichergestellt, dass sowohl der Envoy-Proxy als auch Ihre Anwendung vom Load Balancer aus weitergeleitet werden können.
-
Sie können je nach den benötigten Funktionen jeden Elastic Load Balancer-Typ für den virtuellen Knoten verwenden. Weitere Informationen finden Sie unter Elastic Load Balancing-Funktionen.
-
Wenn Sie eine Zustandsprüfung für ein virtuelles Gateway konfigurieren, empfehlen wir, einen Network Load Balancer mit einer TCP- oder TLS-Zustandsprüfung am Listener-Port des virtuellen Gateways zu verwenden. Dadurch wird sichergestellt, dass der virtuelle Gateway-Listener gestartet wird und Verbindungen akzeptieren kann.
Wenn Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem
Das virtuelle Gateway akzeptiert keinen Datenverkehr über Ports 1024 oder weniger
Symptome
Ihr virtuelles Gateway akzeptiert keinen Datenverkehr auf Port 1024 oder weniger, akzeptiert jedoch Datenverkehr auf einer Portnummer, die größer als 1024 ist. Sie fragen beispielsweise die Envoy-Statistiken mit dem folgenden Befehl ab und erhalten einen anderen Wert als Null.
curl -s http://my-app.default.svc.cluster.local:9901/stats | grep "update_rejected"
Möglicherweise wird in Ihren Protokollen Text ähnlich dem folgenden Text angezeigt, in dem ein Fehler beim Binden an einen privilegierten Port beschrieben wird:
gRPC config for type.googleapis.com/envoy.api.v2.Listener rejected: Error adding/updating listener(s) lds_ingress_0.0.0.0_port_<port num>: cannot bind '0.0.0.0:<port num>': Permission denied
Auflösung
Um das Problem zu beheben, muss der für das Gateway angegebene Benutzer über die Linux-Funktion verfügenCAP_NET_BIND_SERVICE
. Weitere Informationen finden Sie unter Funktionen
Wichtig
Fargate muss einen Portwert größer als 1024 verwenden.
Wenn Ihr Problem immer noch nicht behoben ist, sollten Sie ein GitHub Problem