本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Application Load Balancer
负载均衡器充当客户端的单一接触点。客户端向负载均衡器发送请求,负载均衡器将请求发送到目标,例如 EC2 实例。要配置您的负载均衡器,可以创建目标组,然后将目标注册到目标组。您还可以创建侦听器来检查来自客户端的连接请求,并创建侦听器规则以将来自客户端的请求路由到一个或多个目标组中的目标。
有关更多信息,请参阅 Elastic Load Balancing 用户指南中的 Elastic Load Balancing 工作原理
目录
您的负载均衡器的子网
创建应用程序负载均衡器时,您必须启用包含您的目标的区域。若要启用区域,请在区域中指定一个子网。弹性负载均衡在您指定的每个区域中创建一个负载均衡器节点。
注意事项
-
当您确保每个启用的区域均具有至少一个已注册目标时,负载均衡器是最有效的。
-
如果您在某区域中注册目标,但未启用该区域,这些已注册目标将无法从负载均衡器接收流量。
-
如果为负载均衡器启用多个区域,则这些区域的类型必须相同。例如,不能同时启用可用区和本地区域。
-
您可以指定已与您共享的子网。
应用程序负载均衡器支持以下类型的子网。
可用区子网
您必须至少选择两个可用区子网。以下限制适用:
-
每个子网都必须来自不同的可用区。
-
要确保您的负载均衡器可以正确扩展,请验证负载均衡器的每个可用区子网是否都具有至少带有一个
/27
位掩码的 CIDR 数据块(例如,10.0.0.0/27
)以及每个子网至少八个空闲 IP 地址。这八个 IP 地址是允许负载均衡器在需要时进行横向扩展所必需的。您的负载均衡器将使用这些 IP 地址与目标建立连接。没有它们,应用程序负载均衡器在尝试更换节点时可能会遇到困难,从而导致其进入失败状态。注意:如果应用程序负载均衡器子网在尝试扩展时用尽可用的 IP 地址,则应用程序负载均衡器将在容量不足的情况下运行。在此期间,旧节点将继续为流量提供服务,但在尝试建立连接时,停滞的扩展尝试可能会导致 5xx 错误或超时。
本地区域子网
您可以指定一个或多个本地区域子网。以下限制适用:
-
您不能 Amazon WAF 与负载均衡器一起使用。
-
您不能将 Lambda 函数用作目标。
-
您不能使用粘性会话或应用程序粘性。
Outpost 子网
您可以指定单个 Outpost 子网。以下限制适用:
-
您必须已在本地数据中心中安装并配置了 Outpost。Outpost 与其 Amazon 区域之间必须具有可靠的网络连接。有关更多信息,请参阅 用户指南。Amazon Outposts
-
负载均衡器需要在 Outpost 上为负载均衡器节点设置两个
large
实例。支持的实例类型见下表。负载均衡器可根据需要进行扩展,每次可将节点大小调整一个型号(从large
到xlarge
,然后从xlarge
到2xlarge
,然后从2xlarge
到4xlarge
)。将节点扩展到最大实例型号后,如果您还需要额外的容量,负载均衡器会添加4xlarge
实例以作为负载均衡器节点。如果您没有足够的实例容量或可用 IP 地址来扩展负载均衡器,负载均衡器将向 Amazon Health Dashboard 报告事件,并且负载均衡器状态为active_impaired
。 -
您可以通过实例 ID 或 IP 地址注册目标。如果您在 Amazon 区域内为前哨基地注册目标,则不会使用这些目标。
-
以下功能不可用:Lambda 函数作为目标、 Amazon WAF 集成、粘性会话、身份验证支持以及与 Amazon Global Accelerator的集成。
Application Load Balancer 可以部署在 Outpost 的 c5/c5d, m5/m5d, or r5/r 5d 实例上。下表显示了负载均衡器在 Outpost 上可以使用的每个实例类型的大小和 EBS 卷:
实例类型和大小 | EBS 卷 (GB) |
---|---|
c5/c5d | |
large | 50 |
xlarge | 50 |
2xlarge | 50 |
4xlarge | 100 |
m5/m5d | |
large | 50 |
xlarge | 50 |
2xlarge | 100 |
4xlarge | 100 |
r5/r5d | |
large | 50 |
xlarge | 100 |
2xlarge | 100 |
4xlarge | 100 |
负载均衡器安全组
安全组起到防火墙的作用,可控制允许往返于负载均衡器的流量。您可以选择端口和协议以允许入站和出站流量。
与负载均衡器关联的安全组的规则必须允许侦听器和运行状况检查端口上的双向流量。当您将侦听器添加到负载均衡器或更新目标组的运行状况检查端口时,您必须检查您的安全组规则,确保它们允许新端口上的双向流量。有关更多信息,请参阅 推荐的规则。
负载均衡器状态
负载均衡器可能处于下列状态之一:
provisioning
-
正在设置负载均衡器。
active
-
负载均衡器已完全设置并准备好路由流量。
active_impaired
-
负载均衡器正在路由流量,但没有扩展所需的资源。
failed
-
负载均衡器无法设置。
负载均衡器属性
您可以通过编辑应用程序负载均衡器的属性对其进行配置。有关更多信息,请参阅 编辑负载均衡器属性。
以下是负载均衡器属性:
access_logs.s3.enabled
-
指示是否启用存储在 Amazon S3 中的访问日志。默认为
false
。 access_logs.s3.bucket
-
访问日志所用的 Amazon S3 存储桶的名称。如果启用访问日志,则此属性是必需的。有关更多信息,请参阅 启用访问日志。
access_logs.s3.prefix
-
Amazon S3 存储桶中位置的前缀。
client_keep_alive.seconds
-
客户端保持连接值(以秒为单位)。默认值为 3600 秒。
deletion_protection.enabled
-
指示是否启用删除保护。默认为
false
。 idle_timeout.timeout_seconds
-
空闲超时值 (以秒为单位)。默认值为 60 秒。
ipv6.deny_all_igw_traffic
-
阻止 Internet 网关 (IGW) 访问负载均衡器,以防通过 Internet 网关意外访问内部负载均衡器。对于面向互联网的负载均衡器,它设置为
false
;对于内部负载均衡器,它设置为true
。此属性不会阻止非 IGW 互联网访问(例如,通过对等互连、Transit Gateway 或 Amazon Direct Connect)。 Amazon VPN routing.http.desync_mitigation_mode
-
确定负载均衡器如何处理可能对您的应用程序构成安全风险的请求。可能的值为
monitor
、defensive
和strictest
。默认为defensive
。 routing.http.drop_invalid_header_fields.enabled
-
指示具有无效标头字段的 HTTP 标头是被负载均衡器删除 (
true
) 还是路由到目标 (false
)。默认为false
。Elastic Load Balancing 要求有效的 HTTP 标头名称符合正则表达式[-A-Za-z0-9]+
,如 HTTP 字段名注册表中所述。每个名称都由字母数字字符或连字符组成。如果您想从请求中删除不符合此模式的 HTTP 标头,请选择true
。 routing.http.preserve_host_header.enabled
-
指示应用程序负载均衡器是否应保留 HTTP 请求中的
Host
标头,并将请求发送到目标而不作任何更改。可能的值为true
和false
。默认为false
。 routing.http.x_amzn_tls_version_and_cipher_suite.enabled
-
指示两个标头(
x-amzn-tls-version
和x-amzn-tls-cipher-suite
)在发送到目标之前是否将被添加到客户端请求,标头中包含有关协商 TLS 版本和密码套件的信息。x-amzn-tls-version
标头包含有关与客户端协商的 TLS 协议版本的信息,x-amzn-tls-cipher-suite
标头包含有关与客户端协商的密码套件的信息。两个标头都采用 OpenSSL 格式。属性的可能值为true
和false
。默认为false
。 routing.http.xff_client_port.enabled
-
指示
X-Forwarded-For
标头是否应保留客户端用于连接负载均衡器的源端口。可能的值为true
和false
。默认为false
。 routing.http.xff_header_processing.mode
-
这让您可以在应用程序负载均衡器将请求发送到目标之前修改、保留或移除 HTTP 请求中的
X-Forwarded-For
标头。可能的值为append
、preserve
和remove
。默认为append
。-
如果该值为
append
,则应用程序负载均衡器会将客户端 IP 地址(最后一跳)添加到 HTTP 请求的X-Forwarded-For
标头,然后再将请求发送到目标。 -
如果该值为
preserve
,则应用程序负载均衡器会保留 HTTP 请求中的X-Forwarded-For
标头,并将请求发送到目标而不作任何更改。 -
如果该值为
remove
,则应用程序负载均衡器会移除 HTTP 请求中的X-Forwarded-For
标头,然后再将请求发送到目标。
-
routing.http2.enabled
-
指示是否启用了 HTTP/2。默认为
true
。 waf.fail_open.enabled
-
表示如果 Amazon WAF启用了该功能的负载均衡器无法将请求转发到目标,则是否允许其将请求路由到 Amazon WAF目标。可能的值为
true
和false
。默认为false
。
注意
引入了 routing.http.drop_invalid_header_fields.enabled
属性以提供 HTTP 不同步保护。添加 routing.http.desync_mitigation_mode
属性以为您的应用程序提供更全面的保护,使其免受 HTTP 不同步的影响。您无需同时使用这两个属性,可以根据应用程序的要求选择其中一个。
IP 地址类型
您可以设置客户端可用于访问面向 Internet 和内部的负载均衡器的 IP 地址类型。
应用程序负载均衡器支持以下 IP 地址类型:
ipv4
-
客户端必须使用 IPv4 地址(例如 192.0.2.1)连接到负载均衡器。
dualstack
-
客户端可以使用地址(例如 192.0.2.1)和 IPv4 IPv6 地址(例如,2001:0 db 8:85 a 3:0:0:8 a2e:0370:7334)连接到负载均衡器。
注意事项
-
负载均衡器根据目标组的 IP 地址类型与目标进行通信。
-
当您为负载均衡器启用双堆栈模式时,Elastic Load Balancing 为负载均衡器提供 AAAA DNS 记录。使用 IPv4 地址与负载均衡器通信的客户端会解析 A DNS 记录。使用 IPv6 地址与负载均衡器通信的客户端会解析 AAAA DNS 记录。
-
阻止通过互联网网关对内部双堆栈负载均衡器的访问,以防意外访问互联网。但是,这并不能阻止非 IGW 互联网访问(例如,通过对等互连、Transit Gateway 或 Amazon Direct Connect)。 Amazon VPN
-
dualstack-without-public-ipv4
-
客户端必须使用 IPv6 地址(例如,2001:0 db 8:85 a 3:0:0:8 a2e: 0370:7334)连接到负载均衡器。
注意事项
-
Application Load Balancer 身份验证仅 IPv4 在连接到身份提供商 (IdP) 或 Amazon Cognito 终端节点时支持。如果没有公共 IPv4 地址,负载均衡器就无法完成身份验证过程,从而导致 HTTP 500 错误。
-
有关 IP 地址类型的更多信息,请参阅更新应用程序负载均衡器的 IP 地址类型。
IPAM IP 地址池
IPAM IP 地址池是 Amazon VPC IP 地址管理器 (IPAM) 中连续的 IP 地址范围(或 CIDRs)的集合。通过将 IPAM IP 地址池与 Application Load Balancer 配合使用,您可以根据自己的路由和安全需求组织 IPv4 地址。必须先在 IPAM 中创建 IPAM IP 地址池,然后才能由您的应用程序负载均衡器使用。有关更多信息,请参阅将您的 IP 地址带到 IPAM。
注意事项
-
IPAM IP 地址池与内部负载均衡器或没有公有 IP 地址类型的双栈不兼容。 IPv4
-
如果负载均衡器当前正在使用 IPAM IP 地址池中的 IP 地址,则无法将其删除。
-
在过渡到不同的 IPAM IP 地址池期间,现有连接将根据负载均衡器 HTTP 客户端 keepalive 持续时间终止。
-
IPAM IP 地址池可以在多个账户之间共享。有关更多信息,请参阅为 IPAM 配置集成选项
IPAM IP 地址池允许您选择将部分或全部公共 IPv4 地址范围带入应用程序负载均衡器,并将其与应用程序负载均衡器一起使用。 Amazon 通过更好地控制 IP 地址分配,您可以更有效地管理和实施安全策略和控制,同时还可以从更低的成本中受益。在应用程序负载均衡器中使用 IPAM IP 地址池不会产生任何额外费用,但是,根据使用的层级,IPAM 可能会产生相关费用。有关更多信息,请参阅 Amazon VPC 定价
启动 EC2 实例和应用程序负载均衡器时,始终优先考虑您的 IPAM IP 地址池,当您的 IP 地址不再使用时,它们将立即恢复可用。如果您的 IPAM IP 地址池中没有其他可分配的 IP 地址,则会分配 Amazon 托管 IP 地址。 Amazon 托管 IP 地址会产生额外费用。要添加其他 IP 地址,可以向现有 IPAM IP 地址池中添加新的 IP 地址范围。
负载均衡器连接
在处理请求时,负载均衡器会维护两个连接:一个与客户端的连接和一个与目标的连接。负载均衡器与客户端之间的连接也称为前端连接。负载均衡器与目标之间的连接也称为后端连接。
跨可用区负载均衡
对于应用程序负载均衡器,默认情况下启用跨可用区负载均衡,无法在负载均衡器级别进行更改。有关更多信息,请参阅《Elastic Load Balancing 用户指南》中的跨可用区负载均衡。
可以在目标组级别关闭跨可用区负载均衡。有关更多信息,请参阅 关闭跨可用区负载均衡。
DNS 名称
每个 Application Load Balancer 都会收到一个默认的域名系统 (DNS) 名称,其语法如下:name
-id
.elb。 region
.amazonaws.com。例如, my-load-balancer-1234567890abcdef。elb.us-east-2.amazonaws.com。
如果更喜欢使用更容易记住的 DNS 名称,则可以创建自定义域名并将其与应用程序负载均衡器的 DNS 名称相关联。在客户端使用此自定义域名进行请求时,DNS 服务器将它解析为应用程序负载均衡器的 DNS 名称。
首先,向经认可的域名注册商注册域名。接下来,使用您的 DNS 服务(如您的域注册商)创建一条 DNS 记录将请求路由到您的应用程序负载均衡器。有关更多信息,请参阅您的 DNS 服务的文档。例如,如果您将 Amazon Route 53 用作 DNS 服务,请创建一条指向应用程序负载均衡器的别名记录。有关更多信息,请参阅 Amazon Route 53 开发人员指南中的将流量路由到 ELB 负载均衡器。
应用程序负载均衡器针对每个启用的可用区都有一个 IP 地址。这些是应用程序负载均衡器节点的 IP 地址。应用程序负载均衡器的 DNS 名称解析为这些地址。例如,假设您的应用程序负载均衡器的自定义域名是 example.applicationloadbalancer.com
。使用以下 dig 或 nslookup 命令确定应用程序负载均衡器节点的 IP 地址。
Linux 或 Mac
$
dig +short
example.applicationloadbalancer.com
Windows
C:\>
nslookup
example.applicationloadbalancer.com
应用程序负载均衡器具有其节点的 DNS 记录。您可以使用具有以下语法的 DNS 名称来确定 Application Load Balancer 节点的 IP 地址:az
。 name
-id
.elb。 region
.amazonaws.com。
Linux 或 Mac
$
dig +short
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com
Windows
C:\>
nslookup
us-east-2b.my-load-balancer-1234567890abcdef.elb.us-east-2.amazonaws.com