带有ECS的AWS Application Load Balancer

时间:2019-08-10 11:04:54

标签: amazon-web-services amazon-ec2 amazon-ecs aws-application-load-balancer

我具有以下AWS设置:

  • 具有2个EC2实例的ECS集群,每个实例在各自的子网中运行,这些实例位于不同的可用区中
  • 几个微服务,它们仅在有状态时才运行每个任务
  • 一个内部应用程序负载均衡器,其中每个端口按端口映射微服务的目标组

AWS Setup

现在为以下情况成像: 服务1希望与在另一个AZ中的另一个EC2实例上运行的服务2进行通信。作为服务2的URL,我使用端口为internal-load-balancer:8082/path的负载均衡器的DNS名称。这是必要的,因为我正在使用滚动部署,因此每次部署后微服务都会在两个EC2实例之间移动。

现在,如果我执行host internal-load-balancer,我将获得2个IP地址,其中一个IP地址用于在子网1中运行的负载均衡器,另一个IP地址在子网2中运行。

  • 10.0.0.11
  • 10.0.32.11

如果我现在在服务1上执行以下curl命令:

  • curl 10.0.0.11:8082/我收到了网关超时
  • curl 10.0.32.11:8082/可以正常工作,我得到200欧元
  • curl 10.0.32.10:8082/也有效

那么,如果我在同一个子网而不是另一个子网中使用负载均衡器,为什么在地狱中也能正常工作呢?如果我直接联系另一个可用区中的EC2实例,它也可以工作。问题是DNS记录解析为两个IP地址,而微服务只是随机使用其中一个,因此我的请求中有一半工作,另一半超时。

那么我在这里做错了什么??? 在此先感谢您的支持:)

1 个答案:

答案 0 :(得分:0)

所以看来我找到了解决此问题的方法here。 基本上,我为解决此问题所做的工作是将应用程序负载平衡器移至连接了Internet网关的公共子网,现在这两个负载平衡器都正常工作了……我不知道为什么它只能以这种方式工作,但是我很高兴我找到了解决这个问题的方法:)

这里有谁可以向我解释为什么ALB必须位于公共子网中?