使用 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 将所有标头转换为小写