本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Network Load Balancer 的目标组
每个目标组均用于将请求路由到一个或多个已注册的目标。创建侦听器时,您为其默认操作指定目标组。流量将转发到在侦听器规则中指定的目标组。您可以为不同类型的请求创建不同的目标组。例如,为一般请求创建一个目标组,为应用程序的微服务请求创建其他目标组。有关更多信息,请参阅 网络负载均衡器组件。
您基于每个目标组定义负载均衡器的运行状况检查设置。每个目标组均使用默认运行状况检查设置,除非您在创建目标组时将其覆盖或稍后对其进行修改。在侦听器规则中指定一个目标组后,负载均衡器将持续监控已注册到该目标组的所有目标 (这些目标位于已为负载均衡器启用的可用区中) 的运行状况。负载均衡器将请求路由到正常运行的已注册目标。有关更多信息,请参阅 目标组的运行状况检查。
目录
路由配置
默认情况下,负载均衡器会使用您在创建目标组时指定的协议和端口号将请求路由到其目标。此外,您可以覆盖在将目标注册到目标组时用于将流量路由到目标的端口。
Network Load Balancer 的目标组支持以下协议和端口:
-
协议:TCP、TLS、UDP、TCP _ UDP
-
端口:1-65535
如果使用TLS协议配置了目标组,则负载均衡器会使用您在目标上安装的证书与目标建立TLS连接。负载均衡器不验证这些证书。因此,您可以使用自签名证书或已过期的证书。由于负载均衡器位于虚拟私有云 (VPC) 中,因此负载均衡器与目标之间的流量将在数据包级别进行身份验证,因此即使目标上的证书无效,也不会面临 man-in-the-middle 攻击或欺骗的风险。
下表总结了侦听器协议和目标组设置的组合。
侦听器协议 | 目标组协议 | 目标组类型 | 运行状况检查协议 |
---|---|---|---|
TCP |
TCP | TCP_UDP |
实例 | ip |
HTTP | HTTPS | TCP |
TCP |
TCP |
alb |
HTTP | HTTPS |
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 地址指定。
alb
-
目标是 Application Load Balancer。
当目标类型为时ip
,您可以从以下CIDR块之一中指定 IP 地址:
-
目标组VPC的子网
-
172.16.0.0/12 (1918) RFC
-
192.168.0.0/16 (1918) RFC
重要
不能指定可公开路由的 IP 地址。
所有支持的CIDR模块都允许您将以下目标注册到目标组:
-
AWS 可通过 IP 地址和端口寻址的资源(例如数据库)。
-
AWS 通过 AWS Direct Connect 或站点到站点VPN连接链接的本地资源。
为您的目标组禁用客户端 IP 保留后,针对网络负载均衡器 IP 地址和唯一目标(IP 地址和端口)的组合,负载均衡器可支持每分钟约 5.5 万个连接。如果连接数超过该值,则会增大出现端口分配错误的几率。如果您收到端口分配错误,请将多个目标添加到目标组。
在共享的 AmazonVPC(作为参与者)中启动 Network Load Balancer 时,您只能在已与您共享的子网中注册目标。
当目标类型为 alb
时,您可以将单个 Application Load Balancer 注册为目标。有关更多信息,请参阅 作为目标的 Application Load Balancer。
Network Load Balancer 不支持 lambda
目标类型。Application Load Balancer 是支持 lambda
目标类型的唯一负载均衡器。有关更多信息,请参阅应用程序负载均衡器用户指南中的 Lambda 函数作为目标。
如果在向网络负载均衡器注册的实例中存在微服务,则不能使用负载均衡器在这些服务之间提供通信,除非该负载均衡器是面向互联网的,或者实例是通过 IP 地址注册的。有关更多信息,请参阅 从目标到其负载均衡器的请求连接超时。
请求路由和 IP 地址
如果使用实例 ID 指定目标,则使用实例的主网络接口中指定的主私有 IP 地址将流量路由到实例。负载均衡器在将数据包转发到目标实例之前重写目的地 IP 地址。
如果使用 IP 地址指定目标,则可以使用来自一个或多个网络接口的任何私有 IP 地址将流量路由到实例。这使一个实例上的多个应用程序可以使用同一端口。请注意,每个网络接口都可以有自己的安全组。负载均衡器在将数据包转发到目标之前重写目的地 IP 地址。
有关允许实例的流量的更多信息,请参阅目标安全组。
将本地资源作为目标
当目标类型为时,通过本地资源链接 AWS Direct Connect 或站点到站点VPN连接可以用作目标。ip
![使用 AWS Direct Connect 或将 Network Load Balancer 与本地服务器连接起来 AWS Site-to-Site VPN。](images/nlb-on-prem-resources.png)
使用本地资源时,这些目标的 IP 地址仍必须来自以下CIDR区块之一:
-
172.16.0.0/12 (1918) RFC
-
192.168.0.0/16 (1918) RFC
有关的更多信息 AWS Direct Connect,请参阅什么是 AWS Direct Connect?
有关的更多信息 AWS Site-to-Site VPN,请参阅什么是 AWS Site-to-Site VPN?
IP 地址类型
创建新目标组时,可以选择目标组的 IP 地址类型。此 IP 地址控制用于与目标进行通信并检查其运行状况的 IP 版本。
网络负载均衡器同时IPv4支持IPv6目标群组。默认选择为 IPv4。IPv6目标组只能与双栈网络负载均衡器关联。
注意事项
-
目标组中的所有 IP 地址均必须具有相同的 IP 地址类型。例如,您无法向IPv4目标组注册IPv6目标。
-
IPv6目标组只能与带有TCP或TLS监听器的
dualstack
负载均衡器一起使用。 -
IPv6目标组支持 IP 和实例类型目标。
已注册目标
您的负载均衡器充当客户端的单一接触点,并跨其正常运行的已注册目标分发传入流量。每个目标组在为负载均衡器启用的每个可用区中必须至少有一个已注册目标。您可以将每个目标注册到一个或多个目标组中。
如果应用程序需求增加,您可以向一个或多个目标组注册其他目标以便满足该需求。无论配置的阈值如何,只要注册过程完成并且目标通过了第一次初始运行状况检查,负载均衡器就会开始将流量路由到新注册的目标。
如果应用程序需求减少或者您需要为目标提供服务,您可以从目标组取消注册目标。取消注册目标将从目标组中删除目标,但不会影响目标。一旦取消注册,负载均衡器就会停止将流量路由到目标。目标将进入 draining
状态,直至进行中请求完成。当您准备好恢复接收流量时,可以再次向目标组注册目标。
如果要通过实例 ID 来注册目标,则可以将负载均衡器与 Auto Scaling 组一同使用。将一个目标组挂接到 Auto Scaling 组后,Auto Scaling 在启动目标时会为您向该目标组注册目标。有关更多信息,请参阅 Amazon Auto Scaling 用户指南中的将负载均衡器附加到您的 A EC2 uto Scaling 组。
要求和注意事项
-
如果实例使用以下实例类型之一,则无法按实例 ID 注册实例:C1、、、、、CC1CC2、G1 CG1 CG2、G2 CR1、、、、M1 HI1、M2 HS1、M3 或 T1。
-
按实例 ID 为IPv6目标组注册目标时,必须为目标分配主IPv6地址。要了解更多信息,请参阅 Amazon EC2 用户指南中的IPv6地址
-
按实例 ID 注册目标时,实例必须与 Network Load Balancer 位于同一个亚马逊VPC中。如果实例位于与负载均衡器对等的VPC(相同区域或不同区域)中,则无法按实例 ID 注册实例。VPC可以用 IP 地址注册这些实例。
-
如果您通过 IP 地址注册目标,并且该 IP 地址与负载均衡器VPC相同,则负载均衡器会验证它是否来自可以访问的子网。
-
负载均衡器仅将流量路由到已启用的可用区中的目标。未启用的区域中的目标未使用。
-
对于UDP和 TCP _ UDP 目标组,如果实例位于负载均衡器之外VPC或使用以下实例类型之一,则不要按 IP 地址注册实例:C1、、、、、、G1 CC1 CC2 CG1、G2 CG2、CR1、、、、、M1 HI1、M2 HS1、M3 或 T1。位于负载均衡器之外VPC或使用不支持的实例类型的目标可能能够接收来自负载均衡器的流量,但随后无法响应。
目标组属性
支持以下目标组属性。只有当目标组类型为 instance
或 ip
时,才能修改这些属性。如果目标组类型为 alb
,则这些属性将始终使用其默认值。
deregistration_delay.timeout_seconds
-
Elastic Load Balancing 在将取消注册目标的状态从
draining
更改为unused
之前需等待的时间。范围为 0-3600 秒。默认值为 300 秒。 deregistration_delay.connection_termination.enabled
-
指示负载均衡器是否在取消注册超时结束时终止连接。该值为
true
或false
。对于新的UDP/TCP_ UDP 目标组,默认值为true
。否则,默认值为false
。 load_balancing.cross_zone.enabled
-
指示是否启用了跨区域负载均衡。该值为
true
、false
或use_load_balancer_configuration
。默认为use_load_balancer_configuration
。 preserve_client_ip.enabled
-
指示是否启用客户端 IP 保留。该值为
true
或false
。如果目标组类型为 IP 地址而目标组协议为TCP或,则默认设置为禁用TLS。否则,默认处于启用状态。不能为UDP和 TCP _ UDP 目标群组禁用客户端 IP 保留。 proxy_protocol_v2.enabled
-
指示是否已启用代理协议版本 2。默认情况下,禁用代理协议。
stickiness.enabled
-
指示是否启用粘性会话。
stickiness.type
-
粘性的类型。可能的值为
source_ip
。 target_group_health.dns_failover.minimum_healthy_targets.count
-
必须运行状况良好的目标数量下限。如果运行正常的目标数量低于此值,请在中将该区域标记为不健康DNS,以便流量仅路由到健康区域。可能的值是
off
或 1 到目标数量上限之间的整数。如果off
禁用 DNS failaway,则表示即使目标组中的所有目标都运行状况不佳,也不会从DNS中移除该区域。默认 为 1。 target_group_health.dns_failover.minimum_healthy_targets.percentage
-
必须运行状况良好的目标最低百分比。如果健康目标的百分比低于此值,请在中将该区域标记为不健康DNS,以便流量仅路由到健康区域。可能的值为
off
或者 1 到 100 之间的整数。如果off
禁用 DNS failaway,则表示即使目标组中的所有目标都运行状况不佳,也不会从DNS中移除该区域。默认为off
。 target_group_health.unhealthy_state_routing.minimum_healthy_targets.count
-
必须运行状况良好的目标数量下限。如果运行状况良好的目标数量低于此值,则将流量发送到所有目标(包括运行状况不佳的目标)。范围为 1 到目标数量上限。默认 为 1。
target_group_health.unhealthy_state_routing.minimum_healthy_targets.percentage
-
必须运行状况良好的目标最低百分比。如果运行状况良好的目标百分比低于此值,则将流量发送到所有目标(包括运行状况不佳的目标)。可能的值为
off
或者 1 到 100 之间的整数。默认为off
。 target_health_state.unhealthy.connection_termination.enabled
-
指示负载均衡器是否终止与运行状况不佳的目标的连接。该值为
true
或false
。默认为true
。 target_health_state.unhealthy.draining_interval_seconds
-
Elastic Load Balancing 在将运行状况不佳的目标的状态从
unhealthy.draining
更改为之前等待的时间。unhealthy
范围为 0-36000 秒。默认值为 0 秒。注意:只有在为时
target_health_state.unhealthy.connection_termination.enabled
才能配置此属性false
。
客户端 IP 保留
在将请求路由到后端目标时,Network Load Balancer 可以保留客户端的源 IP 地址。禁用客户端 IP 保留时,源 IP 地址是 Network Load Balancer 的私有 IP 地址。
默认情况下,客户端 IP 保留处于启用状态(且无法禁用),IP 类型目标组采用UDP和 TCP _ UDP 协议。但是,您可以使用目标组属性启用或禁用TLS目标组的TCP客户端 IP 保留。preserve_client_ip.enabled
默认设置
-
实例类型目标组:已启用
-
IP 类型目标组 (UDP、TCP _UDP):已启用
-
IP 类型目标组 (TCP,TLS):已禁用
要求和注意事项
-
启用客户端 IP 保留后,流量必须直接从 Network Load Balancer 流向目标。目标必须与 Network Load Balancer 位于同一个区域中,或者位于同一个区域的对VPC等设备VPC中。
-
使用网关负载均衡器终端节点检查网络负载均衡器与目标(实例或 IP)之间的流量时,不支持保留客户端 IP,即使目标与网络负载均衡器位于同一个亚马逊VPC。
-
以下实例类型不支持保留客户端 IP:C1、、、、、CC1、CC2、G1 CG1 CG2 CR1、G2、、、、M1 HI1、M2 HS1、M3 和 T1。我们建议您在禁用客户端 IP 保留的情况下将这些实例类型注册为 IP 地址。
-
客户端 IP 保留对来自的入站流量没有影响 AWS PrivateLink。 AWS PrivateLink 流量的源 IP 始终是 Network Load Balancer 的私有 IP 地址。
-
当目标组包含或其他 Network Load Balancer 的 AWS PrivateLink ENIsENI,则不支持保留客户端 IP。这将导致与那些目标的通信中断。
-
客户端 IP 保留对从IPv6到的流量没有影响IPv4。此类型流量的源 IP 始终是 Network Load Balancer 的私有 IP 地址。
-
当您按 Application Load Balancer 类型指定目标时,Network Load Balancer 将保留所有传入流量的客户端 IP 并发送到 Application Load Balancer。然后,Application Load Balancer 会将客户端 IP 附加到
X-Forwarded-For
请求标头,之后才发送此请求标头。 -
客户端 IP 保留更改仅对新TCP连接生效。
-
NAT启用客户端 IP 保留后,不支持环回,也称为发夹功能。启用后,您可能会遇到与在目标上观察到的套接字重用有关TCP的 /IP 连接限制。当客户端或客户端前面的NAT设备在同时连接到多个负载平衡器节点时使用相同的源 IP 地址和源端口时,可能会出现这些连接限制。如果负载均衡器将这些连接路由到同一个目标,则这些连接对目标来说似乎是来自同一源套接字,从而导致连接错误。当发生这种情况时,客户端可能会重试(如果连接失败)或重新连接(如果连接中断)。您可以通过增加源临时端口的数量或增加负载均衡器的目标数来减少此类连接错误。您可以通过禁用客户端 IP 保留或禁用跨区域负载均衡来防止此类连接错误。
-
当禁用客户端 IP 保留时,网络负载均衡器支持到每个唯一目标(IP 地址和端口)的 5.5 万个并发连接或每分钟大约 5.5 万个连接。如果连接数超过该值,则会增大出现端口分配错误的几率,进而导致无法建立新连接。可以使用
PortAllocationErrorCount
指标跟踪端口分配错误。要修复端口分配错误,请将更多目标添加到目标组。有关更多信息,请参阅 CloudWatch 您的 Network Load Balancer 的指标。
使用控制台配置客户端 IP 保留
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的负载均衡下,选择目标组。
-
选择目标组的名称以打开其详细信息页面。
-
在 Attributes(属性)选项卡上,选择 Edit(编辑)。
-
要启用客户端 IP 保留,请开启 Preserve client IP addresses(保留客户端 IP 地址)。要禁用客户端 IP 保留,请关闭 Preserve client IP addresses(保留客户端 IP 地址)。
-
选择 Save changes(保存更改)。
要启用或禁用客户端 IP 保留,请使用 AWS CLI
使用带有preserve_client_ip.enabled
属性的modify-target-group-attributes命令。
例如,使用以下命令禁用客户端 IP 保留。
aws elbv2 modify-target-group-attributes --attributes Key=preserve_client_ip.enabled,Value=
false
--target-group-arnARN
您的输出应类似于以下示例。
{
"Attributes": [
{
"Key": "proxy_protocol_v2.enabled",
"Value": "false"
},
{
"Key": "preserve_client_ip.enabled",
"Value": "false"
},
{
"Key": "deregistration_delay.timeout_seconds",
"Value": "300"
}
]
}
取消注册延迟
取消注册目标后,负载均衡器将停止创建与该目标的新连接。负载均衡器会使用连接耗尽来确保进行中的流量在现有连接上完成。如果已经取消注册的目标运行状况良好并且现有连接未处于空闲状态,负载均衡器可以继续将流量发送到该目标。要确保现有连接关闭,您可以执行以下任一操作:为连接终止启用目标组属性、确保在取消注册之前实例运行状况不佳或者定期关闭客户端连接。
注销目标的初始状态为draining
,在此期间目标将继续接收新连接。默认情况下,负载均衡器会在 300 秒后将取消注册的目标的状态更改为 unused
。如需更改负载均衡器在将取消注册的目标的状态更改为 unused
之前等待的时长,请更新取消注册延迟值。我们建议您指定至少 120 秒的值以确保完成请求。
如果为连接终止启用目标组属性,则对取消注册目标的连接将在取消注册超时结束后不久关闭。
使用控制台更新取消注册属性
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的负载均衡下,选择目标组。
-
选择目标组的名称以打开其详细信息页面。
-
在 Attributes(属性)选项卡上,选择 Edit(编辑)。
-
要更改取消注册超时,请在 Deregistration delay 中输入新值。要确保在取消注册目标后现有连接关闭,请选择 Terminate connections on deregistration(取消注册时终止连接)。
-
选择 Save changes(保存更改)。
要更新取消注册属性,请使用 AWS CLI
使用modify-target-group-attributes命令。
代理协议
Network Load Balancer 使用代理协议版本 2 来发送其他连接信息,如源和目标。代理协议版本 2 提供代理协议标头的二进制编码。对于TCP侦听器,负载均衡器会在数据前面添加代理协议标头。TCP它不会丢弃或覆盖任何现有数据,包括客户端或网络路径中的任何其他代理、负载均衡器或服务器发送的任何传入代理协议标头。因此,可以接收多个代理协议标头。此外,如果您的 Network Load Balancer 之外的目标还有另一个网络路径,则第一个代理协议标头可能不是您的 Network Load Balancer 中的标头。
如果您使用 IP 地址指定目标,则向您的应用程序提供的源 IP 地址取决于目标组的协议,如下所示:
-
TCP和TLS:默认情况下,客户端 IP 保留处于禁用状态,提供给您的应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。要保留客户机的 IP 地址,请确保目标位于相同VPC或对等节点内,VPC并启用客户端 IP 保留。如果您需要客户端的 IP 地址但不满足这些条件,请启用代理协议并从代理协议标头中获取客户端 IP 地址。
-
UDP和 TCP _UDP:源 IP 地址是客户机的 IP 地址,因为默认情况下,这些协议的客户端 IP 保留处于启用状态,并且无法禁用。如果您通过实例 ID 指定目标,则提供给应用程序的源 IP 地址将是客户端 IP 地址。但是,如果您愿意,可以启用代理协议并从代理协议标头中获取客户端 IP 地址。
如果您通过实例 ID 指定目标,则提供给应用程序的源 IP 地址将是客户端 IP 地址。但是,如果您愿意,可以启用代理协议并从代理协议标头中获取客户端 IP 地址。
注意
TLS监听器不支持客户端或任何其他代理发送的带有代理协议标头的传入连接。
运行状况检查连接
启用代理协议后,代理协议标头也会包含在来自负载均衡器的运行状况检查连接中。但是,使用运行状况检查连接,客户端连接信息不会在代理协议标头中发送。
VPC终端节点服务
对于通过VPC终端节点服务来自服务使用者的流量,提供给您的应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。如果您的应用程序需要服务使用器的 IP 地址,请启用代理协议并从代理协议标头获取这些 IP 地址。
代理协议标头还包括终端节点的 ID。此信息使用自定义 Type-Length-Value () TLV 向量进行编码,如下所示。
字段 | 长度 (8 位字节) | 描述 |
---|---|---|
Type |
1 |
PP2_TYPE_AWS (0xEA) |
Length |
2 |
值的长度 |
值 |
1 |
PP2_ SUBTYPE AWS _ VPCE _ID (0x01) |
可变 (值长度减 1) | 终端节点的 ID |
有关解析TLV类型 0xEA 的示例,请参阅 /tree/master/prot。https://github.com/aws/ elastic-load-balancing-tools
启用代理协议
在目标组上启用代理协议之前,请确保您的应用程序预料到并且可以解析代理协议版本 2 标头,否则它们可能会失败。有关更多信息,请参阅PROXY协议版本 1 和 2
使用控制台启用代理协议版本 2
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的负载均衡下,选择目标组。
-
选择目标组的名称以打开其详细信息页面。
-
在 Attributes(属性)选项卡上,选择 Edit(编辑)。
-
在编辑属性页面上,选择代理协议 v2。
-
选择 Save changes(保存更改)。
要启用代理协议 v2,请使用 AWS CLI
使用modify-target-group-attributes命令。
粘性会话
粘性会话是用于将客户端流量传输到目标组中的同一目标的机制。对于维护状态信息以便向客户端提供持续体验的服务器来说,这很有用。
注意事项
-
使用粘性会话可能会导致连接和流分布不均,这可能会影响目标的可用性。例如,同一NAT设备后面的所有客户端都具有相同的源 IP 地址。这会使系统将来自这些客户端的所有流量传输到同一目标。
-
如果目标组中的任何目标的运行状况发生变化,或者您向目标组注册或取消注册了目标,则负载均衡器可能会重置该目标组的粘性会话。
-
当为目标群组开启粘性属性时,不支持被动健康检查。有关更多信息,请参阅针对目标群体的健康检查。
-
TLS听众不支持粘性会话。
使用控制台启用粘性会话
打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/
。 -
在导航窗格上的负载均衡下,选择目标组。
-
选择目标组的名称以打开其详细信息页面。
-
在 Attributes(属性)选项卡上,选择 Edit(编辑)。
-
在 Target selection configuration(目标选择配置)下,开启 Stickiness(粘性)。
-
选择 Save changes(保存更改)。
要启用粘性会话,请使用 AWS CLI
使用带有stickiness.enabled
属性的modify-target-group-attributes命令。