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

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

Network Load Balancer 的目标组

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

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

路由配置

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

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

  • 协议:TCP、TLS、UDP TCP_UDP

  • 端口:1-65535

如果目标组使用 TLS 协议配置,则负载均衡器将使用您在目标上安装的证书与目标建立 TLS 连接。负载均衡器不验证这些证书。因此,您可以使用自签名证书或已过期的证书。由于负载均衡器位于虚拟私有云 (VPC) 中,因此负载均衡器与目标之间的流量将在数据包级别进行身份验证,这样即使目标上的证书无效,它也不会面临中间人攻击或欺骗风险。

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

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

TCP

TCP | TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

TLS

TCP | TLS

实例 | ip

HTTP | HTTPS | TCP

UDP

UDP | TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

TCP_UDP

TCP_UDP

实例 | ip

HTTP | HTTPS | TCP

Target type

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

以下是可能的目标类型:

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 个连接。如果连接数超过该值,则会增大出现端口分配错误的几率。如果您收到端口分配错误,请将多个目标添加到目标组。

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

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

请求路由和 IP 地址

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

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

有关允许实例的流量的更多信息,请参阅目标安全组

源 IP 保留

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

如果您使用 IP 地址指定目标,则提供的源 IP 地址取决于目标组的协议,如下所示:

  • TCP 和 TLS:源 IP 地址是负载均衡器节点的私有 IP 地址。如果您需要客户端的 IP 地址,请在负载均衡器上启用代理协议并从代理协议标头获取客户端 IP 地址。

  • UDP 和 TCP_UDP:源 IP 地址是客户端的 IP 地址。

如果您将 网络负载均衡器 与 VPC 终端节点服务或 AWS Global Accelerator 一起使用,则提供给您的应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。如果您需要服务使用者的 IP 地址,请在负载均衡器上启用代理协议

如果按实例 ID 指定目标,则可能会遇到与目标上观察到的套接字重用相关的 TCP/IP 连接限制。如果客户端或客户端前面的 NAT 设备在同时连接到多个负载均衡器节点时使用相同的源 IP 地址和源端口,则可能会出现这些连接限制。如果负载均衡器将连接路由到同一个目标,则这些连接对目标来说似乎是来自同一源套接字,从而导致连接错误。当发生这种情况时,如果连接失败,客户端可能会重试;或如果连接中断,则客户端可能重新连接。您可以通过增加源临时端口的数量或增加负载均衡器的目标数来减少此类连接错误。您可以通过按 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。

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

  • 如果您按 IP 地址注册目标,并且该 IP 地址与负载均衡器位于同一 VPC 中,则负载均衡器会验证其是否来自可以访问的子网。

  • 对于 UDP 和 TCP_UDP 目标组,如果实例位于负载均衡器 VPC 之外,或者采用以下实例类型之一,则不要用 IP 地址注册实例:C1、CC1、CC2、CG1、CG2、CR1、G1、G2、HI1、HS1、M1、M2、M3 或 T1。如果目标驻留在负载均衡器 VPC 之外或者采用不受支持的实例类型,则目标可能能够接收来自负载均衡器的流量,但随后无法响应。

目标组属性

以下是目标组属性:

deregistration_delay.timeout_seconds

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

deregistration_delay.connection_termination.enabled

指示负载均衡器是否在取消注册超时结束时终止连接。该值为 truefalse。默认为 false

proxy_protocol_v2.enabled

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

stickiness.enabled

指示是否启用粘性会话。

stickiness.type

粘性的类型。可能的值为 source_ip

取消注册延迟

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

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

如果为连接终止启用目标组属性,则对取消注册目标的连接将在取消注册超时结束后不久关闭。

New console

使用新控制台更新取消注册属性

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

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

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息页面的属性部分中,选择编辑

  5. 要更改取消注册超时,请在 Deregistration delay 中输入新值。要确保在取消注册目标后现有连接关闭,请选择 Connection termination on deregistration

  6. 选择保存更改

Old console

使用旧控制台更新取消注册属性

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

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

  3. 选择目标组,然后选择 DescriptionEdit attributes.

  4. 要更改取消注册超时,请在 Deregistration delay 中输入新值。要确保在取消注册目标后现有连接关闭,请选择 Connection termination on deregistration

  5. 选择 Save

使用 AWS CLI 更新取消注册属性

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

代理协议

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

如果您使用 IP 地址指定目标,则向您的应用程序提供的源 IP 地址取决于目标组的协议,如下所示:

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

  • UDP 和 TCP_UDP:源 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

New console

使用新控制台启用代理协议版本 2

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

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

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息页面的属性部分中,选择编辑

  5. 编辑属性页面上,选择代理协议 v2

  6. 选择保存更改

Old console

使用旧控制台启用代理协议版本 2

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

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

  3. 选择目标组。

  4. 选择 DescriptionEdit attributes

  5. 对于代理协议 v2,选择启用

  6. 选择 Save

使用 AWS CLI 启用代理协议版本 2

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

粘性会话

粘性会话是用于将客户端流量传输到目标组中的同一目标的机制。对于维护状态信息以便向客户端提供持续体验的服务器来说,这很有用。

注意事项

  • 使用粘性会话可能会导致连接和流分布不均,这可能会影响目标的可用性。例如,相同 NAT 设备背后的所有客户端都具有相同的源 IP 地址。这会使系统将来自这些客户端的所有流量传输到同一目标。

  • 如果目标组中的任何目标的运行状况发生变化,或者您向目标组注册或取消注册了目标,则负载均衡器可能会重置该目标组的粘性会话。

  • TLS 侦听器和 TLS 目标组不支持粘性会话。

New console

使用新控制台启用粘性会话

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

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

  3. 选择目标组的名称以打开其详细信息页面。

  4. 组详细信息页面的属性部分中,选择编辑

  5. 编辑属性页面上,选择粘性

  6. 选择保存更改

Old console

使用旧控制台启用粘性会话

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

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

  3. 选择目标组。

  4. 选择 DescriptionEdit attributes

  5. 对于粘性,请选择启用

  6. 选择 Save

使用 AWS CLI 启用粘性会话

使用带 stickiness.enabled 属性的 modify-target-group-attributes 命令。