当我在 public 子网中有一个 ELB 和 NAT 网关时,数据包如何流动,将流量分配到我的私有子网中的三个节点?
How do packets flow when I have a ELB, and NAT gateway in a public subnet that distributes traffic to three of my nodes in my private subnet?
我想知道是否有人可以为我回答这个问题?
我现在的理解是:
- 客户端发出请求,数据包首先到达 public 子网
的路由 table
- 路由 table 将数据包路由到 ELB
- ELB 将数据包路由到 NAT 网关
- NAT 网关将数据包路由到私有子网的路由 table
- 专用路由table将数据包路由到三个节点之一
这是正确的吗?也有任何资源来了解数据包流吗?
您的描述存在一些明显的问题。
经典 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 本身所在的 public 个子网上的默认路由。此路由允许到 return 的回复流量从 ELB 通过 Internet 网关发送到外部客户端。其他一切都使用内置于 VPC 且不可配置的隐式本地路由——从客户端入站的流量被隐式路由到 ELB,ELB 和实例之间的流量也被隐式双向路由,因为源和目标IP地址是ELB和实例的内部私有地址。 ELB与实例直接通信,不使用任何网关设备(如NAT网关)。
对于每个需要的连接,ELB 专门选择一个健康的实例并创建到它的连接。当平衡器处于 TCP 模式时,客户端连接和实例连接之间存在 1:1 关系。当平衡器处于 HTTP 模式时,实例连接通常比客户端连接少,因为 ELB 只会根据流量建立所需数量的实例连接,而客户端连接往往会花费大量时间无所事事, 在页面加载之间。
我想知道是否有人可以为我回答这个问题?
我现在的理解是:
- 客户端发出请求,数据包首先到达 public 子网 的路由 table
- 路由 table 将数据包路由到 ELB
- ELB 将数据包路由到 NAT 网关
- NAT 网关将数据包路由到私有子网的路由 table
- 专用路由table将数据包路由到三个节点之一
这是正确的吗?也有任何资源来了解数据包流吗?
您的描述存在一些明显的问题。
经典 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 本身所在的 public 个子网上的默认路由。此路由允许到 return 的回复流量从 ELB 通过 Internet 网关发送到外部客户端。其他一切都使用内置于 VPC 且不可配置的隐式本地路由——从客户端入站的流量被隐式路由到 ELB,ELB 和实例之间的流量也被隐式双向路由,因为源和目标IP地址是ELB和实例的内部私有地址。 ELB与实例直接通信,不使用任何网关设备(如NAT网关)。
对于每个需要的连接,ELB 专门选择一个健康的实例并创建到它的连接。当平衡器处于 TCP 模式时,客户端连接和实例连接之间存在 1:1 关系。当平衡器处于 HTTP 模式时,实例连接通常比客户端连接少,因为 ELB 只会根据流量建立所需数量的实例连接,而客户端连接往往会花费大量时间无所事事, 在页面加载之间。