要让应用程序中的 pod 加入网格,它必须有一个在 pod 中运行 sidecar 的 Envoy 代理容器。 这将建立 AWS App Mesh 的数据平面。 因此,我们必须在 Product Catalog App 部署的每个 pod 中运行一个 Envoy 容器。 例如:
 这可以通过几种不同的方式完成:
这可以通过几种不同的方式完成:
Deployment 的yaml文件,以包含 App Mesh sidecar 容器,并设置一些必需的配置和环境变量。 部署 Pod 后,它将运行 sidecar。在本教程中,我们将使用第三个选项为 pod 启用自动sidecar注入。
当我们在上一章
 中创建mesh resource时,我们通过在 prodcatalog-ns 命名空间上添加标签 Labels: appmesh.k8s.aws/sidecarInjectorWebhook=enabled 来启用自动sidecar注入。但这是在初始 pod 创建后完成的,目前,我们的每个 pod 都只是运行着一个容器。
kubectl get pods -n prodcatalog-ns -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP               NODE                                                   NOMINATED NODE   READINESS GATES
pod/frontend-node-77d64585d4-xxxx   1/1     Running   0          13h   192.168.X.6     ip-192-168-X-X.us-west-2.compute.internal           <none>           <none>
pod/prodcatalog-98f7c5f87-xxxxx      1/1     Running   0          13h   192.168.X.17   fargate-ip-192-168-X-X.us-west-2.compute.internal   <none>           <none>
pod/proddetail-5b558df99d-xxxxx      1/1     Running   0          18h   192.168.24.X   ip-192-168-X-X.us-west-2.compute.internal            <none>           <none>
要为这些 pod 注入 sidecar 代理,只需重新启动部署即可。 控制器将自动处理注入:
kubectl -n prodcatalog-ns rollout restart deployment prodcatalog
kubectl -n prodcatalog-ns rollout restart deployment proddetail 
kubectl -n prodcatalog-ns rollout restart deployment frontend-node
获取 Pod 详细信息。 您应该在每个 pod 中看到 3 个容器main application container、envoy sidecar container 和 xray sidecar container
重启 Fargate Pod 需要 4 到 6 分钟
中间过程:
 最终部署完成:
最终部署完成:
kubectl get pods -n prodcatalog-ns -o wide
NAME                                 READY   STATUS    RESTARTS   AGE   IP               NODE                                                   NOMINATED NODE   READINESS GATES
pod/frontend-node-77d64585d4-xxxx   3/3     Running   0          13h   192.168.X.6     ip-192-168-X-X.us-west-2.compute.internal           <none>           <none>
pod/prodcatalog-98f7c5f87-xxxxx      3/3     Running   0          13h   192.168.X.17   fargate-ip-192-168-X-X.us-west-2.compute.internal   <none>           <none>
pod/proddetail-5b558df99d-xxxxx      3/3     Running   0          18h   192.168.24.X   ip-192-168-X-X.us-west-2.compute.internal            <none>           <none>                                                                       3000/TCP       44h   app=proddetail,version=v1
我们可以看到有两个 sidecar 容器envoy和xray-daemon, 以及应用容器frontend-node
POD=$(kubectl -n prodcatalog-ns get pods -o jsonpath='{.items[0].metadata.name}')
kubectl -n prodcatalog-ns get pods ${POD} -o jsonpath='{.spec.containers[*].name}'; echo
运行结果: frontend-node envoy xray-daemon