use*_*782 8 amazon-web-services amazon-ecs amazon-elb
我拥有公开多个端口的服务,并且可以与kubernetes正常工作,但是现在我们将其移至AWS ECS。似乎我只能通过Load Balancer公开端口,并且即使docker定义了多个端口,我也只能选择一个端口,每个服务/任务只能使用1个端口
Add to load balancer按钮允许添加一个端口。一旦添加,就没有按钮添加第二个端口。
有没有比通过第二个代理服务公开第二个端口更好的工作环境?
更新:我使用基于Fargate的服务。
Eth*_*hit 11
您不需要任何解决方法,AWS ECS 现在支持同一 ECS 服务中的多个目标组。这对于您希望公开容器的多个端口的用例很有帮助。
目前,如果您要创建指定多个目标组的服务,您必须使用 Amazon ECS API、开发工具包、AWS CLI 或 AWS CloudFormation 模板创建服务。创建服务后,您可以使用 AWS 管理控制台查看服务和注册到该服务的目标组。
例如,Jenkins 容器可能会为 Jenkins Web 界面公开端口 8080,为 API 公开端口 50000。
参考:
https://docs.aws.amazon.com/AmazonECS/latest/developerguide/register-multiple-targetgroups.html
我不能说这将是一个不错的解决方法,但是我正在开发一个项目,需要使用AWS ECS运行Ejabberd,但是在将服务端口绑定到负载均衡器时发生了相同的问题。
我使用的是terraform,由于AWS ECS的这一限制,我们同意为每个实例运行一个容器来解决端口问题,因为我们应该公开两个端口。
如果您不想为容器分配动态端口,并且想为每个实例运行一个容器,那么该解决方案肯定会起作用。
创建一个目标组并指定容器的第二个端口。
转到ECS集群的AutoScalingGroups
在ECS集群的Autoscaling组中编辑并添加新创建的目标组
因此,如果您扩展到两个容器,则意味着将有两个实例,因此新启动的实例将注册到第二个目标组,而Autoscaling组将负责该操作。在我看来,这种方法效果很好,但是无需考虑任何事情。
不要在目标中绑定主端口,最好在ALB服务中绑定主端口。这种方法的主要优点是,如果您的容器无法响应AWS运行状况检查,则该容器将自动重启。作为目标组健康检查不会重新创建您的容器。
当Docker容器中有动态端口公开时,此方法将不起作用。
AWS应该更新其ECS代理以处理这种情况。
| 归档时间: |
|
| 查看次数: |
233 次 |
| 最近记录: |