为了测试我们使用appmesh后的Product Catalog应用是否按预期工作,我们将首先登录到
frontend-node
容器:
export FE_POD_NAME=$(kubectl get pods -n prodcatalog-ns -l app=frontend-node -o jsonpath='{.items[].metadata.name}')
kubectl -n prodcatalog-ns exec -it ${FE_POD_NAME} -c frontend-node bash
root@frontend-node-9d46cb55-XXX:/usr/src/app#
通过向5000端口上的Virtual Service prodcatalog
发出 curl 请求来进行测试:
curl -v http://prodcatalog.prodcatalog-ns.svc.cluster.local:5000/products/
输出应类似于以下内容。 可以看到对后端服务 prodcatalog
的请求是通过 envoy 代理进行的:
* Trying 10.100.163.192...
* TCP_NODELAY set
* Connected to prodcatalog.prodcatalog-ns.svc.cluster.local (10.100.xx.yyy) port 5000 (#0)
> GET /products/ HTTP/1.1
> Host: prodcatalog.prodcatalog-ns.svc.cluster.local:5000
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< content-type: application/json
< content-length: 51
< x-amzn-trace-id: Root=1-600925c6-e2c7bec92b824ddc9969d1b5
< access-control-allow-origin: *
< server: envoy # 这里显示server: envoy
< date: Thu, 21 Jan 2021 06:57:10 GMT
< x-envoy-upstream-service-time: 19
<
{
"products": {},
"details": {
"version": "1",
"vendors": [
"ABC.com"
]
}
}
* Curl_http_done: called premature == 0
* Connection #0 to host prodcatalog.prodcatalog-ns.svc.cluster.local left intact
从frontend-node
bash 退出。
现在,测试从 Fargate 服务 prodcatalog
到Nodegroup服务 proddetail
的连接,我们将首先登录到 prodcatalog
容器:
export BE_POD_NAME=$(kubectl get pods -n prodcatalog-ns -l app=prodcatalog -o jsonpath='{.items[].metadata.name}')
kubectl -n prodcatalog-ns exec -it ${BE_POD_NAME} -c prodcatalog bash
root@prodcatalog-98f7c5f87-xxxxx:/usr/src/app#
通过向 3000端口 上的Virtual Service proddetail 发出 curl 请求来测试:
curl -v http://proddetail.prodcatalog-ns.svc.cluster.local:3000/catalogDetail
您应该会看到以下返回结果。 可以看到对后端服务 proddetail-v1
的请求是通过 envoy 代理进行的:
.....
.....
< HTTP/1.1 200 OK
< content-type: application/json
< content-length: 51
< x-amzn-trace-id: Root=1-600925c6-e2c7bec92b824ddc9969d1b5
< access-control-allow-origin: *
< server: envoy
< date: Thu, 21 Jan 2021 06:57:10 GMT
< x-envoy-upstream-service-time: 19
....
....
{"version":"1","vendors":["ABC.com"]}
恭喜! 您已经完成了初始的架构迁移,同时保证了提供相同的功能。 现在让我们向外部用户公开frontend-node访问, 使用 App Mesh Virtual Gateway访问 UI