要让应用程序中的 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