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

Per*_*osh 5 amazon-ec2 amazon-web-services amazon-ecs docker

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

每个泊坞窗容器仅运行一个spring boot应用程序。由于我有3个服务,所以我有3个Spring Boot应用程序。同样,一个容器仅运行这3个Spring Boot应用程序之一。每个应用程序都在/ service1或/ service1 / resource1之类的URL下公开一个休息的API,其中包含POST,GET等服务。这里重要的一点是我正在容器的主机中使用动态端口映射。

我在端口443上有一个外部(面向Internet)ALB,它具有3个目标组。根据URL,请求将转到3个应用(或容器)之一。

我的问题有时是应用A需要向应用B发出http请求。我的EC2实例位于私有子网中,而ALB则位于公共子网中。因此,如果我使用自己的ALB将HTTP请求从一个容器内部发送到另一个容器,那么将发生该请求将通过NAT,并且由于NAT的公共IP不属于ALB的安全组,因此它将无法在端口443上进行连接。我有2种方法可以使这项工作:

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

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

我尝试实现的第三个选项是拥有第三个负载均衡器,即内部负载均衡器。但是我在这里迷路了,根据AWS文档,您只能为您的服务分配1个负载均衡器。而且由于我们使用的是动态端口映射,所以我看不到手动创建ALB并使用动态自动分配端口的方法。

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

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

谢谢,

Rom*_*kin 3

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