Virtual Gateway 구성

VirtualGateway를 사용하면 Mesh 외부에 있는 리소스가 Mesh 내부에 있는 리소스와 통신할 수 있습니다. VirtualGateway는 Amazon EC2 인스턴스, Amazon ECS 서비스, Amazon EKS 서비스에서 실행되는 Envoy 프록시를 나타냅니다. 애플리케이션으로 실행되는 Envoy를 나타내는 VirtualNode와 달리 VirtualGateway는 자체적으로 배포되는 Envoy를 나타냅니다.

외부 리소스는 DNS 이름을 resolve하여 Envoy가 실해되는 서비스 또는 인스턴스에 할당된 IP 주소로 확인할 수 있어야 합니다. 그런 다음 모든 App Mesh 구성에 접근하여 Mesh 내부에 있는 리소스를 확인할 수 있습니다.

VirtualGateway에서 수신 요청을 처리하는 구성은 게이트웨이 경로를 사용하여 지정됩니다. VirtualGateways는 로드 밸런서와 관련이 있으며 VirtualRouter 구성과 유사한 경로를 사용하여 수신 트래픽 규칙을 구성할 수 있습니다.

1. Virtual GW 구성

지금까지 서비스 간 통신이 Envoy 프록시를 통해 라우팅 된다는 것을 확인했으며, AWS App Mesh VirtualGateway를 사용하여 프런트엔드 서비스 frontend-node를 공개합니다.

아래 그림과 같이 virtual_gateway.yaml의 VirtualGateway 구성 요소를 생성합니다. 이렇게 하면 로드 밸런서 타입의 kubernetes 서비스가 생성되고 AWS Network Load Balancer 를 사용하여 외부 인터넷 트래픽을 라우팅합니다.

kubectl apply -f deployment/virtual_gateway.yaml 

Virtual Gateway는 ingress-gw 라는 이름으로 확인할 수 있습니다.

kubectl get all  -n prodcatalog-ns -o wide | grep ingress

콘솔의 App Mesh 메뉴에서도 확인할 수 있습니다.

2. Virtual Gateway 테스트

Load balancer의 Endpoint로 Virtual Gateway로 접속되는지 확인합니다. (Virtual Gateway가 active 될때 까지는 5분 정도가 소요됩니다.)

export LB_NAME=$(kubectl get svc ingress-gw -n prodcatalog-ns -o jsonpath="{.status.loadBalancer.ingress[*].hostname}") 
 curl -v --silent ${LB_NAME} | grep x-envoy
echo $LB_NAME

새로운 browser 창에 Loadbalancer endpoint 을 복사하여 붙여 넣기 하여 아래 화면을 확인합니다.

Table with ID as 1 을 넣어 Add하 Product를 Product Catalog에 추가 합니다.

제품 카탈로그 표에 추가된 새 제품 Table이 나타납니다. proddetail 백엔드 서비스에서 공급업체 정보를 가져온 카탈로그 세부 정보도 볼 수 있습니다.

새 버전의 Prodetail-v2를 추가하고 가상 라우터에 새 구성을 추가하여 Catalog Detail service proddetail-v1proddetail-v2의 다른 버전 간에 트래픽을 이동함으로써 Canary Deployment를 사용해 보겠습니다.

Last updated