编辑网络负载均衡器的目标组属性 - Elastic Load Balancing
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

编辑网络负载均衡器的目标组属性

为 Network Load Balancer 创建目标组后,您可以编辑其目标组属性。

客户端 IP 保留

在将请求路由到后端目标时,网络负载均衡器可以保留客户端的源 IP 地址。禁用客户端 IP 保留时,源 IP 地址为网络负载均衡器的私有 IP 地址。

默认情况下,对于使用 UDP 和 TCP_UDP 协议的实例和 IP 类型目标组,客户端 IP 保留处于启用状态(且不能禁用)。但您可以使用 preserve_client_ip.enabled 目标组属性为 TCP 和 TLS 目标组启用或禁用客户端 IP 保留。

默认设置
  • 实例类型目标组:已启用

  • IP 类型目标组(UDP、TCP_UDP):已启用

  • IP 类型目标组(TCP、TLS):已禁用

启用客户端 IP 保留后

下表描述了启用客户端 IP 保留后目标接收的 IP 地址。

目标 IPv4 客户请求 IPv6 客户请求
实例类型 (IPv4) 客户 IPv4 地址 负载均衡器 IPv4 地址
IP 类型 (IPv4) 客户 IPv4 地址 负载均衡器 IPv4 地址
IP 类型 (IPv6) 负载均衡器 IPv6 地址 客户 IPv6 地址
禁用客户端 IP 保留时

下表描述了禁用客户端 IP 保留时目标收到的 IP 地址。

目标 IPv4 客户请求 IPv6 客户请求
实例类型 (IPv4) 负载均衡器 IPv4 地址 负载均衡器 IPv4 地址
IP 类型 (IPv4) 负载均衡器 IPv4 地址 负载均衡器 IPv4 地址
IP 类型 (IPv6) 负载均衡器 IPv6 地址 负载均衡器 IPv6 地址
要求和注意事项
  • 客户端 IP 保留更改仅对新的 TCP 连接生效。

  • 启用客户端 IP 保留后,流量必须直接从网络负载均衡器流向目标。目标必须与负载均衡器位于同一 VPC 中,或者位于同一区域的对等 VPC 中。

  • 通过传输网关到达目标时,不支持保留客户端 IP。

  • 使用网关负载均衡器终端节点检查网络负载均衡器与目标(实例或 IP 地址)之间的流量时,不支持保留客户端 IP,即使目标与网络负载均衡器位于同一 VPC 中。

  • 以下实例类型不支持保留客户端 IP:C1、、、、、 CC1、 CC2、G1 CG1 CG2 CR1、G2、、、、M1 HI1、M2 HS1、M3 和 T1。我们建议您在禁用客户端 IP 保留的情况下将这些实例类型注册为 IP 地址。

  • 客户端 IP 保留对于 Amazon PrivateLink入站流量没有影响。 Amazon PrivateLink 流量的源 IP 地址始终是 Network Load Balancer 的私有 IP 地址。

  • 当目标组包含 Amazon PrivateLink 网络接口或另一个 Network Load Balancer 的网络接口时,不支持保留客户端 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 保留后,不支持 NAT 环回(也称为发夹转换)。当使用内部网络负载均衡器时,会发生这种情况,而在网络负载均衡器后面注册的目标会创建与同一个网络负载均衡器的连接。可以将连接路由到正在尝试创建连接的目标,从而导致连接错误。我们建议不要从同一网络负载均衡器后面的目标连接到网络负载均衡器,或者您也可以通过禁用客户端 IP 保留来防止此类连接错误。如果您需要客户端 IP 地址,则可以使用代理协议 v2 进行检索。有关更多信息,请参阅 代理协议

  • 当禁用客户端 IP 保留时,网络负载均衡器支持到每个唯一目标(IP 地址和端口)的 5.5 万个并发连接或每分钟大约 5.5 万个连接。如果连接数超过该值,则会增大出现端口分配错误的几率,进而导致无法建立新连接。有关更多信息,请参阅 后端流的端口分配错误

Console
修改客户端 IP 保留
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. 属性选项卡上,选择编辑并找到流量配置窗格。

  5. 要启用客户端 IP 保留,请开启 Preserve client IP addresses(保留客户端 IP 地址)。要禁用客户端 IP 保留,请关闭 Preserve client IP addresses(保留客户端 IP 地址)。

  6. 选择保存更改

Amazon CLI
启用客户端 IP 保留

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

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=preserve_client_ip.enabled,Value=true"
CloudFormation
启用客户端 IP 保留

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该preserve_client_ip.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "preserve_client_ip.enabled" Value: "true"

取消注册延迟

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

取消注册的目标的初始状态为 draining,在此期间,该目标将停止接收新连接。但是,由于配置传播延迟,目标可能仍然会收到连接。默认情况下,负载均衡器会在 300 秒后将取消注册的目标的状态更改为 unused。如需更改负载均衡器在将取消注册的目标的状态更改为 unused 之前等待的时长,请更新取消注册延迟值。我们建议您指定至少 120 秒的值以确保完成请求。

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

Console
修改取消注册延迟属性
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. Attributes(属性)选项卡上,选择 Edit(编辑)。

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

  6. 选择保存更改

Amazon CLI
修改取消注册延迟属性

使用带有deregistration_delay.timeout_secondsderegistration_delay.connection_termination.enabled属性的modify-target-group-attributes命令。

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes \ "Key=deregistration_delay.timeout_seconds,Value=60" \ "Key=deregistration_delay.connection_termination.enabled,Value=true"
CloudFormation
修改取消注册延迟属性

更新AWS::ElasticLoadBalancingV2::TargetGroup资源以包含deregistration_delay.timeout_secondsderegistration_delay.connection_termination.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "deregistration_delay.timeout_seconds" Value: "60" - Key: "deregistration_delay.connection_termination.enabled" Value: "true"

代理协议

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 侦听器不支持带有客户端或任何其他代理发送的代理协议标头的传入连接。

运行状况检查连接

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

如果目标无法解析代理协议标头,则可能无法通过运行状况检查。例如,它们可能会返回以下错误:HTTP 400:请求错误。

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 的示例,请参见/。https://github.com/aws/ elastic-load-balancing-tools tree/master/proprot

启用代理协议

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

Console
启用代理协议版本 2
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. Attributes(属性)选项卡上,选择 Edit(编辑)。

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

  6. 选择保存更改

Amazon CLI
启用代理协议版本 2

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

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=proxy_protocol_v2.enabled,Value=true"
CloudFormation
启用代理协议版本 2

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该proxy_protocol_v2.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "proxy_protocol_v2.enabled" Value: "true"

粘性会话

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

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

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

  • 当为目标组开启粘性属性时,不支持被动运行状况检查。有关更多信息,请参阅目标组的运行状况检查

  • TLS 侦听器不支持粘滞会话。

Console
启用粘性会话
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. Attributes(属性)选项卡上,选择 Edit(编辑)。

  5. Target selection configuration(目标选择配置)下,开启 Stickiness(粘性)。

  6. 选择保存更改

Amazon CLI
启用粘性会话

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

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=stickiness.enabled,Value=true"
CloudFormation
启用粘性会话

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该stickiness.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "stickiness.enabled" Value: "true"

目标组的跨区域负载均衡

负载均衡器的节点将来自客户端的请求分配给已注册目标。启用跨区域负载均衡后,每个负载均衡器节点会在所有已注册可用区中的已注册目标之间分配流量。禁用跨区域负载均衡后,每个负载均衡器节点会仅在其可用区中的已注册目标之间分配流量。如果区域故障域优先于区域性故障域,这可以用于确保运行状况良好区域不受运行状况不佳区域的影响,或者改善整体延迟。

使用网络负载均衡器,默认情况下,跨区域负载平衡在负载均衡器级别处于禁用状态,但您可以随时启用它。对于目标组,默认使用负载均衡器设置,但您可以通过在目标组级别显式启用或禁用跨区域负载平衡来覆盖默认设置。

注意事项
  • 为 Network Load Balancer 启用跨区域负载平衡时,将收取 EC2 数据传输费用。有关更多信息,请参阅《Amazon 数据导出用户指南》中的了解数据传输费用

  • 目标组设置将决定目标组的负载均衡行为。例如,假设启用了负载均衡器级别的跨区域负载均衡,并禁用了目标组级别的跨区域负载均衡,则发送到目标组的流量不会进行跨区域路由。

  • 禁用跨区域负载平衡后,请确保每个负载均衡器可用区中有足够的目标容量,以便每个区域都能处理其相关的工作负载。

  • 禁用跨区域负载平衡后,请确保所有目标组都参与相同的可用区。空的可用区被视为运行状况不佳。

  • 如果目标组类型为或,则可以在目标组级别启用instanceip禁用跨区域负载平衡。如果目标组类型为 alb,则目标组始终从负载均衡器继承跨区域负载均衡设置。

有关在负载均衡器级别启用跨区域负载平衡的更多信息,请参阅跨可用区负载均衡

Console
为目标组启用跨区域负载平衡
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的 Load Balancing(负载均衡)下,选择 Target Groups(目标组)。

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

  4. 属性选项卡上,选择编辑

  5. Edit target group attributes(编辑目标组属性)页面上,为 Cross-zone load balancing(跨区域负载均衡)选择 On(开)。

  6. 选择保存更改

Amazon CLI
为目标组启用跨区域负载平衡

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

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=load_balancing.cross_zone.enabled,Value=true"
CloudFormation
为目标组启用跨区域负载平衡

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该load_balancing.cross_zone.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "load_balancing.cross_zone.enabled" Value: "true"

运行状况不佳的目标的连接终止

默认情况下启用连接终止。当网络负载均衡器的目标未通过配置的运行状况检查并且被认为运行状况不佳时,负载均衡器会终止已建立的连接,并停止将新连接路由到目标。在禁用连接终止的情况下,目标仍被视为运行状况不佳且不接受新连接,但已建立的连接保持活动状态,允许它们正常关闭。

运行状况不佳的目标的连接终止是在目标组级别配置的。

Console
修改连接终止属性
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. Attributes(属性)选项卡上,选择 Edit(编辑)。

  5. 目标运行状况不佳状态管理下,选择当目标变得运行状况不佳时终止连接已启用还是已禁用。

  6. 选择保存更改

Amazon CLI
禁用连接终止属性

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

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=target_health_state.unhealthy.connection_termination.enabled,Value=false"
CloudFormation
禁用连接终止属性

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该target_health_state.unhealthy.connection_termination.enabled属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "target_health_state.unhealthy.connection_termination.enabled" Value: "false"

运行状况不佳的耗尽间隔

将处于 unhealthy.draining 状态的目标视为运行状况不佳,不会接收新连接,但在配置的间隔内保留已建立的连接。不健康的连接间隔决定了目标在其状态变unhealthy为之前保持该unhealthy.draining状态的时间。如果目标在不健康的连接间隔内通过了运行状况检查,则其状态将healthy再次变为。如果触发取消注册,则目标状态变为 draining,且取消注册延迟超时开始。

要求

在启用运行状况不佳的耗尽间隔之前,必须先禁用连接终止。

Console
修改不健康的排水间隔
  1. 打开 Amazon EC2 控制台,网址为https://console.aws.amazon.com/ec2/

  2. 在导航窗格上的负载均衡下,选择目标组

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

  4. Attributes(属性)选项卡上,选择 Edit(编辑)。

  5. 目标运行状况不佳状态管理下,确保已关闭当目标变得运行状况不佳时终止连接

  6. 运行状况不佳的耗尽间隔输入一个值。

  7. 选择保存更改

Amazon CLI
修改不健康的排水间隔

使用带 target_health_state.unhealthy.draining_interval_seconds 属性的 modify-target-group-attributes 命令。

aws elbv2 modify-target-group-attributes \ --target-group-arn target-group-arn \ --attributes "Key=target_health_state.unhealthy.draining_interval_seconds,Value=60"
CloudFormation
修改不健康的排水间隔

更新AWS::ElasticLoadBalancingV2::TargetGroup 资源以包含该target_health_state.unhealthy.draining_interval_seconds属性。

Resources: myTargetGroup: Type: 'AWS::ElasticLoadBalancingV2::TargetGroup' Properties: Name: my-target-group Protocol: TCP Port: 80 TargetType: ip VpcId: !Ref myVPC TargetGroupAttributes: - Key: "target_health_state.unhealthy.draining_interval_seconds" Value: "60"