【问题标题】: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?当我在公共子网中有 ELB 和 NAT 网关将流量分配到我的私有子网中的三个节点时,数据包如何流动?
【发布时间】:2019-05-24 10:18:16
【问题描述】:

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

我现在的理解是:

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

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

【问题讨论】:

  • 您的理解似乎与实际发生的情况大相径庭,但为了给您一个好的准确的解释,请澄清:哪种类型的ELB——Classic、Application或Network?客户端在哪里——在 Internet 上?
  • 目前我正在使用一个位于公共子网中的经典 ELB,客户端也在互联网上发出 HTTP 请求

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


【解决方案1】:

您的描述存在一些值得注意的问题。

经典 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 只会根据流量与实例建立尽可能多的连接,而客户端连接往往会花费大量时间什么都不做, 在页面加载之间。

【讨论】:

    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 2021-05-29
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多