Since we want to visualize the automated canary deployment, we need an UI for which, we will use frontend service. This frontend service will call the backend service detail to get the vendor information. In order to expose the frontend service outside the mesh we will use AWS AppMesh VirtualGateway affiliated with Network Load Balancer. Lets deploy the frontend service.
export APP_VERSION=1.0
envsubst < flagger/frontend.yaml | kubectl apply -f -
helm upgrade -i appmesh-gateway eks/appmesh-gateway \
--namespace flagger \
--set serviceAccount.create=false \
--set serviceAccount.name=flagger-envoy-proxies
In this GatewayRoute, we are routing the traffic coming into the VirtualGateway to frontend VirtualService.
kubectl apply -f flagger/gateway.yaml
Get all the resources for AppMesh VirtualGateway appmesh-gateway
kubectl get all -n flagger -o wide | grep appmesh-gateway
It takes 3 to 5 minutes to set up the Load Balancer.
Find the AppMesh VirtualGateway public endpoint:
export URL="http://$(kubectl -n flagger get svc/appmesh-gateway -ojson | jq -r ".status.loadBalancer.ingress[].hostname")"
echo $URL
Wait for the NLB to become active:
watch curl -sS $URL
Once the LoadBalancer is active, access the LoadBalancer endpoint in browser

You can see that our frontend service is exposed via VirtualGateway using Network LoadBalancer. And this frontend service communicates with backend service detail to get the vendor information.
Congratulations on exposing the frontend service via App Mesh VirtualGateway!
Let’s test the Automated Canary Deployment for detail backend service.