AWS ECS:在单个服务下负载平衡多个容器
AWS ECS: Load Balancing multiple containers under a single service
假设我有一个包含 2 个 nginx 容器的任务定义。现在,当我使用此任务定义创建服务(EC2 启动类型)并尝试向其添加 ALB 时,我只能选择一个“容器以进行负载平衡”。我如何设置它以便我也能够使用相同的 ALB 对另一个容器进行负载平衡?
我尝试过并理解的是:假设我 运行 2 个任务在单个服务下使用上述定义。因此将有 4 个容器 运行(container_1 和 container_2 各 2 个)。当我在服务 ALB 创建过程中选择 container_1 进行负载平衡时,ECS 将创建一个目标组并将 container_1 的实例和动态端口作为目标。然后,该目标组将映射到 ALB 的规则。这对我有用。
但是现在如果我想为我的另一组容器设置规则,我看到的唯一方法是通过硬编码 container_2 的容器的动态端口来自己创建目标组,这是不太理想。
我现在能想到的一个用例是假设一个容器是 运行 前端,另一个是 运行 后端。所以我希望 url 像 /my-app/pages/* 去前端容器,/my-app/apis/* 去后端容器。我敢肯定还有更好的 examples/use 案例,但这就是我现在能想到的。
那么,我该如何设置呢?
谢谢!
让我们遵循 AWS 的文档和建议,了解为什么一个任务中允许使用多个容器。来自文档 [1]
When the following conditions are required, we recommend that you
deploy your containers in a single task definition:
Your containers share a common lifecycle (that is, they are launched
and terminated together).
Your containers must run on the same underlying host (that is, one
container references the other on a localhost port).
You require that your containers share resources.
Your containers share data volumes.
Otherwise, you should define your containers in separate tasks
definitions so that you can scale, provision, and deprovision them
separately.
[1] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html
对于前端和后端应用程序的用例,两种不同的服务是正确的方法。 2 个 ECS 服务,每个服务有 1 个任务定义和 1 个容器。
至于两者应该如何相互集成,通过URL或服务名称(微服务网格)是另一个话题和讨论。
假设我有一个包含 2 个 nginx 容器的任务定义。现在,当我使用此任务定义创建服务(EC2 启动类型)并尝试向其添加 ALB 时,我只能选择一个“容器以进行负载平衡”。我如何设置它以便我也能够使用相同的 ALB 对另一个容器进行负载平衡?
我尝试过并理解的是:假设我 运行 2 个任务在单个服务下使用上述定义。因此将有 4 个容器 运行(container_1 和 container_2 各 2 个)。当我在服务 ALB 创建过程中选择 container_1 进行负载平衡时,ECS 将创建一个目标组并将 container_1 的实例和动态端口作为目标。然后,该目标组将映射到 ALB 的规则。这对我有用。
但是现在如果我想为我的另一组容器设置规则,我看到的唯一方法是通过硬编码 container_2 的容器的动态端口来自己创建目标组,这是不太理想。
我现在能想到的一个用例是假设一个容器是 运行 前端,另一个是 运行 后端。所以我希望 url 像 /my-app/pages/* 去前端容器,/my-app/apis/* 去后端容器。我敢肯定还有更好的 examples/use 案例,但这就是我现在能想到的。
那么,我该如何设置呢?
谢谢!
让我们遵循 AWS 的文档和建议,了解为什么一个任务中允许使用多个容器。来自文档 [1]
When the following conditions are required, we recommend that you deploy your containers in a single task definition:
Your containers share a common lifecycle (that is, they are launched and terminated together).
Your containers must run on the same underlying host (that is, one container references the other on a localhost port).
You require that your containers share resources.
Your containers share data volumes.
Otherwise, you should define your containers in separate tasks definitions so that you can scale, provision, and deprovision them separately.
[1] https://docs.aws.amazon.com/AmazonECS/latest/developerguide/application_architecture.html
对于前端和后端应用程序的用例,两种不同的服务是正确的方法。 2 个 ECS 服务,每个服务有 1 个任务定义和 1 个容器。
至于两者应该如何相互集成,通过URL或服务名称(微服务网格)是另一个话题和讨论。