如果您是传统应用负载均衡器的现有用户,则在规划迁移到全球外部应用负载均衡器或规划使用全球外部应用负载均衡器的新部署时,请务必参阅本页面。
功能差异
全局外部应用负载均衡器不支持以下功能。它们仅适用于传统应用负载均衡器:
- 标准网络层级
-
如需为 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 的后端服务进行匹配。如果没有匹配项,则系统会使用默认后端服务。 |