当我在公共子网中具有ELB和NAT网关并将流量分配到专用子网中的三个节点时,数据包如何流动?

时间:2019-05-23 07:48:33

标签: amazon-web-services amazon-elb amazon-vpc

我想知道是否有人可以为我回答问题?

我现在的理解是:

  1. 客户端发出请求,数据包首先到达公共子网的路由表
  2. 路由表将数据包路由到ELB
  3. ELB将数据包路由到NAT网关
  4. NAT网关将数据包路由到专用子网的路由表
  5. 专用路由表将数据包路由到三个节点之一

这是正确的吗?还有任何资源可以了解数据包流吗?

1 个答案:

答案 0 :(得分:0)

您的描述存在一些明显的问题。

经典ELB不会路由数据包。

它们在第4层(TCP模式)或第7层(HTTP模式)工作,并且在两种情况下,它们都将有效负载从一个TCP连接(浏览器到ELB)复制到另一个TCP连接(从ELB到实例),然后再复制回来。这就是为什么实例看到平衡器的IP地址而不是浏览器的IP地址的原因。 IP数据包位于第4层以下。

NAT网关根本不用于处理ELB流量。

NAT网关用于出站连接,这意味着从VPC内部发起到外部目标的连接。这不包括来自ELB的回复流量。如果没有NAT网关,则通过ELB的流量将像往常一样工作,但是专用子网上的实例无法建立出站连接-与第三方API进行通信,将其时钟设置为外部时间服务器,进行下载软件更新,或与未配置VPC端点的任何AWS服务进行通信,例如S3,DynamoDB等。

路由表几乎是无关紧要的,因为实际使用的唯一路由是ELB本身所在的公共子网上的默认路由。此路由允许答复流量通过Internet网关从ELB返回到外部客户端。其他所有内容都使用内置在VPC中且不可配置的隐式本地路由-来自客户端的入站流量被隐式路由到ELB,并且ELB和实例之间的流量也被隐式路由到两个方向,因为源和目的地IP地址是ELB和实例的内部专用地址。 ELB和实例直接通信,而不使用任何网关设备(例如NAT网关)。

对于所需的每个连接,ELB专门选择一个正常的实例并为其创建连接。平衡器处于TCP模式时,客户端连接和实例连接之间存在1:1的关系。当平衡器处于HTTP模式时,实例连接通常少于客户端连接,因为ELB将仅根据流量建立与实例所需数量的连接,并且客户端连接倾向于花费大量时间不做任何事情,在页面加载之间。