首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于UDP ECS服务的NetworkLoadBalancer健康检查

基于UDP ECS服务的NetworkLoadBalancer健康检查
EN

Stack Overflow用户
提问于 2019-08-28 19:33:20
回答 4查看 1.7K关注 0票数 10

我正在尝试部署一个只使用UDP端口的ECS服务。通过NetworkLoadBalancers增加了对UDP负载平衡的支持,所以我已经部署了允许为任务分配动态主机端口的服务,并使用适当的侦听器和目标组设置了北草坪会议大楼。

我遇到的问题是,健康检查显然是北草坪会议大楼强制性的,而且必须是基于TCP的。对于健康检查端口,可以保留默认的“目标”端口(这对于动态主机端口分配很好),也可以指定端口。我不能做的是为TCP公开一个与负载均衡器目标UDP端口不同的端口。我可以让我的容器在同一个端口上监听UDP的生产和TCP的健康检查,但是任务定义似乎不允许这样做,尽管Docker很好地支持它。

这似乎使UDP北草坪会议大楼对ECS服务毫无用处,除非我遗漏了什么?我想出的唯一选择是使用静态配置的主机端口,这样我就可以在受控主机端口上公开TCP的第二个端口,并将其作为北草坪会议大楼健康检查的目标。问题是,由于不能在一个实例上运行多个任务,我们现在失去了ECS的所有可伸缩性好处。

EN

回答 4

Stack Overflow用户

发布于 2020-07-16 06:21:19

票数 1
EN

Stack Overflow用户

发布于 2021-04-06 15:14:55

您可以做的是在您的UDP容器的一侧设置一个sidecar容器,该容器提供TCP端点以进行健康检查。

下面是在我们的北草坪会议大楼目标组中运行的服务的ECS任务定义的截断示例:

代码语言:javascript
复制
{
    "containerDefinitions": [
        {
            "image": "[your-udp-image]",
            "essential": true,
            "portMappings": [
                {
                    "containerPort": 5008,
                    "protocol":"udp"
                }
            ]
        },
        {
            "image": "[your-tcp-health-check-image]",
            "essential": true,
            "portMappings": [
                {
                    "containerPort": 5006,
                    "protocol":"tcp"
                }
            ],
            "healthCheck": {
                "command": [ "CMD-SHELL", "curl -f http://localhost:5006 || exit 1" ],
                "interval": 10,
                "timeout": 5,
                "retries": 3,
                "startPeriod": 120
            }
        }
    ]
}

然后,目标组的健康检查设置可以指向健康检查容器的TCP路径和端口。

票数 1
EN

Stack Overflow用户

发布于 2022-06-17 06:28:16

下面是@Matt Fiocca的答案,下面是用于为我的UDP ECS服务提供TCP健康检查端点的sidecar容器定义。它是一个1MB的小型web服务器,它总是为每个请求发送一个HTTP 200到端口8080。

代码语言:javascript
复制
    {
        "name": "healthcheck",
        "image": "busybox:latest",
        "essential": true,
        "portMappings": [
            {
                "containerPort": 8080,
                "hostPort": 8080,
                "protocol": "tcp"
            }
        ],
        "entryPoint": ["sh", "-c"],
        "command": [
            "while true; do { echo -e 'HTTP/1.1 200 OK\r\n'; echo 'ok'; } | nc -l -p 8080; done"
        ]
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57698978

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档