排查内部应用负载均衡器的问题

本指南介绍了如何排查 Google Cloud 内部应用负载均衡器的配置问题。在按照本指南进行操作之前,请先熟悉以下内容:

排查网络分析器的常见问题

网络分析器会自动监控您的 VPC 网络配置,并检测欠佳配置和错误配置。它可识别网络故障,提供根本原因信息,并建议可能的解决方法。如需了解网络分析器可自动检测到的不同错误配置场景,请参阅网络分析器文档中的负载均衡器数据分析

网络分析器在 Google Cloud 控制台中作为 Network Intelligence Center 的一部分提供。

进入网络分析器

后端具有不兼容的均衡模式

创建负载均衡器时,您可能会看到以下错误:

Validation failed for instance group INSTANCE_GROUP:

backend services 1 and 2 point to the same instance group
but the backends have incompatible balancing_mode. Values should be the same.

如果您尝试在两个不同的负载均衡器中使用同一后端,并且该后端没有兼容的均衡模式,则会发生此错误。

详情请参阅以下内容:

负载均衡流量不含原始客户端的来源地址

这是预期行为。内部应用负载均衡器以 HTTP(S) 反向代理(网关)的形式运行。在一个客户端程序打开与 INTERNAL_MANAGED 转发规则的 IP 地址的连接时,连接会在代理处终止。代理会处理通过该连接到达的请求。对于每个请求,代理都会根据网址映射和其他因素选择接收请求的后端。然后,代理会将该请求发送到选定的后端。因此,从后端的角度来看,传入数据包的来源是区域性代理专用子网中的某个 IP 地址。

负载均衡器拒绝请求

对于每个请求,代理都会根据负载均衡器的网址映射中的路径匹配器选择接收请求的后端。如果网址映射没有为请求定义路径匹配器,则无法选择后端服务,因此它会返回 HTTP 404(未找到)响应代码。

负载均衡器未连接到后端

您需要对保护后端服务器的防火墙进行配置,使其允许来自您分配给内部 HTTP(S) 负载均衡器所在区域的代理专用子网范围内的代理的入站流量。

这些代理会使用您的后端服务配置指定的连接设置连接到后端。如果这些值与您的后端上运行的服务器配置不匹配,则代理无法将请求转发给后端。

健康检查探测无法访问后端

如需验证健康检查流量是否已到达后端虚拟机,请启用健康检查日志记录并搜索成功的日志条目。

客户端无法连接到负载均衡器

代理根据转发规则中指定的协议(HTTP 或 HTTPS),监听与转发规则中配置的负载均衡器 IP 地址和端口(例如,10.1.2.3:80)之间的连接。如果您的客户端无法连接,请确保其使用的是正确的地址、端口和协议。

确保防火墙并未屏蔽客户端实例与负载均衡 IP 地址之间的流量。

确保客户端与负载均衡器位于同一区域。内部 HTTP(S) 负载均衡是区域性产品,因此所有客户端(和后端)都必须与负载均衡器资源位于同一区域。

共享 VPC 的组织政策限制

如果您使用的是共享 VPC,并且无法在特定子网中创建新的内部应用负载均衡器,则原因可能在于组织政策。在组织政策中,将该子网添加到允许的子网列表中,或与组织管理员联系。如需了解详情,请参阅 constraints/compute.restrictSharedVpcSubnetworks

负载均衡器不会跨可用区均匀分配流量

您可能会发现可用区之间的内部应用负载均衡器流量不均衡。当后端容量的利用率较低 (< 10%) 时,可能会发生这种情况。

由于流量仅发送到一个可用区中的几个服务器,因此此类行为可能会影响整体延迟时间。

如需在各个可用区之间均匀分配流量,可进行以下配置更改:

  • 使用 RATE 均衡模式采用max-rate-per-instance目标容量。
  • 使用 LocalityLbPolicy 后端流量政策LEAST_REQUEST 负载均衡算法。

原因不明的 5xx 错误

对于由负载均衡器代理与其后端之间的通信问题导致的错误情况,负载均衡器会生成 HTTP 状态代码 (5xx),并将该状态代码返回给客户端。并非所有 HTTP 5xx 错误都是由负载均衡器生成的,例如,如果后端向负载均衡器发送 HTTP 5xx 响应,则负载均衡器会将该响应中继到其客户端。如需确定 HTTP 5xx 响应是否从后端中继,或者是否由负载均衡器代理生成,请参阅负载均衡器日志proxyStatus 字段。

对内部应用负载均衡器的配置更改(例如添加或移除后端服务)可能会导致系统在短时间内显示 HTTP 状态代码 503。虽然这些配置更改会在全球范围内传播到 Envoy,但您会看到 proxyStatus 字段与 connection_refused 日志字符串匹配的日志条目。

在完成负载均衡器配置后,如果 HTTP 5xx 状态代码持续几分钟以上,请按照以下步骤排查 HTTP 5xx 响应问题:

  1. 验证是否已配置防火墙规则来允许健康检查。 如果未配置,则负载均衡器日志通常具有与 destination_unavailable 匹配的 proxyStatus,这表示负载均衡器将后端视为不可用。

  2. 验证健康检查流量是否到达后端虚拟机。为此,请启用健康检查日志记录并搜索成功的日志条目。

    对于新负载均衡器,缺少成功的健康检查日志条目并不意味着健康检查流量不会到达后端。这可能意味着后端的初始健康状态尚未从 UNHEALTHY 更改为其他状态。只有在健康检查探测器收到来自后端的 HTTP 200 OK 响应后,您才会看到成功的健康检查日志条目。

  3. 验证在后端实例上运行的 HTTP 服务器软件的 keepalive 配置参数是否不小于负载均衡器的 keepalive 超时,其值固定为 10 分钟(600 秒)且无法配置。

    如果系统在发送 HTTP 请求时或收到完整 HTTP 响应之前与后端的连接意外关闭,则负载均衡器会生成 HTTP 5xx 状态代码。发生这种情况的原因是,后端实例上运行的网络服务器软件的 keepalive 配置参数小于负载均衡器的固定 keepalive 超时。确保每个后端 HTTP 服务器软件的 keepalive 超时配置设置为略长于 10 分钟(建议值为 620 秒)。

限制

如果您在将内部应用负载均衡器与其他 Google Cloud 网络功能搭配使用时遇到问题,请注意当前的兼容性限制