目前,我正在尝试弄清楚如何配置 ECS 服务之间的通信。我计划进行以下设置:
- 后端服务
- 前台服务
- 一个应用程序负载均衡器
我有以下选择:
- 为 ALB 配置 2 个目标组,并根据路径转发请求。例如,
alb.amazonaws.com/backend/
将请求转发给backend-target-group
将请求提供给后端 ECS 任务的请求。 - 在每个 ECS 任务中运行一个脚本,该脚本将使用 AWS cli 和服务发现检索正在运行的任务的 IP 地址。不确定这是否可行,而且测试起来相对困难。
它们似乎都不是正确的方法。由于财务限制,我不想为每个服务使用单独的 ALB。我在想的是 ECS 服务的某种内部 DNS 名称。我检查了以下链接,但无法弄清楚如何将其应用于我的案例。
- https://docs.aws.amazon.com/cloud-map/latest/dg/what-is-cloud-map.html
- https://docs.aws.amazon.com/AmazonECS/latest/developerguide/service-discovery.html
- https://aws.amazon.com/blogs/aws/amazon-ecs-service-discovery/
- https://aws.amazon.com/blogs/compute/task-networking-in-aws-fargate/
相关问题: AWS ECS 容器通信
因此,理想情况下,我想要实现的是:为后端服务提供一个内部 DNS 名称,并将来自前端服务的请求发送到后端。
你几乎已经涵盖了正确的选项。
ECS 服务发现将是我的首选——所有容器将自动在服务发现域中注册,并且可以通过这种方式访问。简单、透明、便宜。
为不同目标组提供不同路径的内部应用程序负载均衡器将是我的第二选择。您不想在一个 ALB 上混合面向外部的流量和内部流量,但是拥有两个(内部和外部)是一种完全有效的架构。可能值得多花 20 美元/月左右再买一个 ALB。
AWS App Mesh - 我没有亲自使用过,但看起来它可以满足您的需求。标题为您的所有服务的应用程序级网络
API 网关也是一种选择。您的后端可能需要进行一些细微的更改才能使用,但没什么大不了的。
希望有帮助:)