AWS 使用 Fargate 对 ECS 服务的多个端口进行负载平衡

Posted

技术标签:

【中文标题】AWS 使用 Fargate 对 ECS 服务的多个端口进行负载平衡【英文标题】:AWS Load Balancing multiple ports for an ECS Service with Fargate 【发布时间】:2018-10-30 01:02:51 【问题描述】:

AWS 文档中提到需要使用 Classic Load Balancer 将 ECS 服务连接到多个端口:https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-load-balancing.html

但是在使用 ECS 和 Fargate 时,我收到 Classic Load Balancer 不支持网络模式 awsvpc 的错误消息:

是否无法使用 Fargate 对 ECS 服务的多个端口进行负载均衡?

【问题讨论】:

【参考方案1】:

文档指出无法将 Classic Load Balancer 与 Fargate 启动类型一起使用。

https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task-networking.html

具有使用 awsvpc 网络模式的任务的服务(例如,具有 Fargate 启动类型的服务)仅支持 Application Load Balancer 和 Network Load Balancer; 不支持经典负载均衡器。另外,当您为这些服务创建任何目标组时,您必须选择 ip 作为目标类型,而不是实例。这是因为使用 awsvpc 网络模式的任务与弹性网络接口相关联,而不是与 Amazon EC2 实例相关联。


https://docs.aws.amazon.com/AmazonECS/latest/developerguide/task_definition_parameters.html#network_mode

如果使用 Fargate 启动类型,则为 awsvpc network mode is required如果使用 EC2 启动类型,则可以使用任何网络模式。 如果网络模式设置为 none,则无法在容器定义中指定端口映射,并且任务的容器没有外部连接性。 host 和 awsvpc 网络模式为容器提供了最高的网络性能,因为它们使用 Amazon EC2 网络堆栈而不是桥接模式提供的虚拟化网络堆栈。


以下博客文章可能会帮助您找到适合您的案例的正确方法。

AWS 博客 - AWS Fargate 中的任务联网https://aws.amazon.com/blogs/compute/task-networking-in-aws-fargate/

【讨论】:

您是否知道要暴露多个负载均衡端口,或者使用不同的端口连接 ECS 服务?例如服务 1 暴露 80 端口,通过 1234 端口连接到服务 2。服务 2 暴露 443 端口。 我添加了一个指向 AWS 博客文章的链接,它可能会帮助您找到正确的网络和负载平衡方案。 感谢分享,我也看过这篇博文。它几乎可以处理所有用例——除了那些需要负载均衡器来处理多个端口的用例

以上是关于AWS 使用 Fargate 对 ECS 服务的多个端口进行负载平衡的主要内容,如果未能解决你的问题,请参考以下文章

AWS ECS Fargate ALB 错误(请求超时)

AWS CDK 并在现有 ALB 上创建 ECS/Fargate 服务。使用现有的监听器?

指定 aws ECS/Fargate 容器依赖项无法部署

AWS ECS Fargate - 任务未运行

AWS ECS Fargate 模式 - 自动扩展

AWS ECS Fargate 任务的静态出站 IP