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.
Erste Schritte mit AWS App Mesh und Amazon EC2
Wichtig
Hinweis zum Ende des Supports: Am 30. September 2026 AWS wird der Support für eingestellt. AWS App Mesh Nach dem 30. September 2026 können Sie nicht mehr auf die AWS App Mesh Konsole oder die Ressourcen zugreifen. AWS App Mesh Weitere Informationen finden Sie in diesem Blogbeitrag Migration von AWS App Mesh zu Amazon ECS Service Connect
Dieses Thema hilft Ihnen bei der Verwendung AWS App Mesh mit einem aktuellen Service, der auf Amazon läuftEC2. Dieses Tutorial behandelt die grundlegenden Funktionen verschiedener App Mesh Mesh-Ressourcentypen.
Szenario
Gehen Sie zur Veranschaulichung der Verwendung von App Mesh davon aus, dass Sie über eine Anwendung mit den folgenden Eigenschaften verfügen:
-
Besteht aus zwei Diensten mit dem Namen
serviceA
undserviceB
. -
Beide Services sind in einem Namespace namens
apps.local
registriert. -
ServiceA
kommuniziert mitserviceB
über HTTP /2, Port 80. -
Sie haben bereits Version 2 von
serviceB
bereitgestellt und mit dem NamenserviceBv2
imapps.local
-Namespace registriert.
Es gelten die folgenden Anforderungen:
-
Sie möchten 75 Prozent des Datenverkehrs von
serviceA
bisserviceB
und 25 Prozent des Datenverkehrs anserviceBv2
First weiterleiten. Wenn Sie nur 25 Prozent des Datenverkehrs an sendenserviceBv2
, können Sie überprüfen, ob es fehlerfrei ist, bevor Sie 100 Prozent des Datenverkehrs von sendenserviceA
. -
Sie möchten in der Lage sein, die Datenverkehrsgewichtung so anzupassen, dass 100 Prozent des Datenverkehrs an
serviceBv2
gehen, sobald sich die Zuverlässigkeit davon erwiesen hat. Sobald der gesamte Datenverkehr an gesendet wurdeserviceBv2
, möchten Sie den Vorgang beendenserviceB
. -
Sie möchten für Ihre eigentlichen Dienste keinen bestehenden Anwendungscode oder eine Registrierung zur Serviceerkennung ändern müssen, um die vorherigen Anforderungen zu erfüllen.
Um Ihren Anforderungen gerecht zu werden, entscheiden Sie sich dafür, ein App Mesh Service Mesh mit virtuellen Diensten, virtuellen Knoten, einem virtuellen Router und einer Route zu erstellen. Nach der Implementierung Ihres Meshs aktualisieren Sie Ihre Dienste so, dass sie den Envoy-Proxy verwenden. Nach der Aktualisierung kommunizieren Ihre Services miteinander über den Envoy-Proxy und nicht direkt miteinander.
Voraussetzungen
App Mesh unterstützt Linux-Dienste DNS AWS Cloud Map, die bei oder beiden registriert sind. Um dieses Handbuch für die ersten Schritte verwenden zu können, empfehlen wir, dass Sie über drei bestehende Dienste verfügen, bei denen Sie registriert sindDNS. Sie können ein Service-Mesh und seine Ressourcen erstellen, auch wenn die Services nicht vorhanden sind. Sie können das Mesh jedoch erst verwenden, wenn Sie tatsächliche Services bereitgestellt haben.
Wenn Sie noch keine Dienste ausführen, können Sie EC2 Amazon-Instances starten und Anwendungen für sie bereitstellen. Weitere Informationen finden Sie unter Tutorial: Erste Schritte mit Amazon EC2 Linux-Instances im EC2 Amazon-Benutzerhandbuch. Die verbleibenden Schritte gehen davon aus, dass die tatsächlichen Services als serviceA
, serviceB
und serviceBv2
benannt sind, und dass alle Services über einen Namespace mit dem Namen apps.local
gefunden werden können.
Schritt 1: Erstellen von einem Mesh und einem virtuellen Service
Ein Service Mesh ist eine logische Begrenzung für den Netzwerkdatenverkehr zwischen den darin vorhandenen Services. Weitere Informationen finden Sie unter Servicenetze. Ein virtueller Service ist eine Abstraktion eines tatsächlichen Services. Weitere Informationen finden Sie unter Virtuelle Dienste.
Erstellen Sie die folgenden Ressourcen:
-
Ein Mesh mit dem Namen
apps
, da alle Services im Szenario imapps.local
-Namespace registriert sind. -
Einen virtuellen Service mit dem Namen
serviceb.apps.local
, da der virtuelle Service einen Service darstellt, der mit diesem Namen gefunden werden kann, und Sie Ihren Code nicht ändern möchten, um auf einen anderen Namen zu verweisen. Ein virtueller Service mit dem Namenservicea.apps.local
wird in einem späteren Schritt hinzugefügt.
Sie können die AWS Management Console oder die AWS CLI Version 1.18.116 oder höher oder 2.0.38 oder höher verwenden, um die folgenden Schritte auszuführen. Wenn Sie die verwenden AWS CLI, verwenden Sie den aws --version
Befehl, um Ihre installierte Version zu überprüfen. AWS CLI Wenn Sie Version 1.18.116 oder höher oder 2.0.38 oder höher nicht installiert haben, müssen Sie die installieren oder aktualisieren. AWS CLI Wählen Sie die Registerkarte für das Werkzeug aus, das Sie verwenden möchten.
Schritt 2: Erstellen von einem virtuellen Knoten
Ein virtueller Knoten fungiert als ein logischer Verweis auf einen tatsächlichen Service. Weitere Informationen finden Sie unter Virtuelle Knoten.
Erstellen Sie einen virtuellen Knoten mit dem Namen serviceB
, da einer der virtuellen Knoten den tatsächlichen Service mit dem Namen serviceB
darstellt. Der tatsächliche Service, den der virtuelle Knoten darstellt, kann über DNS
mit dem Hostnamen von serviceb.apps.local
gefunden werden. Alternativ können Sie tatsächliche Services mit AWS Cloud Map finden. Der virtuelle Knoten überwacht den Datenverkehr mithilfe des HTTP /2-Protokolls an Port 80. Auch andere Protokolle werden unterstützt, ebenso wie Zustandsprüfungen. Sie erstellen virtuelle Knoten für serviceA
und serviceBv2
in einem späteren Schritt.
Schritt 3: Erstellen von einem virtuellen Router und einer Route
Virtuelle Router routen den Datenverkehr für einen oder mehrere virtuelle Services innerhalb Ihres Meshes. Weitere Informationen erhalten Sie unter Virtuelle Router und Routen.
Erstellen Sie die folgenden Ressourcen:
-
Einen virtuellen Router mit dem Namen
serviceB
, da der virtuelleserviceB.apps.local
-Service keine ausgehende Kommunikation mit einem anderen Service initiiert. Denken Sie daran, dass der virtuelle Service, den Sie zuvor erstellt haben, eine Abstraktion Ihres tatsächlichenserviceb.apps.local
-Services ist. Der virtuelle Service sendet Datenverkehr an den virtuellen Router. Der virtuelle Router überwacht den Datenverkehr mithilfe des HTTP /2-Protokolls an Port 80. Andere Protokolle werden ebenfalls unterstützt. -
Eine Route namens
serviceB
. Er leitet 100 Prozent seines Datenverkehrs an denserviceB
virtuellen Knoten weiter. Die Gewichtung erfolgt in einem späteren Schritt, sobald Sie denserviceBv2
virtuellen Knoten hinzugefügt haben. Obwohl in diesem Handbuch nicht behandelt, können Sie zusätzliche Filterkriterien für die Route hinzufügen und eine Wiederholungsrichtlinie hinzufügen, damit der Envoy-Proxy mehrere Versuche unternimmt, Datenverkehr an einen virtuellen Knoten zu senden, wenn ein Kommunikationsproblem auftritt.
Schritt 4: Überprüfen und Erstellen
Überprüfen Sie die Einstellungen anhand der vorherigen Anweisungen.
Schritt 5: Erstellen zusätzlicher Ressourcen
Um das Szenario abzuschließen, müssen Sie:
-
Einen virtuellen Knoten mit dem Namen
serviceBv2
und einen anderen mit dem NamenserviceA
erstellen. Beide virtuellen Knoten warten auf Anfragen über HTTP /2 Port 80. Konfigurieren Sie für denserviceA
virtuellen Knoten ein Backend vonserviceb.apps.local
. Der gesamte ausgehende Datenverkehr vomserviceA
virtuellen Knoten wird an den genannten virtuellen Dienst gesendet.serviceb.apps.local
Obwohl dies in diesem Handbuch nicht behandelt wird, können Sie auch einen Dateipfad angeben, in den Zugriffsprotokolle für einen virtuellen Knoten geschrieben werden sollen. -
Erstellen Sie einen zusätzlichen virtuellen Dienst mit dem Namen
servicea.apps.local
, der den gesamten Datenverkehr direkt an denserviceA
virtuellen Knoten sendet. -
Aktualisieren Sie die
serviceB
-Route, die Sie in einem vorherigen Schritt erstellt haben, so, dass 75 Prozent des Datenverkehrs an den virtuellenserviceB
- Knoten und 25 Prozent des Datenverkehrs an den virtuellenserviceBv2
-Knoten gesendet werden. Im Laufe der Zeit können Sie die Gewichtungen weiter ändern, bisserviceBv2
100 Prozent des Datenverkehrs erhält. Sobald der gesamte Datenverkehr an gesendet wurdeserviceBv2
, können Sie denserviceB
virtuellen Knoten und den eigentlichen Dienst herunterfahren und beenden. Wenn Sie Gewichtungen ändern, erfordert Ihr Code keine Änderung, da sich die Namen des virtuellenserviceb.apps.local
- und des tatsächlichen Services nicht ändern. Denken Sie daran, dass der virtuelleserviceb.apps.local
-Service Datenverkehr an den virtuellen Router sendet, der den Datenverkehr an die virtuellen Knoten weiterleitet. Die Serviceerkennungsnamen für die virtuellen Knoten können jederzeit geändert werden.
Mesh-Zusammenfassung
Bevor Sie das Service-Mesh erstellt haben, hatten Sie drei aktuelle Services mit den Namen servicea.apps.local
, serviceb.apps.local
und servicebv2.apps.local
. Zusätzlich zu den tatsächlichen Services verfügen Sie jetzt über ein Service-Mesh, das die folgenden Ressourcen enthält, die die tatsächlichen Services darstellen:
-
Zwei virtuelle Services. Der Proxy sendet den gesamten Datenverkehr vom virtuellen Service
servicea.apps.local
über einen virtuellen Router an den virtuellen Serviceserviceb.apps.local
. -
Drei virtuelle Knoten mit den Namen
serviceA
,serviceB
undserviceBv2
. Der Envoy-Proxy verwendet die für die virtuellen Knoten konfigurierten Service-Erkennungsinformationen, um die IP-Adressen der tatsächlichen Services zu suchen. -
Einen virtuellen Router mit einer Route, die den Envoy-Proxy anweist, 75 Prozent des eingehenden Datenverkehrs an den virtuellen Knoten
serviceB
und 25 Prozent des Datenverkehrs an den virtuellen KnotenserviceBv2
zu leiten.
Schritt 6: Aktualisieren der Services
Nachdem Sie Ihr Mesh erstellt haben, müssen Sie die folgenden Aufgaben ausführen:
-
Autorisieren Sie den Envoy-Proxy, den Sie mit jedem Dienst bereitstellen, zum Lesen der Konfiguration eines oder mehrerer virtueller Knoten. Weitere Informationen zur Autorisierung des Proxys finden Sie unter. Envoy Proxy-Autorisierung
-
Gehen Sie wie folgt vor, um Ihren bestehenden Dienst zu aktualisieren.
So konfigurieren Sie eine EC2 Amazon-Instance als Mitglied eines virtuellen Knotens
-
Erstellen Sie eine IAM Rolle.
-
Erstellen Sie eine Datei mit dem Namen
ec2-trust-relationship.json
und dem folgenden Inhalt.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
Erstellen Sie eine IAM Rolle mit dem folgenden Befehl.
aws iam create-role --role-name
mesh-virtual-node-service-b
--assume-role-policy-document file://ec2-trust-relationship.json
-
-
Fügen Sie der Rolle IAM Richtlinien hinzu, die es ihr ermöglichen, von Amazon ECR und nur die Konfiguration eines bestimmten virtuellen App Mesh-Knotens zu lesen.
-
Erstellen Sie eine Datei namens „
virtual-node-policy.json
“ mit dem folgenden Inhalt.apps
ist der Name des Netzes, das Sie in Schritt 1: Erstellen von einem Mesh und einem virtuellen Service erstellt haben, undserviceB
ist der Name des virtuellen Knotens, den Sie in Schritt 2: Erstellen von einem virtuellen Knoten erstellt haben. Ersetzen111122223333
mit Ihrer Konto-ID undus-west-2
mit der Region, in der Sie Ihr Mesh erstellt haben.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appmesh:StreamAggregatedResources", "Resource": [ "arn:aws:appmesh:
us-west-2
:111122223333
:mesh/apps
/virtualNode/serviceB
" ] } ] } -
Erstellen Sie die Richtlinie mit dem folgenden Befehl.
aws iam create-policy --policy-name
virtual-node-policy
--policy-document file://virtual-node-policy.json -
Hängen Sie die Richtlinie, die Sie im vorherigen Schritt erstellt haben, an die Rolle an, sodass die Rolle die Konfiguration nur für den
serviceB
virtuellen Knoten aus App Mesh lesen kann.aws iam attach-role-policy --policy-arn arn:aws:iam::
111122223333
:policy/virtual-node-policy --role-namemesh-virtual-node-service-b
-
Hängen Sie die
AmazonEC2ContainerRegistryReadOnly
verwaltete Richtlinie an die Rolle an, damit sie das Envoy-Container-Image von Amazon ECR abrufen kann.aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly --role-name
mesh-virtual-node-service-b
-
-
Starten Sie eine EC2 Amazon-Instance mit der IAM Rolle, die Sie erstellt haben.
-
Connect zu Ihrer Instance her überSSH.
-
Installieren Sie Docker und AWS CLI dann auf Ihrer Instanz gemäß der Dokumentation Ihres Betriebssystems.
-
Authentifizieren Sie sich beim Envoy ECR Amazon-Repository in der Region, aus der Ihr Docker-Client das Image abrufen soll.
-
Alle Regionen außer
me-south-1
,,ap-east-1
,ap-southeast-3
eu-south-1
,il-central-1
und.af-south-1
Sie können ersetzenus-west-2
mit jeder unterstützten Region außerme-south-1
ap-east-1
,ap-southeast-3
,eu-south-1
,il-central-1
, undaf-south-1
.$
aws ecr get-login-password \ --region
us-west-2
\ | docker login \ --username AWS \ --password-stdin 840364872350.dkr.ecr.us-west-2
.amazonaws.com -
me-south-1
-Region$
aws ecr get-login-password \ --region me-south-1 \ | docker login \ --username AWS \ --password-stdin 772975370895.dkr.ecr.me-south-1.amazonaws.com
-
ap-east-1
-Region$
aws ecr get-login-password \ --region ap-east-1 \ | docker login \ --username AWS \ --password-stdin 856666278305.dkr.ecr.ap-east-1.amazonaws.com
-
-
Führen Sie einen der folgenden Befehle aus, um den App Mesh Envoy-Container auf Ihrer Instance zu starten, je nachdem, aus welcher Region Sie das Image abrufen möchten. Das Tool
apps
andserviceB
Werte sind die im Szenario definierten Mesh- und virtuellen Knotennamen. Diese Information teilt dem Proxy mit, welche Konfiguration des virtuellen Knotens aus App Mesh gelesen werden soll. Um das Szenario abzuschließen, müssen Sie diese Schritte auch für die EC2 Amazon-Instances ausführen, die die durch die virtuellen KnotenserviceBv2
und dieserviceA
virtuellen Knoten repräsentierten Dienste hosten. Ersetzen Sie diese Werte für Ihre eigene Anwendung durch Ihre eigenen.-
Alle Regionen außer
me-south-1
ap-east-1
,ap-southeast-3
,eu-south-1
il-central-1
, undaf-south-1
. Sie können ersetzenRegion-code
mit jeder unterstützten Region außer denaf-south-1
Regionenme-south-1
ap-east-1
ap-southeast-3
,eu-south-1
,il-central-1
,, und. Sie können
durch einen beliebigen Wert zwischen1337
0
und2147483647
ersetzen.sudo docker run --detach --env APPMESH_RESOURCE_ARN=
mesh/
\ -uapps
/virtualNode/serviceB
1337
--network host 840364872350.dkr.ecr.region-code
.amazonaws.com/aws-appmesh-envoy:v1.29.9.0-prod -
Region
me-south-1
: Sie können
durch einen beliebigen Wert zwischen1337
0
und2147483647
ersetzen.sudo docker run --detach --env APPMESH_RESOURCE_ARN=
mesh/
\ -uapps
/virtualNode/serviceB
1337
--network host 772975370895.dkr.ecr.me-south-1.amazonaws.com/aws-appmesh-envoy:v1.29.9.0-prod -
Region
ap-east-1
: Sie können
durch einen beliebigen Wert zwischen1337
0
und2147483647
ersetzen.sudo docker run --detach --env APPMESH_RESOURCE_ARN=
mesh/
\ -uapps
/virtualNode/serviceB
1337
--network host 856666278305.dkr.ecr.ap-east-1.amazonaws.com/aws-appmesh-envoy:v1.29.9.0-prod
Anmerkung
Für die
APPMESH_RESOURCE_ARN
Eigenschaft ist eine Version1.15.0
oder eine neuere Version des Envoy-Images erforderlich. Weitere Informationen finden Sie unter Bild des Gesandten.Wichtig
Nur Version v1.9.0.0-prod oder höher wird für die Verwendung mit App Mesh unterstützt.
-
Wählen Sie im Folgenden
Show more
aus. Erstellen Sie eine Datei namensenvoy-networking.sh
mit dem folgenden Inhalt auf Ihrer Instance. Ersetzen8000
mit dem Port, den Ihr Anwendungscode für eingehenden Datenverkehr verwendet. Sie können den Wert fürAPPMESH_IGNORE_UID
ändern, aber der Wert muss mit dem Wert übereinstimmen, den Sie im vorherigen Schritt angegeben haben, z. B.1337
. Sie können bei BedarfAPPMESH_EGRESS_IGNORED_IP
zusätzliche Adressen hinzufügen. Ändern Sie keine anderen Linien.#!/bin/bash -e # # Start of configurable options # #APPMESH_START_ENABLED="0" APPMESH_IGNORE_UID="
1337
" APPMESH_APP_PORTS="8000
" APPMESH_ENVOY_EGRESS_PORT="15001" APPMESH_ENVOY_INGRESS_PORT="15000" APPMESH_EGRESS_IGNORED_IP="169.254.169.254,169.254.170.2" # Enable routing on the application start. [ -z "$APPMESH_START_ENABLED" ] && APPMESH_START_ENABLED="0" # Enable IPv6. [ -z "$APPMESH_ENABLE_IPV6" ] && APPMESH_ENABLE_IPV6="0" # Egress traffic from the processess owned by the following UID/GID will be ignored. if [ -z "$APPMESH_IGNORE_UID" ] && [ -z "$APPMESH_IGNORE_GID" ]; then echo "Variables APPMESH_IGNORE_UID and/or APPMESH_IGNORE_GID must be set." echo "Envoy must run under those IDs to be able to properly route it's egress traffic." exit 1 fi # Port numbers Application and Envoy are listening on. if [ -z "$APPMESH_ENVOY_EGRESS_PORT" ]; then echo "APPMESH_ENVOY_EGRESS_PORT must be defined to forward traffic from the application to the proxy." exit 1 fi # If an app port was specified, then we also need to enforce the proxies ingress port so we know where to forward traffic. if [ ! -z "$APPMESH_APP_PORTS" ] && [ -z "$APPMESH_ENVOY_INGRESS_PORT" ]; then echo "APPMESH_ENVOY_INGRESS_PORT must be defined to forward traffic from the APPMESH_APP_PORTS to the proxy." exit 1 fi # Comma separated list of ports for which egress traffic will be ignored, we always refuse to route SSH traffic. if [ -z "$APPMESH_EGRESS_IGNORED_PORTS" ]; then APPMESH_EGRESS_IGNORED_PORTS="22" else APPMESH_EGRESS_IGNORED_PORTS="$APPMESH_EGRESS_IGNORED_PORTS,22" fi # # End of configurable options # function initialize() { echo "=== Initializing ===" if [ ! -z "$APPMESH_APP_PORTS" ]; then iptables -t nat -N APPMESH_INGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then ip6tables -t nat -N APPMESH_INGRESS fi fi iptables -t nat -N APPMESH_EGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then ip6tables -t nat -N APPMESH_EGRESS fi } function enable_egress_routing() { # Stuff to ignore [ ! -z "$APPMESH_IGNORE_UID" ] && \ iptables -t nat -A APPMESH_EGRESS \ -m owner --uid-owner $APPMESH_IGNORE_UID \ -j RETURN [ ! -z "$APPMESH_IGNORE_GID" ] && \ iptables -t nat -A APPMESH_EGRESS \ -m owner --gid-owner $APPMESH_IGNORE_GID \ -j RETURN [ ! -z "$APPMESH_EGRESS_IGNORED_PORTS" ] && \ for IGNORED_PORT in $(echo "$APPMESH_EGRESS_IGNORED_PORTS" | tr "," "\n"); do iptables -t nat -A APPMESH_EGRESS \ -p tcp \ -m multiport --dports "$IGNORED_PORT" \ -j RETURN done if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then # Stuff to ignore ipv6 [ ! -z "$APPMESH_IGNORE_UID" ] && \ ip6tables -t nat -A APPMESH_EGRESS \ -m owner --uid-owner $APPMESH_IGNORE_UID \ -j RETURN [ ! -z "$APPMESH_IGNORE_GID" ] && \ ip6tables -t nat -A APPMESH_EGRESS \ -m owner --gid-owner $APPMESH_IGNORE_GID \ -j RETURN [ ! -z "$APPMESH_EGRESS_IGNORED_PORTS" ] && \ for IGNORED_PORT in $(echo "$APPMESH_EGRESS_IGNORED_PORTS" | tr "," "\n"); do ip6tables -t nat -A APPMESH_EGRESS \ -p tcp \ -m multiport --dports "$IGNORED_PORT" \ -j RETURN done fi # The list can contain both IPv4 and IPv6 addresses. We will loop over this list # to add every IPv4 address into `iptables` and every IPv6 address into `ip6tables`. [ ! -z "$APPMESH_EGRESS_IGNORED_IP" ] && \ for IP_ADDR in $(echo "$APPMESH_EGRESS_IGNORED_IP" | tr "," "\n"); do if [[ $IP_ADDR =~ .*:.* ]] then [ "$APPMESH_ENABLE_IPV6" == "1" ] && \ ip6tables -t nat -A APPMESH_EGRESS \ -p tcp \ -d "$IP_ADDR" \ -j RETURN else iptables -t nat -A APPMESH_EGRESS \ -p tcp \ -d "$IP_ADDR" \ -j RETURN fi done # Redirect everything that is not ignored iptables -t nat -A APPMESH_EGRESS \ -p tcp \ -j REDIRECT --to $APPMESH_ENVOY_EGRESS_PORT # Apply APPMESH_EGRESS chain to non local traffic iptables -t nat -A OUTPUT \ -p tcp \ -m addrtype ! --dst-type LOCAL \ -j APPMESH_EGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then # Redirect everything that is not ignored ipv6 ip6tables -t nat -A APPMESH_EGRESS \ -p tcp \ -j REDIRECT --to $APPMESH_ENVOY_EGRESS_PORT # Apply APPMESH_EGRESS chain to non local traffic ipv6 ip6tables -t nat -A OUTPUT \ -p tcp \ -m addrtype ! --dst-type LOCAL \ -j APPMESH_EGRESS fi } function enable_ingress_redirect_routing() { # Route everything arriving at the application port to Envoy iptables -t nat -A APPMESH_INGRESS \ -p tcp \ -m multiport --dports "$APPMESH_APP_PORTS" \ -j REDIRECT --to-port "$APPMESH_ENVOY_INGRESS_PORT" # Apply AppMesh ingress chain to everything non-local iptables -t nat -A PREROUTING \ -p tcp \ -m addrtype ! --src-type LOCAL \ -j APPMESH_INGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then # Route everything arriving at the application port to Envoy ipv6 ip6tables -t nat -A APPMESH_INGRESS \ -p tcp \ -m multiport --dports "$APPMESH_APP_PORTS" \ -j REDIRECT --to-port "$APPMESH_ENVOY_INGRESS_PORT" # Apply AppMesh ingress chain to everything non-local ipv6 ip6tables -t nat -A PREROUTING \ -p tcp \ -m addrtype ! --src-type LOCAL \ -j APPMESH_INGRESS fi } function enable_routing() { echo "=== Enabling routing ===" enable_egress_routing if [ ! -z "$APPMESH_APP_PORTS" ]; then enable_ingress_redirect_routing fi } function disable_routing() { echo "=== Disabling routing ===" iptables -t nat -F APPMESH_INGRESS iptables -t nat -F APPMESH_EGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then ip6tables -t nat -F APPMESH_INGRESS ip6tables -t nat -F APPMESH_EGRESS fi } function dump_status() { echo "=== iptables FORWARD table ===" iptables -L -v -n echo "=== iptables NAT table ===" iptables -t nat -L -v -n if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then echo "=== ip6tables FORWARD table ===" ip6tables -L -v -n echo "=== ip6tables NAT table ===" ip6tables -t nat -L -v -n fi } function clean_up() { disable_routing ruleNum=$(iptables -L PREROUTING -t nat --line-numbers | grep APPMESH_INGRESS | cut -d " " -f 1) iptables -t nat -D PREROUTING $ruleNum ruleNum=$(iptables -L OUTPUT -t nat --line-numbers | grep APPMESH_EGRESS | cut -d " " -f 1) iptables -t nat -D OUTPUT $ruleNum iptables -t nat -X APPMESH_INGRESS iptables -t nat -X APPMESH_EGRESS if [ "$APPMESH_ENABLE_IPV6" == "1" ]; then ruleNum=$(ip6tables -L PREROUTING -t nat --line-numbers | grep APPMESH_INGRESS | cut -d " " -f 1) ip6tables -t nat -D PREROUTING $ruleNum ruleNum=$(ip6tables -L OUTPUT -t nat --line-numbers | grep APPMESH_EGRESS | cut -d " " -f 1) ip6tables -t nat -D OUTPUT $ruleNum ip6tables -t nat -X APPMESH_INGRESS ip6tables -t nat -X APPMESH_EGRESS fi } function main_loop() { echo "=== Entering main loop ===" while read -p '> ' cmd; do case "$cmd" in "quit") clean_up break ;; "status") dump_status ;; "enable") enable_routing ;; "disable") disable_routing ;; *) echo "Available commands: quit, status, enable, disable" ;; esac done } function print_config() { echo "=== Input configuration ===" env | grep APPMESH_ || true } print_config initialize if [ "$APPMESH_START_ENABLED" == "1" ]; then enable_routing fi main_loop-
Um
iptables
-Regeln für die Weiterleitung des Anwendungsdatenverkehrs an den Envoy-Proxy zu konfigurieren, führen Sie das Skript aus, das Sie im vorherigen Schritt erstellt haben.sudo ./envoy-networking.sh
-
Starten Sie den Anwendungscodes Ihres virtuellen Knotens.
Anmerkung
Weitere Beispiele und Komplettlösungen für App Mesh finden Sie im App Mesh Mesh-Beispiel-Repository