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

Posted

技术标签:

【中文标题】如何将 Application Load Balancer 用于具有多个端口映射的 ECS 服务?【英文标题】:How to use Application Load Balancer for an ECS Service with multiple port mappings? 【发布时间】:2017-02-20 18:59:47 【问题描述】:

我希望能够使用 ALB (ELBv2) 将流量路由到由给定服务的任务公开的多个端口映射。

例子--

服务 A 由 1 个使用任务定义 B 运行的任务组成。

任务定义 B 有一个“容器”,它在内部在两个不同的端口号(端口 8000 和端口 9000,都是 TCP)上运行两个守护进程。因此,任务定义 B 有两个端口需要映射到 ALB。

我不太担心 ALB 公开的端口(它们不必是 8000 和 9000,但如果是的话会有所帮助)。

my-lb-dns.com:8000 -> myservice:8000 my-lb-dns.com:9000 -> myservice:9000

关于如何创建多个听众和目标群体来实现这一目标的任何想法?控制台 UI 中的任何内容都不允许我这样做,而且 API 也不是很有帮助。

非常感谢!

【问题讨论】:

嗨@ultimoo,我正在为同样的情况而苦苦挣扎,你设法解决了吗? @shmish111 不,从今天开始,您不能让 ecs 服务通过负载均衡器公开多个端口。 嗨@ultimoo,我也有类似的场景——尽管不涉及应用程序负载平衡——使用Apache Zookeeper。每个 Zookeeper 实例需要三个端口用于三个不同的目的(端口 2181、2888、3888)。正是通过这些端口,这些 Zookeeper 实例的集群(通常有 3 到 5 个)相互通信。但是,如果正如您所说(并且正如我在 AWS GUI 上看到的),ECS 容器无法将更多该端口映射到主机,我怀疑这也行不通。我在这里的结论是否正确? 是的,你是对的。 【参考方案1】:

在与 AWS 支持人员交谈后,ECS 服务似乎面向预计只公开一个端口的微服务。 不支持让 ECS 服务使用 Application Load Balancer 来映射两个或更多端口。

当然,可以通过配置相应的目标组等手动添加额外的负载均衡器,但ECS不会在服务更新或扩容时自动更新配置,也不会在底层容器实例发生变化时自动更新配置。

【讨论】:

以上是关于如何将 Application Load Balancer 用于具有多个端口映射的 ECS 服务?的主要内容,如果未能解决你的问题,请参考以下文章

AWS CloudFormation Application Load Balancer - 如何将 HTTP 侦听器重定向到 HTTPS 侦听器?

如何将 AWS Application Load Balancer 路由到托管在同一 EC2 实例上的适当网络服务器?

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

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

将 https 侦听器添加到 AWS Application Load Balancer 时出现问题

分库分表后如何部署上线?