Amazon web services 当从实例X从NLB DNS进行curl时,内部网络LoadBalancer不会路由到实例X 我有一个内部网络负载平衡器(NLB)(解析为专用IP) 端口80上的NLB侦听器指向目标组。目标群体中只有一个实例10.141.80.140

Amazon web services 当从实例X从NLB DNS进行curl时,内部网络LoadBalancer不会路由到实例X 我有一个内部网络负载平衡器(NLB)(解析为专用IP) 端口80上的NLB侦听器指向目标组。目标群体中只有一个实例10.141.80.140,amazon-web-services,nlb,Amazon Web Services,Nlb,问题: 当我在实例10.141.80.140上和卷曲NLB的DNS时 我没有得到回应 我预计NLB将重定向到10.141.80.140,但它没有发生 当我在10.141.80.140上时,NLB DNS仅不重定向-重定向从同一子网中的其他实例起作用 详细信息: EC2 10.141.80.140周围的安全组是世界公开的、入站和出站的 当我从具有相同安全组和其他设置的同一子网中的另一个实例10.141.80.122卷曲NLB DNS时,NLB将正确解析为10.141.80.140 当我从实例中卷

问题:
当我在实例10.141.80.140上卷曲NLB的DNS时 我没有得到回应
预计NLB将重定向到10.141.80.140,但它没有发生
当我在10.141.80.140上时,NLB DNS仅不重定向-重定向从同一子网中的其他实例起作用

详细信息:

  • EC2 10.141.80.140周围的安全组是世界公开的、入站和出站的
  • 当我从具有相同安全组和其他设置的同一子网中的另一个实例10.141.80.122卷曲NLB DNS时,NLB将正确解析为10.141.80.140
  • 当我从实例中卷曲NLB DNS时,NLB应解析为10.141.80。140-NLB不解析为10.141.80.140
  • 当我从实例10.141.80卷曲实例ip 10.141.80.140时。140-我得到一个响应
  • 当我从实例10.141.80卷曲实例ip 10.141.80.140时。122-我得到一个响应
问题:
是否存在阻止NLB解析实例请求的因素, 哪个将路由回NLB侦听器目标组中的实例


这是一个众所周知的行为,我很乐意解释一下。网络负载平衡器引入了源地址保留功能-传入连接的原始IP地址和源端口保持不变。当目标应答请求时,VPC内部捕获该数据包并将其转发给NLB,NLB将其转发到其目的地

这种行为有一个副作用:当操作系统内核检测到出口数据包的目标地址是一个本地地址时,它会将该数据包直接转发给应用程序

例如,给定以下组件:

  • 我们有一个内部NLB和一个后端实例。两者都部署在子网10.0.0.0/24中
  • NLB具有IP 10.0.0.10和端口80上的侦听器,该侦听器将请求转发到端口8080
  • 后端实例的地址为10.0.0.55,并且有一个web服务器侦听端口8080。它有一个安全组,允许所有传入的本地通信

  • 如果实例试图与NLB建立通信;通信流程如下所示:

    • 该实例希望远程登录NLB:它请求针对端口80上的NLB DNS名称建立TCP连接。
      • 因为它是一个传出的通信,所以它从一个短暂的端口开始;实例发送一个SYN数据包(1):
        • 资料来源:10.0.0.55:40000
        • 目的地:10.0.0.10:80
      • NLB接收数据包并将其转发到后端实例(10.0.0.55:80)
      • 由于具有地址保留功能,后端实例将接收包含以下信息的SYN数据包:
        • 资料来源:10.0.0.55:40000
        • 目的地:10.0.0.55:80
      • 操作系统在内部路由数据包(因为其目的地是自己的机器),问题发生的时间如下:
        • 发起套接字期望从10.0.0.10:80(NLB)得到SYN_ACK
        • 但是,它从10.0.0.55:40000(实例本身)接收SYN_ACK
        • 操作系统将发送几次TCP_重传,直到超时
公共NLB不会发生这种情况,因为实例需要在VPC中进行NAT,才能使用其公共IP地址将请求发送到NLB。内核不会在内部转发数据包

最后,一种可能的解决方法是根据后端的IP地址而不是实例ID注册后端;使用此方法,NLB转发的流量将包含NLB内部IP作为源IP,从而禁用“源地址保留”功能。不幸的是,如果您使用自动缩放组启动实例,它将只能通过其ID注册启动的实例。对于ECS任务,将网络配置为“awsvpc”将强制NLB通过其IP注册每个目标