使用 Application Load Balancer + EC2 Container Service 时,目标组端口是啥

Posted

技术标签:

【中文标题】使用 Application Load Balancer + EC2 Container Service 时,目标组端口是啥【英文标题】:What's the target group port for, when using Application Load Balancer + EC2 Container Service使用 Application Load Balancer + EC2 Container Service 时,目标组端口是什么 【发布时间】:2017-07-31 15:16:48 【问题描述】:

我正在尝试设置一个侦听端口 443 的 ALB,对随机端口上的 ECS Docker 容器进行负载平衡,假设我有 2 个具有相同任务定义的容器实例,侦听端口 30000 和 30001。

当我尝试在 AWS EC2 管理控制台中创建目标组时,有一个范围为 1-65535 的“端口”输入字段。 我应该放什么号码?

当我尝试在 AWS EC2 容器服务控制台中创建新服务以及连接到现有 ALB 的新目标组时,目标组“端口”没有输入字段。 创建后,导航到 EC2 控制台,新目标组的端口为“80”。 我必须在端口 80 上监听吗? 但是健康检查是针对“流量端口”的,即容器端口30000和30001,那么有什么意义呢?

【问题讨论】:

【参考方案1】:

事实证明,当与 ECS 结合使用时,目标组的端口没有任何意义。你不需要监听那个端口。

【讨论】:

该死的。我花了几个小时试图追查这一点。我确信他们需要该端口才能启动负载平衡器。然后我们不关心它。他们应该让它成为可选的。 我要备份@sethu。我正在使用 Terraform 来编排 ECS,包括目标组。您肯定仍然需要为目标组指定端口(例如 80)甚至协议。然而,它具有误导性,因为使用 ALB 的动态主机端口,目标组中的实例(目标)根本不使用指定的端口(例如 80)。他们改为使用 32769 之类的端口或临时端口范围内的端口。 还同意他们应该将端口设为可选(以及更多文档)。但是,@sethu 提到 ALB 仍然需要指定一个端口才能“启动”——这实际上很有趣,我想了解更多信息。现在在我看来,在目标群体上指定 80 分就像魔术一样。它有效,但我不知道为什么。我不知道在什么情况下我们应该将目标组端口设置为 80,在什么情况下设置为 443 等其他值,因为使用 ALB 动态主机端口,这个数字根本没有意义。【参考方案2】:

我自己在工作中遇到了这种情况。我注意到目标组端口和注册实例的端口不同。我通常将它们设置为相同的东西,所以想知道这到底是什么导致我进入这个线程。我在 AWS 文档上找不到好的答案,但在 Terraform 文档中找到了 aws_lb_target_group 资源:

port - (可选,强制使用新资源)目标接收流量的端口,除非在注册特定目标时被覆盖。

所以,我猜它只是使用的默认端口,除非你覆盖它。有道理。

【讨论】:

【参考方案3】:

我认为他指的是健康检查。如果您的 ELB 正在侦听端口 443,但您的目标组设置为端口 80,则目标组的每次运行状况检查都将尝试在端口 80 上发出请求,并被负载均衡器重定向到端口 443。这会导致 301 代码,这被认为是不健康的。只有 200 个代码应该被认为是健康的。那时,您要么一直拥有所有不健康的目标,要么将 301 添加到健康代码列表中,这会破坏健康检查的整个要点,因为它将始终为端口 80 返回 301。您不妨只匹配端口。

【讨论】:

使用动态端口时,应为“流量端口”设置健康检查,以确保使用动态端口。【参考方案4】:

目标组中的端口与自动缩放组一起使用,如果您打算使用那些您想从一开始就使用正确的端口。为什么?因为在创建目标组后无法更改它,如果端口设置错误,自动缩放将无法正常工作。

【讨论】:

那么你应该使用什么端口来“使自动缩放工作”?

以上是关于使用 Application Load Balancer + EC2 Container Service 时,目标组端口是啥的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的 Elastic Beanstalk 应用程序以使用 Application Load Balancer?

如何使用 .ebextensions 将 Application Load Balancer 固定响应添加到 AWS Elastic Beanstalk

使用 Application Load Balancer + EC2 Container Service 时,目标组端口是啥

AWS Application Load Balancer 将所有标头转换为小写

Socket.io + Nginx + AWS Application Load Balancer 连接在建立之前关闭

如何将 Application Load Balancer 用于具有多个端口映射的 ECS 服务?