使用 Application Load Balancer + EC2 容器服务时,目标组端口是什么

What's the target group port for, when using Application Load Balancer + EC2 Container Service

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

当我尝试在 AWS EC2 管理控制台中创建目标组时,有一个范围为 1-65535 的 "port" 输入字段。 我应该在那里输入什么数字?

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

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

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

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

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

port - (Optional, Forces new resource) The port on which targets receive traffic, unless overridden when registering a specific target.

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