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

Amazon web services AWS ECS如何将服务从一个容器调用到另一个容器,amazon-web-services,docker,amazon-ec2,amazon-ecs,Amazon Web Services,Docker,Amazon Ec2,Amazon Ecs,我有一个ECS集群,它有一个带有2个EC2实例的自动扩展组。我还有3个服务,每个服务都有自己的任务定义。每个EC2实例对每个服务运行一个docker容器。因此,我在每个EC2实例中有3个docker容器 每个docker容器只运行一个spring启动应用程序。因为我有3个服务,所以我有3个spring boot应用程序。同样,一个容器只运行这3个spring启动应用程序中的一个。每个应用程序在/service1或/service1/resource1等URL下公开一个rest-ful API,其

我有一个ECS集群,它有一个带有2个EC2实例的自动扩展组。我还有3个服务,每个服务都有自己的任务定义。每个EC2实例对每个服务运行一个docker容器。因此,我在每个EC2实例中有3个docker容器

每个docker容器只运行一个spring启动应用程序。因为我有3个服务,所以我有3个spring boot应用程序。同样,一个容器只运行这3个spring启动应用程序中的一个。每个应用程序在/service1或/service1/resource1等URL下公开一个rest-ful API,其中包含POST、GET等服务这里的一个要点是,我正在容器的主机中使用动态端口映射。

我在端口443上有一个外部(面向internet)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文档,您只能为您的服务分配一个负载平衡器。由于我们使用动态端口映射,我看不到手动创建ALB和使用动态自动分配端口的方法

你们如何在容器之间建立这种连接,其中一个容器使用另一个容器提供的服务

作为最后一条评论,我对所有人都使用云形成。没有从控制台手动设置


谢谢,

您可以尝试将您的nat网关公共IP列为具有/32掩码的主机的白名单。这是一种非常正常的方法,因为您已经通过ALB将端点公开到公共internet。在破坏或更改NAT网关的情况下,您只需要关心安全规则的更新,因为它的IP可能会更改。

我会选择此解决方案。我的NAT网关是我的体系结构的一部分,它正是为了允许私有资源ping互联网。从私有资源的角度来看,面向internet的ALB是internet中的一种资源。为了允许我的私人资源访问我的ALB,我将使我的ALB的安全组允许从我的NAT连接。