Elastic Load Balancing
Network Load Balancer
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

Network Load Balancer 的目标组

每个目标组均用于将请求路由到一个或多个已注册的目标。在创建每个侦听器规则时,可以指定目标组和条件。满足规则条件时,流量会转发到相应的目标组。您可以为不同类型的请求创建不同的目标组。例如,为一般请求创建一个目标组,为应用程序的微服务请求创建其他目标组。有关更多信息,请参阅 网络负载均衡器 组件

您基于每个目标组定义负载均衡器的运行状况检查设置。每个目标组均使用默认运行状况检查设置,除非您在创建目标组时将其覆盖或稍后对其进行修改。在侦听器规则中指定一个目标组后,负载均衡器将持续监控已注册到该目标组的所有目标 (这些目标位于已为负载均衡器启用的可用区中) 的运行状况。负载均衡器将请求路由到正常运行的已注册目标。

路由配置

默认情况下,负载均衡器会使用您在创建目标组时指定的协议和端口号将请求路由到其目标。此外,您可以覆盖在将目标注册到目标组时用于将流量路由到目标的端口。

Network Load Balancer 的目标组支持以下协议和端口:

  • 协议:TCP、TLS、UDP TCP_UDP

  • 端口:1-65535

下表总结了侦听器协议和目标组设置的组合。

侦听器协议 目标组协议 目标组类型 运行状况检查协议

TCP

TCP | TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

TLS

TCP | TLS

实例 | ip

HTTP | HTTPS | TCP

UDP

UDP | TCP_UDP

实例

HTTP | HTTPS | TCP

TCP_UDP

TCP_UDP

实例

HTTP | HTTPS | TCP

目标类型

在创建目标组时,应指定其目标类型,这决定您如何指定其目标。创建目标组后,将无法更改其目标类型。

以下是可能的目标类型:

instance

这些目标通过实例 ID 指定。

ip

这些目标通过 IP 地址指定。

当目标类型为 ip 时,您可以指定来自以下 CIDR 块之一的 IP 地址:

  • 目标组的 VPC 的子网

  • 10.0.0.0/8 (RFC 1918)

  • 100.64.0.0/10 (RFC 6598)

  • 172.16.0.0/12 (RFC 1918)

  • 192.168.0.0/16 (RFC 1918)

重要

不能指定可公开路由的 IP 地址。

通过这些支持的 CIDR 块,您可以将以下内容注册到目标组:ClassicLink 实例、可通过 IP 地址和端口寻址的 AWS 资源 (例如数据库),以及通过 AWS Direct Connect 或软件 VPN 连接链接到 AWS 的本地资源。

当目标类型为 ip 时,负载均衡器可支持针对每个唯一目标(IP 地址和端口)的 55000 个并发连接或每分钟约 55000 个连接。如果连接数超过该值,则会增大出现端口分配错误的几率。如果您收到端口分配错误,请将多个目标添加到目标组。

如果目标组协议是 UDP 或 TCP_UDP,目标类型必须为 instance

Network Load Balancer不支持 lambda 目标类型,仅 Application Load Balancer 支持 lambda 目标类型。有关更多信息,请参阅 Application Load Balancer 用户指南 中的作为目标的 Lambda 函数

请求路由和 IP 地址

如果使用实例 ID 指定目标,则使用实例的主网络接口中指定的主私有 IP 地址将流量路由到实例。负载均衡器在将数据包转发到目标实例之前重写目的地 IP 地址。

如果使用 IP 地址指定目标,则可以使用来自一个或多个网络接口的任何私有 IP 地址将流量路由到实例。这使一个实例上的多个应用程序可以使用同一端口。请注意,每个网络接口都可以有自己的安全组。负载均衡器在将数据包转发到目标之前重写目的地 IP 地址。

源 IP 保留

如果您使用实例 ID 指定目标,则客户端的源 IP 地址将保留并提供给您的应用程序。

如果您用 IP 地址指定目标,则源 IP 地址是负载均衡器节点的私有 IP 地址。如果您需要客户端的 IP 地址,请启用代理协议并从代理协议标头获取客户端 IP 地址。

如果在向 网络负载均衡器 注册的实例中存在微服务,则不能使用负载均衡器在这些服务之间提供通信,除非该负载均衡器是面向互联网的,或者实例是通过 IP 地址注册的。有关更多信息,请参阅 从目标到其负载均衡器的请求连接超时

已注册目标

您的负载均衡器充当客户端的单一接触点,并跨其正常运行的已注册目标分发传入流量。每个目标组在为负载均衡器启用的每个可用区中必须至少有一个已注册目标。您可以将每个目标注册到一个或多个目标组中。您可以使用不同的端口多次向同一目标组注册每个 EC2 实例或 IP 地址,从而使负载均衡器能够将请求路由到微服务。

如果应用程序需求增加,您可以向一个或多个目标组注册其他目标以便满足该需求。一旦注册过程完成,负载均衡器就会开始将流量路由到新注册的目标。

如果应用程序需求减少或者您需要为目标提供服务,您可以从目标组取消注册目标。取消注册目标将从目标组中删除目标,但不会影响目标。一旦取消注册,负载均衡器就会停止将流量路由到目标。目标将进入 draining 状态,直至进行中请求完成。当您准备好恢复接收流量时,可以再次向目标组注册目标。

如果要通过实例 ID 来注册目标,则可以将负载均衡器与 Auto Scaling 组一同使用。将一个目标组附加到 Auto Scaling 组后,Auto Scaling 将在启动目标时为您向该目标组注册目标。有关更多信息,请参阅 Amazon EC2 Auto Scaling 用户指南 中的将负载均衡器附加到 Auto Scaling 组

限制

  • 如果实例为以下类型,则不能用实例 ID 注册实例:C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 和 T1。可以用 IP 地址注册这些类型的实例。

  • 如果实例位于与负载均衡器 VPC 对等的 VPC 中,则不能用实例 ID 注册这些实例。可以用 IP 地址注册这些实例。

目标组属性

以下是目标组属性:

deregistration_delay.timeout_seconds

Elastic Load Balancing 在将取消注册目标的状态从 draining 更改为 unused 之前需等待的时间。范围为 0-3600 秒。默认值为 300 秒。

proxy_protocol_v2.enabled

指示是否已启用代理协议版本 2。默认情况下,禁用代理协议。

取消注册延迟

取消注册实例时,负载均衡器将停止创建与实例的新连接。负载均衡器会使用连接耗尽来确保进行中的流量在现有连接上完成。如果已经取消注册的实例运行状况良好并且现有连接未处于空闲状态,负载均衡器可以继续将流量发送到该实例。为保证现有连接关闭,您可以在取消注册实例之前确保该实例运行状况不佳,或者您可以定期关闭客户端连接。

取消注册的目标的初始状态为 draining。默认情况下,负载均衡器会在 300 秒后将取消注册的目标的状态更改为 unused。如需更改负载均衡器在将取消注册的目标的状态更改为 unused 之前等待的时长,请更新取消注册延迟值。我们建议您指定至少 120 秒的值以确保完成请求。

使用控制台更新取消注册延迟值

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组。

  4. 选择 DescriptionEdit attributes

  5. 根据需要更改 Deregistration delay 的值,然后选择 Save

使用 AWS CLI 更新取消注册延迟值

使用 modify-target-group-attributes 命令。

代理协议

Network Load Balancer 使用代理协议版本 2 来发送其他连接信息,如源和目的地。代理协议版本 2 提供代理协议标头的二进制编码。负载均衡器将代理协议标头预添加到 TCP 数据中。它不会丢弃或覆盖任何现有数据,包括客户端或任何其他代理、负载均衡器或网络路径中的服务器所发送的任何代理协议标头。因此,可以接收多个代理协议标头。此外,如果您的网络负载均衡器之外的目标还有另一个网络路径,则第一个代理协议标头可能不是您的网络负载均衡器中的标题。

如果您通过 IP 地址指定目标,则提供给应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。如果您的应用程序需要客户端的 IP 地址,请启用代理协议并从代理协议标头获取客户端 IP 地址。

如果您通过实例 ID 指定目标,则提供给应用程序的源 IP 地址将是客户端 IP 地址。但是,如果您愿意,可以启用代理协议并从代理协议标头中获取客户端 IP 地址。

运行状况检查连接

启用代理协议后,代理协议标头也会包含在来自负载均衡器的运行状况检查连接中。但是,使用运行状况检查连接,客户端连接信息不会在代理协议标头中发送。

VPC 终端节点服务

对于来自服务使用器并通过 VPC 端点服务的流量,提供给您的应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。如果您的应用程序需要服务使用器的 IP 地址,请启用代理协议并从代理协议标头获取这些 IP 地址。

代理协议标头还包括终端节点的 ID。此信息使用自定义类型-长度-值 (TLV) 向量进行编码,如下所示。

字段 长度 (8 位字节) 说明

Type

1

PP2_TYPE_AWS (0xEA)

Length

2

值的长度

1

PP2_SUBTYPE_AWS_VPCE_ID (0x01)

可变 (值长度减 1) 终端节点的 ID

有关解析 TLV 类型 0xEA 的示例,请参阅 https://github.com/aws/elastic-load-balancing-tools/tree/master/proprot

启用代理协议

在目标组上启用代理协议之前,请确保您的应用程序预料到并且可以解析代理协议版本 2 标头,否则它们可能会失败。有关更多信息,请参阅代理协议版本 1 和 2

使用控制台启用代理协议

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格上的 LOAD BALANCING 下,选择 Target Groups

  3. 选择目标组。

  4. 选择 DescriptionEdit attributes

  5. 选择 Enable proxy protocol v2,然后选择 Save

使用 AWS CLI 启用代理协议

使用 modify-target-group-attributes 命令。