AWS ECS如何将服务从一个容器调用到另一个容器

时间:2017-11-17 04:53:32

标签: amazon-web-services docker amazon-ec2 amazon-ecs

我有一个ECS群集,其中包含一个带有2个EC2实例的Auto Scaling组。此外,我有3个服务,每个服务都有自己的任务定义。每个EC2实例为每个服务运行一个docker容器。因此,我在每个EC2实例中都有3个docker容器。

每个docker容器只需运行一个spring boot应用程序。由于我有3个服务,所以我有3个春季启动应用程序。同样,一个容器只运行这3个Spring引导应用程序中的一个。每个应用程序都会在/ service1或/ service1 / resource1等URL下公开一个rest ful API,其中包括POST,GET等服务。 这里的一个重点是我在容器的主机中使用动态端口映射。

我在端口443上有一个外部(面向互联网)ALB,它有3个目标组。根据URL,请求将转到3个应用程序(或容器)中的一个。

我的问题是有时应用A需要向应用B发出http请求。我的EC2实例位于私有子网中,而我的ALB位于公有子网中。因此,如果我使用我的ALB从容器内部向另一个容器发出http请求,那么请求将通过NAT,并且因为NAT的公共IP不是安全组的一部分ALB然后它无法在端口443上连接。我有两种方法可以完成这项工作:

  • 在ALB白名单0.0.0.0/0的安全组中。我不想这样做,因为整个世界都可以访问。

  • 在ALB的安全组中,将NAT的公共IP列入白名单。我对这种方法不太确定。值得推荐吗?

我尝试实施的第三个选项是拥有第三个负载均衡器,一个内部负载均衡器。但是我在这里丢失了,根据AWS文档,您只能为您的服务分配1个负载均衡器。由于我们使用动态端口映射,因此我没有看到手动创建ALB并使用动态自动分配端口的方法。

你们如何在容器之间建立这种连接,一个容器消耗其他容器提供的服务?

作为最后评论,我使用云形成。无需从控制台手动设置。

谢谢,

1 个答案:

答案 0 :(得分:1)

您可以尝试使用/ 32掩码将网关公共IP列入白名单,作为主机。这是一种非常正常的方法,因为您已经通过ALB将端点公开到了公共互联网。您只需关心安全规则的更新,以防破坏或更改NAT网关,因为它的IP可能会更改。