排查外部直通网络负载均衡器问题

本指南介绍如何排查 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.

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

详情请参阅以下内容:

排查常规连接问题

如果您无法连接到外部直通网络负载均衡器,请检查以下常见问题:

  • 验证防火墙规则。

    • 确保定义了入站允许防火墙规则,以便允许对后端虚拟机进行健康检查。
    • 确保入站允许防火墙规则允许来自客户端的流量流向后端虚拟机。
    • 确保存在相关防火墙规则,以允许流量到达负载均衡器正在使用的端口上的后端虚拟机。
    • 如果您要对防火墙规则使用目标标记,请确保正确标记负载均衡器的后端虚拟机。

    如需了解如何配置外部直通网络负载均衡器所需的防火墙规则,请参阅配置防火墙规则

  • 验证 Google 客机代理是否正在后端虚拟机上运行。如果您可以连接到运行状况良好的后端虚拟机,但无法连接到负载均衡器,则可能是因为虚拟机上的 Google 客机代理(以前称为 Windows 客机环境或 Linux 客机环境)当前未运行或无法与元数据服务器(metadata.google.internal169.254.169.254)通信。

    检查以下内容:

  • 验证后端虚拟机是否接受发送到负载均衡器的数据包。每个后端虚拟机都必须配置为接受发送到负载均衡器的数据包。也就是说,传送到后端虚拟机的数据包的目标是负载均衡器的 IP 地址。在大多数情况下,这通过本地路由来实现。

    对于通过 Google Cloud 映像创建的虚拟机,访客代理会安装负载均衡器的 IP 地址的本地路由。基于 Container-Optimized OS 的 Google Kubernetes Engine 实例使用 iptables 来实现此功能。

    在 Linux 后端虚拟机上,您可以通过运行以下命令来验证本地路由是否存在。将 LOAD_BALANCER_IP 替换为负载均衡器的 IP 地址。

    sudo ip route list table local | grep LOAD_BALANCER_IP
    
  • 验证后端虚拟机上的服务 IP 地址和端口绑定。发送到外部直通网络负载均衡器的数据包到达具有负载均衡器本身的目标 IP 地址的后端虚拟机。这种类型的负载均衡器不是代理,这是一种正常的行为。

    如需查看侦听端口的服务,请运行以下命令:

    netstat -nl | grep ':PORT'
    

    在后端虚拟机上运行的软件必须执行以下操作:

    • 监听(绑定到)负载均衡器的 IP 地址或任意 IP 地址(0.0.0.0::
    • 侦听(绑定到)负载均衡器的转发规则中包含的端口

    如需对此进行测试,请使用 SSH 或 RDP 连接到后端虚拟机。然后,使用 curltelnet 或类似工具执行以下测试:

    • 尝试通过后端虚拟机本身(即 127.0.0.1 或 localhost)的内部 IP 地址与服务联系。
    • 尝试通过负载均衡器转发规则的 IP 地址与服务联系。
  • 验证健康检查流量是否可以到达后端虚拟机。如需验证健康检查流量是否已到达后端虚拟机,请启用健康检查日志记录并搜索成功的日志条目。

排查共享 VPC 问题

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

排查故障切换问题

如果您为外部直通网络负载均衡器配置了故障切换,请按照以下步骤验证配置:

  • 请务必指定至少一个故障转移后端。
  • 验证您的故障切换政策设置
  • 请务必了解活跃池中的成员身份以及 Google Cloud 何时执行故障切换和故障恢复。执行以下操作,检查负载均衡器的配置:

    • 使用 Google Cloud 控制台检查各后端实例组中健康状况良好的后端虚拟机的数量。Google Cloud 控制台还会显示活跃池中的虚拟机。

    • 请务必正确设置负载平衡器的故障转移比率。例如,如果您有 10 个主要虚拟机且故障切换比率设置为 0.2,这表示 Google Cloud 会在正常运行的主要虚拟机数量小于两个 (10 × 0.2 = 2) 时执行故障切换。故障切换比率 0.0 具有特殊含义:Google Cloud 会在所有主要虚拟机均健康状况不佳时执行故障切换。

可能出现的其他问题如下:

  • 活跃池在主后端和故障切换后端之间来回切换(波动)。

    如果将代管式实例组与自动扩缩和故障切换搭配使用,可能导致活跃池在主要后端和故障切换后端之间反复进行故障切换和故障恢复。Google Cloud 不会阻止您使用代管式实例组配置故障切换,因为您的部署可能会受益于此设置。

  • 停用连接排空不起作用。

    只有在使用协议 TCP 设置后端服务时,停用连接排空才会生效。

    如果在停用连接排空的情况下使用 UDP 创建后端服务,则会显示以下错误消息:

    gcloud compute backend-services create my-failover-bs
      --load-balancing-scheme external \
      --health-checks-region us-central1 \
      --health-checks my-tcp-health-check \
      --region us-central1 \
      --no-connection-drain-on-failover \
      --drop-traffic-if-unhealthy \
      --failover-ratio 0.5 \
      --protocol UDP
    ERROR: (gcloud.compute.backend-services.create) Invalid value for
    [--protocol]: can only specify --connection-drain-on-failover if the protocol is
    TCP.
    
  • 在故障切换或故障恢复期间终止现有连接。

    修改您的后端服务的故障切换政策。确保在故障切换时启用连接排空。

排查日志记录问题

如果您为外部直通网络负载均衡器配置日志记录功能,则可能会出现以下问题:

  • 如果没有获取足够的数据包作为样本来捕获 RTT,则某些日志中可能缺少 RTT 测量(如字节值)。在低容量连接中发生这种情况的几率更高。
  • RTT 值仅适用于 TCP 流。
  • 发送的某些数据包没有负载。如果抽样的是仅有标头的数据包,则字节值为 0