AWS ECS,ECS实例未注册到ALB目标组

时间:2019-09-23 19:17:24

标签: amazon-web-services amazon-ecs amazon-elb

我创建了ECS服务,它运行了1个ecs实例,我可以看到该实例已注册为负载均衡器的目标。

现在,我通过触发Auto Scaling组(仅增加所需的实例数)来启动新实例。

启动实例并将其添加到ECS集群中。 (我可以在“ ECS实例”选项卡上看到它) 但是该实例未添加到ALB目标。 (我期望在下图中看到2个实例,但我只看到1个)

s

我可以像下面那样编辑AutoScalingGroup的目标组

enter image description here

然后我看到以下内容。

enter image description here

但是健康检查失败。看来80端口无法到达。 尽管我在实例的安全组中开放了80端口供公众使用。 (此外,从ecs服务创建的实例使用动态端口映射,但ALS创建的实例不使用动态端口映射)

因此AutoScalingGroup可以启动新实例,但是我的负载均衡器从不向新实例提供流量。

我确实尝试过https://aws.amazon.com/premiumsupport/knowledge-center/troubleshoot-unhealthy-checks-ecs/?nc1=h_ls,它表明我可以通过curl -v http://${IPADDR}/health之类的东西从主机连接到Docker容器的端口80。

因此,一定是主机端口80出现问题(负载均衡器无法连接到它)。 但这也是安全组设置没有错的情况,因为工作实例和该非工作实例正在使用同一SG。

  • 编辑

因为我使用了动态映射,所以我的Web服务器在某个随机端口上运行。 如您所见,由ecs服务启动的实例已使用随机端口将其自身注册到目标组。
但是,由ALB启动的实例已通过端口80注册到目标组。

2 个答案:

答案 0 :(得分:0)

您似乎知道根本原因,这是端口80无法通过运行状况检查的原因,这就是为什么它从未添加到ALB的原因。这是您可以尝试的

首先,检查您的服务正在侦听新主机上的端口80。您可以使用netcat

之类的命令
nv -v localhost 80

一旦您知道该服务正在侦听,建议的允许ALB连接到主机的方法是为实例添加一个安全组入站规则,以允许来自端口80上的ALB安全组的流量

答案 1 :(得分:0)

如果实例不正常,则不会将其添加到目标组。因此,您需要先修复健康检查。

从您的第一个实例开始,您映射的端口是32769,所以我假设这是同一目标组,并且如果是同一应用程序,则新实例中的端口应该是32769

当卷曲IP端点curl -I -v http://${IPADDR}/health.时,HTTP状态代码为200,如果它是200,那么如果不是200,则应该是健康的,然后更新后端http状态代码,也可以更新运行状况检查HTTP状态代码。

我假设您也在两个实例中都运行ECS,所以ECS针对每个ECS服务创建目标组,您是否正在运行一些需要在AS组中使用目标组的混合服务?如果您正在运行动态端口,则请删除流量端口的运行状况检查路径。

现在,如果我们查找502网关错误的官方可能原因

动态端口映射是Amazon Elastic Container Service(Amazon ECS)中容器实例的功能

  

使用应用程序负载平衡器的动态端口映射使操作更加容易   在Amazon ECS的同一Amazon ECS服务上运行多个任务   集群。

     

使用Classic Load Balancer,您必须静态映射端口号   在容器实例上。经典负载均衡器不允许您   在同一实例上运行任务的多个副本,因为   端口冲突。应用程序负载平衡器使用动态端口映射   这样您就可以在同一服务上通过单个服务运行多个任务   容器实例。

您创建的目标组不适用于动态端口,您必须将目标组与ECS服务绑定。

dynamic-port-mapping-ecs

HTTP 502:错误的网关 可能的原因:

  • 负载均衡器在尝试建立连接时从目标接收到TCP RST。

  • 在尝试建立连接时,负载平衡器收到了来自目标的意外响应,例如“ ICMP目标不可达(主机不可达)”。检查是否允许从负载均衡器子网到目标端口上的目标的流量。

  • 当负载均衡器对目标有未决请求时,目标使用TCP RST或TCP FIN关闭了连接。检查目标的保持活动时间是否短于负载均衡器的空闲超时值。

  • 目标响应格式错误或包含无效的HTTP标头。

  • 负载均衡器在连接到目标时遇到SSL握手错误或SSL握手超时(10秒)。

  • 经过注销对象的请求正在处理的请求,其注销延迟时间已过。增加延迟时间,以便完成冗长的操作。 http-502-issues