기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
AWS App Mesh 및 Amazon 시작하기 EC2
중요
지원 종료 알림: 2026년 9월 30일에 에 대한 지원을 중단할 AWS 예정입니다 AWS App Mesh. 2026년 9월 30일 이후에는 AWS App Mesh 콘솔 또는 AWS App Mesh 리소스에 더 이상 액세스할 수 없습니다. 자세한 내용은 에서 Amazon ECS Service Connect AWS App Mesh 로 마이그레이션하는
이 주제는 Amazon 에서 실행 중인 실제 서비스와 AWS App Mesh 함께 를 사용하는 데 도움이 됩니다EC2. 이 자습서에서는 몇 가지 App Mesh 리소스 유형의 기본 기능을 다룹니다.
시나리오
App Mesh를 사용하는 방법을 설명하기 위해 다음과 같은 특징을 가진 애플리케이션이 있다고 가정합니다.
-
serviceA
및serviceB
라는 두 개의 서비스로 구성됩니다. -
두 서비스 모두
apps.local
이라는 네임스페이스에 등록됩니다. -
ServiceA
는 HTTP/2, 포트 80serviceB
이상과 통신합니다. -
serviceB
의 버전 2를 이미 배포했고apps.local
네임스페이스에serviceBv2
이름으로 등록했습니다.
다음과 같은 요구 사항이 있습니다.
-
에서
serviceA
로 트래픽의 75%, 트래픽의serviceB
25%를serviceBv2
먼저 전송하려고 합니다. 에 25%만 전송하면 에서 트래픽의 100%를 전송하기 전에 버그가 없는지 확인할serviceBv2
수 있습니다serviceA
. -
트래픽이 신뢰할 수 있는 것으로 입증되면 해당 트래픽의 100%가
serviceBv2
로 이동하도록 트래픽 가중치를 쉽게 조정할 수 있기를 원합니다. 모든 트래픽이serviceBv2
로 전송되면serviceB
를 중단하려고 할 수 있습니다. -
이전 요구 사항을 충족하기 위해 실제 서비스에 대한 기존 애플리케이션 코드 또는 서비스 검색 등록을 변경할 필요가 없도록 하고 싶습니다.
요구 사항을 충족하기 위해 가상 서비스, 가상 노드, 가상 라우터 및 루트가 포함된 App Mesh 서비스 메시를 생성하기로 결정했습니다. 메시를 구현한 후 서비스가 Envoy 프록시를 사용하도록 서비스를 업데이트합니다. 업데이트된 서비스는 서로 직접 통신하지 않고 Envoy 프록시를 통해 서로 통신합니다.
사전 조건
App Mesh는 DNS AWS Cloud Map, 또는 둘 다에 등록된 Linux 서비스를 지원합니다. 이 시작 가이드를 사용하려면 에 등록된 세 가지 기존 서비스가 있는 것이 좋습니다DNS. 서비스가 존재하지 않더라도 서비스 메시 및 해당 리소스를 생성할 수 있지만 실제 서비스를 배포할 때까지 메시를 사용할 수 없습니다.
아직 실행 중인 서비스가 없는 경우 Amazon EC2 인스턴스를 시작하고 애플리케이션을 배포할 수 있습니다. 자세한 내용은 Amazon EC2 사용 설명서의 자습서: Amazon EC2 Linux 인스턴스 시작하기를 참조하세요. 나머지 단계에서는 실제 서비스의 이름이 serviceA
, serviceB
및 serviceBv2
이고 apps.local
이라는 네임스페이스를 통해 모든 서비스를 검색할 수 있다고 가정합니다.
1단계: 메시 및 가상 서비스 생성
서비스 메시는 내부에 있는 서비스 간의 네트워크 트래픽에 대한 논리적 경계입니다. 자세한 내용은 서비스 메시 단원을 참조하십시오. 가상 서비스는 실제 서비스를 추상화한 것입니다. 자세한 내용은 가상 서비스 단원을 참조하십시오.
다음의 리소스를 생성합니다.
-
시나리오의 모든 서비스가
apps.local
네임스페이스에 등록되기 때문에apps
이라는 메시를 생성합니다. -
가상 서비스는 해당 이름으로 검색할 수 있는 서비스를 나타내며 다른 이름을 참조하도록 코드를 변경하고 싶지 않기 때문에
serviceb.apps.local
이라는 이름의 가상 서비스를 생성합니다.servicea.apps.local
이라는 이름의 가상 서비스는 이후 단계에서 추가됩니다.
AWS Management Console 또는 AWS CLI 버전 1.18.116 이상 또는 2.0.38 이상을 사용하여 다음 단계를 완료할 수 있습니다. 를 사용하는 경우 aws --version
명령을 AWS CLI사용하여 설치된 AWS CLI 버전을 확인합니다. 버전 1.18.116 이상 또는 2.0.38 이상이 설치되어 있지 않으면 AWS CLI를 설치하거나 업데이트해야 합니다. 사용할 도구의 탭을 선택합니다.
2단계: 가상 노드 생성
가상 노드는 실제 서비스에 대한 논리적 포인터 역할을 합니다. 자세한 내용은 가상 노드 단원을 참조하십시오.
가상 노드 중 하나가 serviceB
라는 실제 서비스를 나타내므로 serviceB
이라는 가상 노드를 생성합니다. 가상 노드가 나타내는 실제 서비스는 호스트 이름 serviceb.apps.local
을 사용하여 DNS
를 통해 검색할 수 있습니다. 또는 AWS Cloud Map을 사용하여 실제 서비스를 검색할 수 있습니다. 가상 노드는 포트 80의 HTTP/2 프로토콜을 사용하여 트래픽을 수신 대기합니다. 상태 확인과 마찬가지로 다른 프로토콜도 지원됩니다. 이후 단계에서 serviceA
및 serviceBv2
에 대한 가상 노드를 생성합니다.
3단계: 가상 라우터 생성 및 라우팅
가상 라우터는 메시 내에 있는 하나 이상의 가상 서비스에 대한 트래픽을 라우팅합니다. 자세한 내용은 가상 라우터 및 경로 단원을 참조하세요.
다음의 리소스를 생성합니다.
-
serviceB
라는 이름의 가상 라우터.serviceB.apps.local
이라는 가상 서비스는 다른 서비스와의 아웃바운드 통신을 시작하지 않기 때문입니다. 이전에 만든 가상 서비스는 실제serviceb.apps.local
서비스를 추상화한 것입니다. 가상 서비스는 가상 라우터로 트래픽을 보냅니다. 가상 라우터는 포트 80의 HTTP/2 프로토콜을 사용하여 트래픽을 수신 대기합니다. 다른 프로토콜도 지원됩니다. -
serviceB
라는 이름의 라우팅. 트래픽을 100%serviceB
가상 노드로 라우팅합니다.serviceBv2
가상 노드를 추가한 후 이후 단계에서 가중치가 변경됩니다. 이 안내서에서는 다루지 않지만 해당 라우팅에 대한 필터 조건을 추가하고 재시도 정책을 추가하여 통신 문제가 발생할 경우 Envoy 프록시가 가상 노드에 트래픽을 여러 번 보내도록 할 수 있습니다.
4단계: 검토 및 생성
이전 지침에 대한 설정을 검토합니다.
5단계: 추가 리소스 생성
시나리오를 완료하려면 다음을 수행해야 합니다.
-
serviceBv2
라는 가상 노드 하나와serviceA
라는 가상 노드 하나를 생성합니다. 두 가상 노드 모두 HTTP/2 포트 80을 통해 요청을 수신합니다.serviceA
가상 노드의 경우serviceb.apps.local
의 백엔드를 구성합니다.serviceA
가상 노드의 모든 아웃바운드 트래픽은 이름이serviceb.apps.local
인 가상 서비스로 전송됩니다. 이 안내서에서는 다루지 않지만 가상 노드에 대한 액세스 로그를 쓸 파일 경로를 지정할 수도 있습니다. -
servicea.apps.local
이라는 가상 서비스를 추가로 생성하면 모든 트래픽이serviceA
가상 노드로 직접 전송됩니다. -
트래픽의 75%를
serviceB
가상 노드로 보내고 트래픽의 25%를serviceBv2
가상 노드로 보내도록 이전 단계에서 생성한serviceB
라우팅을 업데이트합니다. 시간이 지남에 따라serviceBv2
가 트래픽의 100%를 수신할 때까지 가중치를 계속 수정할 수 있습니다. 모든 트래픽이serviceBv2
로 전송되면serviceB
가상 노드와 실제 서비스를 종료하고 중단할 수 있습니다.serviceb.apps.local
가상 및 실제 서비스 이름이 변경되지 않으므로 가중치를 변경할 때 코드를 수정할 필요가 없습니다.serviceb.apps.local
가상 서비스는 트래픽을 가상 라우터로 전송하여 트래픽을 가상 노드로 라우팅한다는 점을 기억하십시오. 가상 노드의 서비스 검색 이름은 언제든지 변경할 수 있습니다.
메시 요약
서비스 메시를 생성하기 전에는 servicea.apps.local
, serviceb.apps.local
및 servicebv2.apps.local
이라는 세 가지 실제 서비스가 있었습니다. 실제 서비스 외에도 이제 실제 서비스를 나타내는 다음 리소스가 포함된 서비스 메시가 있습니다.
-
두 개의 가상 서비스. 프록시는 가상 라우터를 통해
servicea.apps.local
가상 서비스의 모든 트래픽을serviceb.apps.local
가상 서비스로 보냅니다. -
serviceA
,serviceB
및serviceBv2
라는 세 개의 가상 노드. Envoy 프록시는 가상 노드에 대해 구성된 서비스 검색 정보를 사용하여 실제 서비스의 IP 주소를 조회합니다. -
Envoy 프록시가 인바운드 트래픽의 75%를
serviceB
가상 노드로 라우팅하고 트래픽의 25%를serviceBv2
가상 노드로 라우팅하도록 지시하는 하나의 라우팅이 있는 가상 라우터 하나.
6단계: 서비스 업데이트
메시를 생성한 후에는 다음 작업을 완료해야 합니다.
-
각 서비스와 함께 배포하는 Envoy 프록시에 하나 이상의 가상 노드의 구성을 읽을 수 있는 권한을 부여합니다. 프록시에 권한을 부여하는 방법에 대한 자세한 내용은 Envoy 프록시 권한 부여 섹션을 참조하세요.
-
기존 서비스를 업데이트하려면 다음 단계를 완료하세요.
Amazon EC2 인스턴스를 가상 노드 멤버로 구성하려면
-
IAM 역할을 생성합니다.
-
다음 콘텐츠를 가진
ec2-trust-relationship.json
이라는 파일을 생성합니다:{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "ec2.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
-
다음 명령을 사용하여 IAM 역할을 생성합니다.
aws iam create-role --role-name
mesh-virtual-node-service-b
--assume-role-policy-document file://ec2-trust-relationship.json
-
-
Amazon에서 읽을 수 있도록 허용하는 IAM 정책을 역할에 ECR 연결하고 특정 App Mesh 가상 노드의 구성만 연결합니다.
-
다음 콘텐츠를 통해
virtual-node-policy.json
이라는 파일을 생성합니다.apps
는 1단계: 메시 및 가상 서비스 생성에서 생성한 메시의 이름이고,serviceB
는 2단계: 가상 노드 생성에서 생성한 가상 노드의 이름입니다. Replace111122223333
계정 ID 및us-west-2
메시를 생성한 리전을 사용합니다.{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appmesh:StreamAggregatedResources", "Resource": [ "arn:aws:appmesh:
us-west-2
:111122223333
:mesh/apps
/virtualNode/serviceB
" ] } ] } -
다음 명령을 사용하여 정책을 생성합니다.
aws iam create-policy --policy-name
virtual-node-policy
--policy-document file://virtual-node-policy.json -
이전 단계에서 생성한 정책을 역할에 연결하여 역할이 App Mesh에서
serviceB
가상 노드에 대한 구성만 읽을 수 있도록 합니다.aws iam attach-role-policy --policy-arn arn:aws:iam::
111122223333
:policy/virtual-node-policy --role-namemesh-virtual-node-service-b
-
Amazon 에서 Envoy 컨테이너 이미지를 가져올 수 있도록
AmazonEC2ContainerRegistryReadOnly
관리형 정책을 역할에 연결합니다ECR.aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly --role-name
mesh-virtual-node-service-b
-
-
를 통해 인스턴스에 연결합니다SSH.
-
운영 체제 설명서에 따라 인스턴스 AWS CLI 에 Docker 및 를 설치합니다.
-
Docker 클라이언트가 이미지를 가져올 리전의 Envoy Amazon ECR리포지토리에 인증합니다.
-
me-south-1
,ap-east-1
,ap-southeast-3
,eu-south-1
,il-central-1
및af-south-1
을 제외한 모든 리전입니다. 대체할 수 있습니다.us-west-2
,me-south-1
, ,ap-east-1
,ap-southeast-3
,eu-south-1
를 제외한 지원되는 리전il-central-1
이 있는af-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
리전$
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
리전$
aws ecr get-login-password \ --region ap-east-1 \ | docker login \ --username AWS \ --password-stdin 856666278305.dkr.ecr.ap-east-1.amazonaws.com
-
-
이미지를 가져올 리전에 따라 다음 명령 중 하나를 실행하여 인스턴스에서 App Mesh Envoy 컨테이너를 시작합니다. 는
apps
그리고serviceB
값은 시나리오에 정의된 메시 및 가상 노드 이름입니다. 이 정보는 프록시에 App Mesh에서 읽을 가상 노드 구성을 알려줍니다. 시나리오를 완료하려면serviceBv2
및serviceA
가상 노드로 표시되는 서비스를 호스팅하는 Amazon EC2 인스턴스에 대해서도 다음 단계를 완료해야 합니다. 자체 애플리케이션의 경우 이 값을 자체 값으로 바꿉니다.-
me-south-1
,ap-east-1
,ap-southeast-3
,eu-south-1
,il-central-1
및af-south-1
을 제외한 모든 리전입니다. 대체할 수 있습니다.Region-code
,me-south-1
, ,ap-east-1
,ap-southeast-3
및 리전을 제외한 지원되는il-central-1
af-south-1
리전이 있는eu-south-1
.
을1337
0
과2147483647
사이의 값으로 바꿀 수 있습니다.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 -
me-south-1
리전.
을1337
0
과2147483647
사이의 값으로 바꿀 수 있습니다.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 -
ap-east-1
리전.
을1337
0
과2147483647
사이의 값으로 바꿀 수 있습니다.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
참고
APPMESH_RESOURCE_ARN
속성에는1.15.0
이상의 Envoy 이미지 버전이 필요합니다. 자세한 내용은 Envoy 이미지 단원을 참조하십시오.중요
v1.9.0.0-prod 이상 버전만 App Mesh에서 사용할 수 있습니다.
-
아래의
Show more
를 선택합니다. 다음 콘텐츠를 통해 인스턴스에envoy-networking.sh
라는 파일을 생성합니다. Replace8000
는 애플리케이션 코드가 수신 트래픽에 사용하는 포트입니다.APPMESH_IGNORE_UID
의 값을 변경할 수 있지만 이 값은 이전 단계에서 지정한 값과 같아야 합니다(예:1337
). 필요한 경우APPMESH_EGRESS_IGNORED_IP
에 주소를 추가할 수 있습니다. 어떠한 행도 수정하지 마십시오.#!/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-
애플리케이션 트래픽을 Envoy 프록시로 라우팅하는
iptables
규칙을 구성하려면 이전 단계에서 생성한 스크립트를 실행합니다.sudo ./envoy-networking.sh
-
가상 노드 애플리케이션 코드를 시작합니다.
참고
App Mesh에 대한 더 많은 예제와 연습 내용을 보려면 App Mesh 예제 리포지토리