排查 GKE 中的负载均衡问题


本页面介绍如何使用 Service、Ingress 或 Gateway 资源解决与 Google Kubernetes Engine (GKE) 集群中的负载均衡相关的问题。

外部 Ingress 生成 HTTP 502 错误

请按照以下指导信息来排查外部 Ingress 资源的 HTTP 502 错误:

  1. 为 Ingress 所引用的每个 GKE Service 相关联的每个后端服务启用日志
  2. 使用状态详细信息确定出现 HTTP 502 响应的原因。指示源自后端的 HTTP 502 响应的状态详细信息需要在服务 Pod(而非负载均衡器)中进行问题排查。

非代管实例组

如果外部 Ingress 使用非托管式实例组后端,您可能会遇到外部 Ingress 资源的 HTTP 502 错误。当满足以下所有条件时,就会出现此问题:

  • 集群的所有节点池中的节点总数很多。
  • Ingress 引用的一个或多个 Service 的服务 Pod 仅位于几个节点上。
  • Ingress 引用的 Service 使用 externalTrafficPolicy: Local

如需确定外部 Ingress 是否使用非代管实例组后端,请执行以下操作:

  1. 前往 Trusted Cloud 控制台中的 Ingress 页面。

    进入 Ingress

  2. 点击外部 Ingress 的名称。

  3. 点击负载均衡器的名称。此时会显示 Load balancing details(负载均衡详情)页面。

  4. 查看后端服务部分中的表,以确定外部 Ingress 使用的是 NEG 还是实例组。

如需解决此问题,请使用以下解决方案之一:

  • 使用 VPC 原生集群。
  • 为外部 Ingress 引用的每个 Service 使用 externalTrafficPolicy: Cluster。此解决方案会导致您丢失数据包来源中的原始客户端 IP 地址。
  • 使用 node.kubernetes.io/exclude-from-external-load-balancers=true 注解。为未对集群中任何外部 Ingress 或 LoadBalancer Service 引用的任何 Service 运行任何服务 Pod 的节点或节点池添加注解。

使用负载均衡器日志进行问题排查

您可以使用内部直通网络负载均衡器日志外部直通网络负载均衡器日志来排查负载均衡器的问题,并将从负载均衡器到 GKE 资源的流量关联起来。

日志会按连接汇总并近乎实时地导出。系统将为 LoadBalancer Service 的数据路径中涉及的每个 GKE 节点生成入站和出站流量日志。日志条目包含 GKE 资源的其他字段,例如:

  • 集群名称
  • 集群位置
  • 服务名称
  • 服务命名空间
  • Pod 名称
  • Pod 命名空间

使用诊断工具排查问题

check-gke-ingress 诊断工具会检查 Ingress 资源是否存在常见配置错误。您可以通过以下方式使用 check-gke-ingress 工具:

  • 在集群上运行 gcpdiag 命令行工具。Ingress 结果显示在检查规则 gke/ERR/2023_004 部分中。
  • 按照 check-gke-ingress 中的说明,单独使用 check-gke-ingress 工具或是用作 kubectl 插件。