Amazon web services aws ECS,ECS实例未注册到ALB目标组
我创建了ECS服务,运行了1个ECS实例,可以看到该实例注册为负载均衡器的目标 现在我触发一个自动缩放组(通过增加所需的实例数)来启动一个新实例 实例已启动并添加到ECS集群。(我可以在ECS实例页签上看到) 但实例未添加到ALB目标。(我希望在下图中看到2个实例,但我只看到1个) 我可以编辑AutoScalingGroup的目标组,如下所示 然后我看到了以下内容 但是健康检查失败了。似乎无法连接到80端口。 尽管我在实例的安全组中为公众打开了端口80。(另外,ecs服务创建的实例使用动态端口映射,但ALS创建的实例不使用) 所以AutoScalingGroup可以启动新实例,但我的负载平衡器从不向新实例提供流量 我确实试过了,它显示我可以通过类似于Amazon web services aws ECS,ECS实例未注册到ALB目标组,amazon-web-services,amazon-ecs,amazon-elb,Amazon Web Services,Amazon Ecs,Amazon Elb,我创建了ECS服务,运行了1个ECS实例,可以看到该实例注册为负载均衡器的目标 现在我触发一个自动缩放组(通过增加所需的实例数)来启动一个新实例 实例已启动并添加到ECS集群。(我可以在ECS实例页签上看到) 但实例未添加到ALB目标。(我希望在下图中看到2个实例,但我只看到1个) 我可以编辑AutoScalingGroup的目标组,如下所示 然后我看到了以下内容 但是健康检查失败了。似乎无法连接到80端口。 尽管我在实例的安全组中为公众打开了端口80。(另外,ecs服务创建的实例使用动态
curl-vhttp://${IPADDR}/health
的方式将端口80从主机连接到docker容器
所以一定是主机端口80出了问题(负载平衡器无法连接到它)。
但安全组设置也没有错误,因为工作实例和非工作实例使用相同的SG
- 编辑
但是,ALB启动的实例已使用端口80将自身注册到目标组。您似乎知道根本原因,即端口80未通过运行状况检查,这就是它从未添加到ALB的原因。这是你可以尝试的 首先,检查您的服务是否正在侦听新主机上的端口80。您可以使用netcat之类的命令
nv -v localhost 80
一旦您知道服务正在侦听,允许ALB连接到主机的建议方法是为您的实例添加安全组入站规则,以允许来自端口80上ALB安全组的流量。如果实例不健康,则不会将其添加到目标组。所以你需要先解决健康检查问题 从第一个实例开始,映射的端口是
32769
,因此我假设如果这是同一个目标组,并且是同一个应用程序,那么新实例中的端口应该是32769
当您卷曲IP端点时curl-I-v http://${IPADDR}/health。
是http状态代码是200
,如果是200
,则应该是健康的,如果不是200
,则更新后端http状态代码,或者您可以更新健康检查http状态代码
我假设您在这两个实例中都在运行ECS,所以ECS会针对每个ECS服务创建目标组,您是否在AS组中运行一些需要目标组的混合服务?如果您正在运行dynamic port,请删除流量端口的运行状况检查路径
现在,如果我们看看502坏网关的官方可能原因
动态端口映射是Amazon弹性容器服务(Amazon ECS)中容器实例的一项功能。
使用应用程序负载平衡器的动态端口映射使其更容易
在Amazon ECS上的同一Amazon ECS服务上运行多个任务
集群
使用经典的负载平衡器,您必须静态映射端口号
在容器实例上。经典的负载平衡器不允许您
在同一实例上运行任务的多个副本,因为
港口冲突。应用程序负载平衡器使用动态端口映射
因此,您可以在同一个服务器上从单个服务运行多个任务
容器实例
您创建的目标组将无法使用动态端口,您必须将目标组与ECS服务绑定
HTTP 502:坏网关
可能原因:
- 负载平衡器在尝试建立连接时从目标接收到TCP RST
- 负载平衡器在尝试建立连接时收到来自目标的意外响应,例如“ICMP目标不可访问(主机不可访问)”。检查是否允许从负载平衡器子网到目标端口上的目标的通信量
- 当负载平衡器对目标有未完成的请求时,目标关闭了与TCP RST或TCP FIN的连接。检查目标的保持活动持续时间是否短于负载平衡器的空闲超时值
- 目标响应格式错误或包含无效的HTTP标头
- 负载平衡器在连接到目标时遇到SSL握手错误或SSL握手超时(10秒)
- 由已取消注册的目标处理的请求经过的取消注册延迟期。增加延迟时间,以便完成冗长的操作。