热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

使用AWSECS服务和ElasticLoadBalancer向公众开放多个端口

如何解决《使用AWSECS服务和ElasticLoadBalancer向公众开放多个端口》经验,为你挑选了2个好方法。

我拥有公开多个端口的服务,并且可以与kubernetes正常工作,但是现在我们将其移至AWS ECS。似乎我只能通过Load Balancer公开端口,并且即使docker定义了多个端口,我也只能选择一个端口,每个服务/任务只能使用1个端口

Add to load balancer按钮允许添加一个端口。一旦添加,就没有按钮添加第二个端口。

有没有比通过第二个代理服务公开第二个端口更好的工作环境?

更新:我使用基于Fargate的服务。



1> 小智..:

我在为每个实例创建多个容器时遇到了这个问题,而第二个容器却没有启动,因为它使用了taskdefinition中定义的相同端口。

我们所做的是,在这些容器之上创建了一个应用程序负载平衡器,并删除了硬编码端口。当应用程序负载平衡器下没有获得预定义的端口时,它将执行的操作是:使用动态端口映射功能。容器将出现在随机端口上,并驻留在一个目标组中,负载均衡器将自动将请求发送到这些端口。

可以在这里找到更多详细信息



2> Adiii..:

我不能说这将是一个不错的解决方法,但是我正在开发一个项目,需要使用AWS ECS运行Ejabberd,但是在将服务端口绑定到负载均衡器时发生了相同的问题。

我使用的是terraform,由于AWS ECS的这一限制,我们同意为每个实例运行一个容器来解决端口问题,因为我们应该公开两个端口。

如果您不想为容器分配动态端口,并且想为每个实例运行一个容器,那么该解决方案肯定会起作用。

    创建一个目标组并指定容器的第二个端口。

    转到ECS集群的AutoScalingGroups

    在ECS集群的Autoscaling组中编辑并添加新创建的目标组

因此,如果您扩展到两个容器,则意味着将有两个实例,因此新启动的实例将注册到第二个目标组,而Autoscaling组将负责该操作。在我看来,这种方法效果很好,但是无需考虑任何事情。

不要在目标中绑定主端口,最好在ALB服务中绑定主端口。这种方法的主要优点是,如果您的容器无法响应AWS运行状况检查,则该容器将自动重启。作为目标组健康检查不会重新创建您的容器。

当Docker容器中有动态端口公开时,此方法将不起作用。

AWS应该更新其ECS代理以处理这种情况。


推荐阅读
author-avatar
注定的等待幸福的到来
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有