【问题标题】:Cannot connect to internet-facing NLB forwarding traffic to a private instance无法连接到面向 Internet 的 NLB 将流量转发到私有实例
【发布时间】:2019-03-14 19:01:54
【问题描述】:

我已经用以下配置配置了一个云

  1. 在两个可用区中具有公有子网和私有子网的 VPC。公共子网有一个互联网网关,私有子网有一个配置的 NAT 网关
  2. 面向 Internet 的网络负载均衡器允许在两个可用区中配置 TCP 流量
  3. 从负载均衡器转发流量的目标组
  4. 私有子网中的 EC2 实例配置了 haproxy 在端口 80 上侦听。它的安全组配置为在端口 80 上接受来自配置 NLB 的两个子网的 TCP 流量
  5. 将此实例添加到目标组,状态为健康

当我尝试访问 NLB DNS 时,它给了我 'Connection timed-out' 错误。我期待当我点击 NLB DNS 时,它应该将我转发到私有实例。我检查了许多 AWS 文档,例如 link,但仍然找不到解决此问题的方法。如果这还不够,请随时询问更多信息。

【问题讨论】:

    标签: amazon-web-services amazon-ec2 aws-load-balancer nlb


    【解决方案1】:

    它的安全组被配置为在端口 80 上接受来自配置了 NLB 的两个子网的 TCP 流量

    当通过 instance-id 注册目标时,面向 Internet 的 NLB 后面的实例的安全组需要允许来自 0.0.0.0/0 的流量 - 或者需要通过平衡器访问它们的任何公共 IP 地址范围 - - 不仅仅是平衡器的子网(运行状况检查需要这些子网)。

    如果您的目标类型是实例,请将规则添加到您的安全组,以允许从负载均衡器和客户端到目标 IP 的流量。

    https://aws.amazon.com/premiumsupport/knowledge-center/security-group-load-balancer/

    与 ALB 和 Classic 平衡器不同,当目标由 instance-id 配置时,NLB 流量具有外部客户端的源地址,这是安全组匹配的地址。

    【讨论】:

    • 成功了。我在实例的安全组中配置了我的 ip。因此,如果我想允许从任何地方访问 NLB,我必须在安全组中添加 0.0.0.0。我正在尝试创建一个安全连接,其中我的实例是完全私有的。如果我从任何地方为此实例在私有子网中打开 HTTP 流量,我将如何满足安全要求?
    • @bot 如果您的实例位于私有子网上并且没有公共 IP 地址(没有意义 - 它位于私有子网上),那么此配置可以实现:实例是只能通过 NLB 访问。当然,如果您使用 HTTP,HAProxy 也可以在 ALB 后面完美运行,并且通过该设置,您可以使用更传统的设置,其中平衡器有自己的 SG,而实例 SG 只允许来自 ALB 的流量。这里不需要 NLB,除非你正在做一些高级的事情,比如 mTLS。
    • 感谢您提供的额外信息。很有帮助。
    • 非常感谢您提供的信息,这些信息在 AWS 文档中并不容易找到。老实说,我不明白为什么我的安全组需要允许来自 NLB 和客户端的流量。
    • 因为 NLB 转发保留客户端 IP 地址的请求
    猜你喜欢
    • 1970-01-01
    • 2019-07-28
    • 2017-07-22
    • 2020-11-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 1970-01-01
    相关资源
    最近更新 更多