您根本不需要为 X-Ray Docker 容器守护程序使用负载均衡器,因为流量仅来自集群 EC2 容器。X-Ray 容器的 Healthcheck 可以使用 AWS ECS Healthcheck本身来完成。
根据论坛的回答,您可以在容器健康检查上配置 netstat,这将确保如果 udp 端口未被守护程序容器打开,则 ECS 代理将重新启动容器。
以下是您在 ECS 任务定义中提供的 HealthCheck 命令。
CMD-SHELL, netstat -aun | grep 2000 > /dev/null; if [ 0 != $? ]; then exit 1; fi;
这是设置和结果。
笔记 -
如果您正在构建 X-Ray Docker 映像,请确保netstat
在 Dockerfile 中包含实用程序,否则 health 命令将失败。
示例 - 如果您使用的是本文档中提供的 Dockerfile,那么您需要将net-tools
包添加到您的 X-Ray 容器映像中。
以下是我更新的 Dockerfile,它添加net-tools
到图像中。
FROM ubuntu:16.04
RUN apt-get update && apt-get install -y --force-yes --no-install-recommends apt-transport-https curl ca-certificates wget net-tools && apt-get clean && apt-get autoremove && rm -rf /var/lib/apt/lists/*
RUN wget https://s3.dualstack.us-east-2.amazonaws.com/aws-xray-assets.us-east-2/xray-daemon/aws-xray-daemon-3.x.deb
RUN dpkg -i aws-xray-daemon-3.x.deb
CMD ["/usr/bin/xray", "--bind=0.0.0.0:2000"]
EXPOSE 2000/udp