本页面简要介绍了全球外部应用负载平衡器和传统应用负载平衡器之间的差异,并详细介绍了如何将现有的传统应用负载平衡器资源迁移到全球外部应用负载平衡器。
如需利用全球外部应用负载平衡器的高级流量管理功能,我们建议您将传统版应用负载平衡器资源迁移到全球外部应用负载平衡器基础架构。
比较传统应用负载平衡器和全球外部应用负载平衡器
在迁移资源之前,请了解传统应用负载平衡器和全球外部应用负载平衡器之间的区别。
功能差异
全局外部应用负载均衡器不支持以下功能。它们仅适用于传统应用负载均衡器:
- 标准网络层级
-
如需为 GKE 集群部署全球外部应用负载均衡器,请改用 GKE Gateway Controller。如需查看设置说明,请参阅部署网关。
数据平面差异
下表重点说明了传统应用负载均衡器和全球外部应用负载均衡器在数据平面方面的差异。这些差异会影响负载均衡器响应一些常见事件的方式。
活动 | 传统应用负载均衡器响应 | 全球外部应用负载均衡器响应 |
状态/错误代码 | ||
所有后端的健康状况都不佳 | 返回 HTTP 502 | 返回 HTTP 503 |
请求使用被禁止的 SSL 加密 | 返回 HTTP 502 | 返回 HTTP 503 |
后端重置上行连接过早 | 返回 HTTP 502 | 返回 HTTP 503 |
连接升级失败(例如,升级到 Websocket 时) | 返回 HTTP 400 | 返回 HTTP 403 |
标头过大 | 返回 HTTP 413 | 返回 HTTP 431 |
配额和限制 | ||
网址映射配置 | 两个负载均衡器之间的网址映射配置限制存在明显差异。如需了解详情,请参阅《配额:网址映射》文档。 | |
标头处理 | ||
请求使用无正文的自定义 HTTP 方法 | 为发送到后端的请求添加 Transfer Encoding: Chunked 标头 |
为发送到后端的请求添加 Content-Length: 0 标头 |
为发送到后端的请求添加的 X-Forwarded-For 标头的格式 |
在 IP 之间使用“, ”分隔符 |
在 IP 之间使用“, ”分隔符(英文逗号后面没有空格) |
标头大小写保留 | 标头大小写会保留 | 所有标头键都会转换为小写 |
名称相同的重复标头 | 允许 | 重复标头可以合并为一个标头,并按顺序附加值,以英文逗号分隔,如 RFC 7230 所允许的那样。 |
(仅限 HTTP/1.1)无效的标头名称(例如,标头中不受支持的字符) | 允许(对于 HTTP/1.1) | 返回 HTTP 502(对于 HTTP/1.1) |
(仅限 HTTP/1.1)请求中重复(但相同)的 Content-Length 标头 |
允许(对于 HTTP/1.1) | 返回 HTTP 502(对于 HTTP/1.1) |
(仅限 HTTP/1.1)标头中的多个主机 | 如果添加了两个或更多主机,并且第一个主机有效,则系统会接受标头 | 如果添加了两个或更多主机,并且有任何主机无效,则负载均衡器会返回 HTTP 502 |
(仅限 HTTP/1.1)Connection: Keep-Alive 标头 |
默认情况下在发送到后端的请求中添加 Keep-Alive header 。 |
默认情况下不添加此标头 |
请求处理 | ||
请求中的反斜杠 | 网址保持不变 | 转换为正斜杠 |
合并请求中重复的斜杠 | 不合并斜杠 | 合并斜杠 |
请求路径中的“#” | 允许 | 返回 HTTP 400 |
(仅限 HTTP/1.1)请求路径中不符合规定的字符(例如“\\x7f\\x7f”) | 允许(对于 HTTP/1.1) | 返回 HTTP 502(对于 HTTP/1.1) |
流量分配(网址映射配置) | ||
客户端请求包含端口号 | 即使您在网址映射中为主机配置了端口,系统也会忽略端口号;而只会考虑主机名。
例如,example.com:5000 的请求会与 example.com 的后端服务进行匹配。 |
系统会同时考虑主机名和端口号。
例如,example.com:5000 的请求会与 example.com:5000 的后端服务进行匹配。如果没有匹配项,则系统会使用默认后端服务。 |
如需详细了解差异和支持的功能,请参阅负载平衡器功能比较和应用负载平衡器概览。
从传统应用负载平衡器迁移到全球外部应用负载平衡器
如需迁移到全球外部应用负载平衡器,您需要将负载均衡资源(具体而言是后端服务和转发规则)的负载均衡方案从 EXTERNAL
更改为 EXTERNAL_MANAGED
。为此,您需要执行一系列迁移步骤,在实际完成迁移之前,您可以使用新的负载均衡方案测试网络流量的部分内容。在资源迁移期间,您可以控制发送到传统版应用负载平衡器基础架构或全球外部应用负载平衡器基础架构的请求所占的百分比。
下图显示了迁移前后负载均衡资源的负载均衡方案。
在上图中,请注意以下事项:
- 在资源迁移之前,所有请求都使用经典版应用负载平衡器基础架构。
- 在迁移资源期间,部分请求会发送到全球外部应用负载平衡器基础架构,其余请求会发送到传统应用负载平衡器基础架构。
- 资源迁移后,所有请求都将使用全球外部应用负载平衡器基础架构。
为确保顺利完成过渡,请按指定顺序迁移以下传统应用负载平衡器资源:
迁移附加到负载均衡器转发规则的所有后端服务。
迁移附加到负载均衡器转发规则的所有后端存储分区。您可以在转发规则级别执行此操作,因为后端存储分区没有负载均衡方案。
迁移负载均衡器的转发规则。
只有在与转发规则关联的所有后端服务和后端存储分区都已迁移完毕后,您才能迁移转发规则。
迁移状态
您可以先将资源设置为不同的状态,然后再将其负载均衡方案更改为 EXTERNAL_MANAGED
,以便迁移资源。
PREPARE
:将资源设为此状态,以便为迁移做好准备。TEST_BY_PERCENTAGE
:如需测试已准备好的资源,请将资源设为此状态,以发送一定百分比的网络流量。此阶段是可选的。TEST_ALL_TRAFFIC
:将资源设为此状态,以便通过全球外部应用负载平衡器基础架构(而非传统应用负载平衡器基础架构)将所有网络流量发送到该资源。
迁移过程
为确保不会出现任何停机时间,您需要按照特定顺序将资源从传统版应用负载平衡器基础架构迁移到全球外部应用负载平衡器基础架构,然后将负载均衡方案从 EXTERNAL
更改为 EXTERNAL_MANAGED
以完成迁移。
迁移负载均衡器的后端服务。
对每个后端服务重复以下步骤。
为后端服务做好迁移准备。
在通过全球外部应用负载平衡器基础架构发送任何流量之前,请将后端服务的状态设置为
PREPARE
。这会准备后端服务来处理全球外部应用负载平衡器基础架构网络流量。后端服务需要一些时间(大约 6 分钟)才能准备好通过全球外部应用负载平衡器基础架构发送流量。可选:测试准备好的后端服务。
后端服务处于
PREPARE
状态后,将其状态设为TEST_BY_PERCENTAGE
,并将传统版应用负载平衡器网络流量的百分比设为全球外部应用负载平衡器基础架构。虽然此阶段是可选的,但我们建议您在迁移后端服务之前测试流量。先从较小的百分比值开始,并监控资源的日志。如果后端服务的行为符合预期,请将百分比逐步提高到 100%。
在
TEST_BY_PERCENTAGE
状态下,您无法使用全球外部应用负载平衡器基础架构的其他功能。将所有传统应用负载平衡器网络流量发送到准备好的后端服务。
后端服务测试成功后,将其状态设为
TEST_ALL_TRAFFIC
,并将所有传统应用负载平衡器网络流量发送到准备好的后端服务。后端服务需要一些时间(大约 6 分钟)才能准备好处理网络流量。在
TEST_ALL_TRAFFIC
状态下,您无法使用全球外部应用负载平衡器基础架构的其他功能。将迁移的后端服务的负载均衡方案更改为
EXTERNAL_MANAGED
。在全球外部应用负载平衡器基础架构上测试准备好的后端服务后,将其负载均衡方案更改为
EXTERNAL_MANAGED
。后端服务需要一些时间(大约 6 分钟)才能完全迁移。后端服务的负载均衡方案更改为EXTERNAL_MANAGED
后,您就可以使用全球外部应用负载平衡器基础架构的高级功能。
迁移负载均衡器的后端存储分区。您可以在转发规则级别执行此操作,因为后端存储分区没有负载均衡方案。
对每个存储桶重复以下步骤。
为后端存储桶做好迁移准备。
在通过全球外部应用负载平衡器基础架构发送任何流量之前,请将后端存储桶的状态设置为
PREPARE
,然后等待一段时间(大约 6 分钟)。可选:测试准备好的后端服务。
后端存储桶处于
PREPARE
状态后,将其状态设为TEST_BY_PERCENTAGE
,并将传统应用负载平衡器网络流量的百分比设置为全球外部应用负载平衡器基础架构。将所有传统版应用负载平衡器网络流量发送到准备好的后端存储桶。
将后端存储桶的状态设置为
TEST_ALL_TRAFFIC
,并将所有传统版应用负载平衡器网络流量发送到该存储桶。后端存储桶需要一些时间(大约 6 分钟)才能准备好处理网络流量。在
TEST_ALL_TRAFFIC
状态下,您无法使用全球外部应用负载平衡器基础架构的其他功能。
迁移转发规则。
对于每条转发规则,请将转发规则的负载均衡方案更改为
EXTERNAL_MANAGED
,然后等待一段时间(大约 6 分钟)。转发规则的负载均衡方案更改为EXTERNAL_MANAGED
后,您就可以使用全球外部应用负载平衡器基础架构的高级功能。
如需了解详细的分步流程,请参阅从传统版应用负载平衡器迁移资源。
下图显示了处于不同迁移状态的传统应用负载平衡器资源。
迁移资源后,如果您想将其回滚到传统应用负载平衡器,请在迁移后的 90 天内更改其负载均衡方案。90 天期限过后,您将无法回滚资源。
使用会话亲和性
迁移具有会话亲和性的传统版应用负载平衡器后端服务时,请注意以下事项:
为
TEST_BY_PERCENTAGE
设置值会将一些定位到传统应用负载平衡器的流量重定向到全球外部应用负载平衡器。这会破坏客户端 IP 亲和性。更改迁移百分比(例如将其增加 10%)会破坏相同百分比(在此示例中为 10%)的客户端 IP 地址的会话亲和性,直到在下一个请求中重新建立亲和性为止。为
TEST_BY_PERCENTAGE
设置值会将不含会话 Cookie 的流量百分比重定向到全球外部应用负载平衡器。它还会将包含会话 Cookie 的所有流量重定向到生成该 Cookie 的负载均衡器服务器群。如果将
TEST_BY_PERCENTAGE
的值设置为 0%,或将其留空,或者将后端服务设置为PREPARE
状态,则会使所有指向全球外部应用负载平衡器的现有 Cookie 失效。将后端服务的负载均衡方案更改为
EXTERNAL_MANAGED
会使传统版应用负载均衡器服务器群组生成的所有 Cookie 失效。这样,如果使用全球外部应用负载平衡器的应用出现问题,您就可以回滚流量。例如,如果客户端提供来自传统应用负载平衡器服务器群的 Cookie,但后端服务架构为EXTERNAL_MANAGED
,则系统不会使用客户端的 Cookie。全球外部应用负载平衡器会忽略该 Cookie 并创建一个新 Cookie。
回滚已迁移的资源
迁移资源后,如果您想将其从全球外部应用负载平衡器基础架构回滚到传统版应用负载平衡器基础架构,可以在更改其负载均衡方案后的 90 天内执行此操作。
将后端服务回滚到 EXTERNAL
方案需要回滚转发规则。将转发规则回滚到 EXTERNAL
方案不需要回滚后端服务。
如需回滚资源,请按以下步骤操作:
- 移除在资源上配置的全球外部应用负载平衡器的所有新高级流量管理功能。
回滚转发规则。
将转发规则的负载均衡方案从
EXTERNAL_MANAGED
更改为EXTERNAL
。回滚后端存储分区。
- 将后端存储分区的迁移状态设置为
TEST_ALL_TRAFFIC
,然后等待一段时间(大约 6 分钟)。 - 可选:如需减少流量,请将后端存储分区的迁移状态设为
TEST_BY_PERCENTAGE
,并设置流量的百分比。 - 将后端存储分区的迁移状态设置为
PREPARE
。 - 将后端存储分区还原为迁移前的状态。
- 将后端存储分区的迁移状态设置为
回滚后端服务。
- 将后端服务的迁移状态设置为
TEST_ALL_TRAFFIC
,然后等待一段时间(大约 6 分钟)。 - 可选:如需减少流量,请将后端服务的迁移状态设置为
TEST_BY_PERCENTAGE
,并设置流量百分比。 - 将后端服务的迁移状态设置为
PREPARE
。 - 将后端服务还原为迁移前的状态。
- 将后端服务的迁移状态设置为
如需了解详细的分步过程,请参阅将已迁移的资源回滚到传统应用负载平衡器。
跟踪迁移过程
迁移资源时,您可以通过查看以下内容来检查其负载均衡方案:
全球外部应用负载平衡器的日志记录和监控信息中心。如需了解详情,请参阅全球外部应用负载平衡器日志记录和监控。
以下 HTTP 请求和响应标头的值:
X-External-Managed-Migration-Scheme-Override
:此请求标头会根据其值路由请求。如果标头值为EXTERNAL
,则会将请求定向到传统版应用负载平衡器基础架构。如果值为EXTERNAL_MANAGED
,则会通过全球外部应用负载平衡器基础架构路由请求。使用此标头可将请求定向到特定的负载均衡器舰队。
X-External-Managed-Migration-Selected-Scheme
:此请求和响应标头会告知后端和客户端用于路由请求的负载均衡方案。系统会将标头返回给客户端,并传递给客户的后端。如果请求通过传统版应用负载平衡器基础架构路由,其值为
EXTERNAL
。如果请求通过全球外部应用负载平衡器基础架构进行路由,其值为EXTERNAL_MANAGED
。