【问题标题】:AWS Application Load Balancer with ECS带有 ECS 的 AWS 应用程序负载均衡器
【发布时间】:2019-12-17 20:58:33
【问题描述】:

我有以下 AWS 设置:

  • 具有 2 个 EC2 实例的 ECS 集群,每个实例在不同 AZ 内的自己的子网中运行
  • 几个微服务只运行每个任务,因为它们是有状态的
  • 一个内部应用负载均衡器,每个微服务的目标组按端口映射

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

现在,如果我执行host internal-load-balancer,我会返回 2 个 IP 地址,一个用于运行在子网 1 中的负载均衡器,一个用于运行在子网 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/ 也有效

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

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

【问题讨论】:

  • FWIW 我在 AWS 中设置了一个基本的并行示例,我的示例正在运行,所以我认为没有任何理论问题。我唯一能想到的是 - 您的 EC2 实例上的安全组是否可以设置为允许基于其他 EC2 实例的安全组成员身份而不是 IP 地址进行访问?如果由于 sec 组成员身份而允许 10.0.0.10 访问 10.0.32.10 并且允许 10.0.32.0/19 但不允许 10.0.0.0/19 - 理论上可以这样做(我认为)。
  • 感谢您试用 :) 我刚刚在 StackOverflow (stackoverflow.com/questions/9257514/amazon-elb-in-vpc) 上遇到了这个问题,这似乎解决了我的问题 :D 所以我所做的就是将 LB 从私有子网对公众开放,现在它不知道有什么区别或为什么这是必要的......也许是 AWS 方面的一些错误,或者它应该以这种方式工作

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


【解决方案1】:

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

谁能向我解释为什么 ALB 需要位于公共子网中?

【讨论】:

    猜你喜欢
    • 2021-11-15
    • 2018-02-26
    • 2019-06-06
    • 2021-11-20
    • 2017-02-11
    • 1970-01-01
    • 2021-02-01
    • 2017-01-04
    • 2020-02-20
    相关资源
    最近更新 更多