AWS应用程序负载均衡器健康检查失败

3
我有一个ECS Fargate集群,使用ALB进行流量路由。Docker容器正在监听9000端口。
我的容器可以通过ALB的DNS名称以https方式访问。这个运作正常。但是它们不断地从目标组中停止/注销,并且重新启动后立即进入不健康状态。
ALB只在443上有一个侦听器。安全组已设置为sg-alb允许对sg-fargate端口9000的出站流量,而sg-fargate允许来自sg-alb端口9000的所有入站流量。
目标组也设置为使用端口9000。
我不确定问题出在哪里,也不知道如何调试。
一切都是用CDK设置的。不确定是否相关。

我在两个安全组中都添加了“允许从/到任何地方的所有流量”规则。现在,我只在两个可用区/子网中的一个中获得了健康实例。另一个可用区中的实例仍然显示为不健康并被排除。 - Saskia
1个回答

4
事实证明这不是安全组的问题。当我更改了安全组时,它只是巧合地在那个时候起作用了。
似乎容器启动得不够快,无法在alb启动健康检查时接受连接。
有帮助的措施:
- 将healthCheckGracePeriod改为两分钟 - 调整目标组的健康检查参数interval、unhealthyThreshold、healthyThreshold
此外,在我的应用程序日志中,看起来服务会同时收到两个健康检查请求。默认情况下,unhealthy threshold设置为2。因此,也许仅在一次健康检查后该服务才被标记为不健康。

嗨@Saskia,你能分享一下你用于健康检查参数的配置吗?我的配置是interval=5分钟,timeout=1分钟,healthyThresholdCount=5,unhealthyThresholdCount=3。应用程序运行良好约30分钟,然后即使任务正常运行且日志中没有问题,健康状况也开始下降。我使用了与您相同的AWS资源,包括ECS Fargate集群和ALB以及必要的安全组。需要提到的是,在健康状况良好的30分钟内,应用程序运行良好并响应API请求。 - horizon7
@horizon7 对不起,我们不再遇到这个问题了。所以我没有这些数字了。但是你的问题似乎与我的不同,因为我的服务甚至无法正确启动。 - Saskia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接