编辑网络负载均衡器的目标组属性 - Elastic Load Balancing

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

创建网络负载均衡器的目标组之后,您可以编辑其目标组属性。

客户端 IP 保留

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

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

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

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

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

当启用客户端 IP 保留时

下表说明了启用客户端 IP 保留时目标接收的 IP 地址。

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

下表说明了禁用客户端 IP 保留时目标接收的 IP 地址。

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

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

  • 当目标通过中转网关访问时,不支持客户端 IP 保留。

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

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

  • 客户端 IP 保留对于 AWS PrivateLink 入站流量没有影响。AWS PrivateLink 流量的源 IP 地址始终是网络负载均衡器的私有 IP 地址。

  • 当目标组包含 AWS PrivateLink 网络接口或其他网络负载均衡器的网络接口时,不支持客户端 IP 保留。这将导致与这些目标的通信中断。

  • 客户端 IP 保留对于从 IPv6 转换为 IPv4 的流量没有影响。此类型流量的源 IP 地址始终是网络负载均衡器的私有 IP 地址。

  • 当您按应用程序负载均衡器类型指定目标时,网络负载均衡器将保留所有传入流量的客户端 IP 并发送到应用程序负载均衡器。然后,应用程序负载均衡器会将客户端 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. 选择保存更改

AWS 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 秒的值以确保完成请求。对于 QUIC 流量,该值始终为 300 秒,且无法调整。

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

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

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

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

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

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

  6. 选择保存更改

AWS 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"

代理协议

网络负载均衡器使用代理协议版本 2 来发送其他连接信息,如源和目标。代理协议版本 2 提供代理协议标头的二进制编码。

对于 TCP 侦听器,负载均衡器会将代理协议标头预添加到 TCP 数据中。它不会丢弃或覆盖任何现有数据,包括客户端或网络路径中的任何其他代理、负载均衡器或服务器发送的任何传入代理协议标头。因此,可以接收多个代理协议标头。此外,如果您网络负载均衡器之外的目标还有另一个网络路径,则第一个代理协议标头可能不是负载均衡器中的标头。

TLS 侦听器不支持带有客户端或任何其他代理发送的代理协议标头的传入连接。

QUIC 流量不支持代理协议版本 2。

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

  • TCP 和 TLS:默认情况下,已禁用客户端 IP 保留,提供给您的应用程序的源 IP 地址是负载均衡器节点的私有 IP 地址。要保留客户端的 IP 地址,请确保目标位于同一 VPC 或对等 VPC 内,并启用客户端 IP 保留。如果您需要客户端的 IP 地址并且不满足这些条件,请启用代理协议并从代理协议标头获取客户端 IP 地址。

  • UDP 和 TCP_UDP:源 IP 地址是客户端的 IP 地址,因为默认情况下,将为这些协议启用客户端 IP 保留,且无法禁用。如果您通过实例 ID 指定目标,则提供给应用程序的源 IP 地址将是客户端 IP 地址。但是,如果您愿意,可以启用代理协议并从代理协议标头中获取客户端 IP 地址。

运行状况检查连接

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

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

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

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

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

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

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

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

  6. 选择保存更改

AWS 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 或 QUIC 侦听器不支持粘性会话。

Console
要启用粘性会话
  1. 通过以下网址打开 Amazon EC2 控制台:https://console.aws.amazon.com/ec2/

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

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

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

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

  6. 选择保存更改

AWS 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"

目标组的跨区域负载均衡

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

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

注意事项
  • 为网络负载均衡器启用跨区域负载均衡后,将收取 EC2 数据传输费用。有关更多信息,请参阅《AWS 数据导出用户指南》中的了解数据传输费用

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

  • 禁用跨区域负载平衡时,请确保每个负载均衡器的区域中都有足够的目标容量,以便每个区域都能够为其关联的工作负载提供服务。

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

  • 如果目标组类型为 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. 选择保存更改

AWS 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. 选择保存更改

AWS 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. 选择保存更改

AWS 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"