You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GKE Ingress后端不健康,如何查看健康检查请求日志及排查?

排查GKE默认Ingress后端UNHEALTHY问题的实战方案

遇到GKE默认Ingress显示后端UNHEALTHY但集群内Pod、NodePort都能正常返回200的情况,结合你提到的日志异常(没收到GoogleHC/1.0请求、健康检查频率异常),我整理了几个针对性的排查步骤:

1. 从Cloud Logging(原Stackdriver)挖掘健康检查核心日志

GKE默认Ingress依赖GCP的HTTP(S)负载均衡健康检查,所有健康检查的细节都会存在Cloud Logging里,你可以用以下过滤规则精准定位:

  • 查看负载均衡的健康检查请求日志:
    替换你的项目ID和后端服务名(就是Ingress注解里的k8s-be-xxx格式的名称):
    resource.type="http_load_balancer"
    logName="projects/[你的项目ID]/logs/requests"
    jsonPayload.requestMetadata.requestReason="HEALTH_CHECK"
    jsonPayload.destination.serviceName="[你的后端服务名]"
    
    这些日志会直接告诉你健康检查的请求路径、响应码、是否超时、源IP等关键信息——比如是不是请求发错了路径,或者Pod根本没收到请求。
  • 查看Ingress控制器(GLBC)的同步日志:
    GKE默认Ingress控制器是kube-system里的glbc容器,你可以看它有没有正确识别你的Service和Pod配置:
    resource.type="k8s_container"
    cluster_name="[你的集群名]"
    namespace_name="kube-system"
    container_name="glbc"
    
    如果控制器同步配置时出错,这里会有明确的报错信息。

2. 验证健康检查的实际配置是否符合预期

从你说的“故障应用没收到GoogleHC请求”来看,大概率是健康检查的目标配置错了。GKE默认Ingress会自动根据Pod的就绪探针和Service配置生成健康检查,你可以手动核对:

  • 先通过后端服务名查健康检查关联:
    gcloud compute backend-services describe [你的后端服务名] --project [你的项目ID]
    
    输出里会有healthChecks字段,拿到健康检查的名称。
  • 然后查看健康检查的具体参数:
    gcloud compute health-checks describe [健康检查名称] --project [你的项目ID]
    
    重点对比QA集群的健康检查配置,看看是不是请求路径、端口、协议、超时时间不一致——比如故障集群的健康检查可能请求了/healthz但你的Pod只监听/,或者端口指向了Pod没开放的端口。

3. 排查健康检查串扰的可能性

你提到健康检查频率远高于配置的60秒,怀疑有其他应用的健康检查串入,可以这么验证:

  • 在Cloud Logging里过滤所有健康检查请求,看看源IP是不是来自多个健康检查池,或者有没有其他后端服务的请求打到你的Pod上;
  • 检查你的Pod标签是不是和其他应用的Service选择器重叠——如果别的应用的Service选择器刚好匹配你的Pod标签,GKE会自动把你的Pod加到那个Service的后端,对应的健康检查也会打到你的Pod上;
  • 遍历集群内所有Ingress和Service,看看有没有其他资源使用了相同的NodePort(30606),或者和你的Pod标签匹配的选择器。

4. 手动模拟健康检查请求,验证网络连通性

既然你能通过集群内节点IP+NodePort访问,那可以模拟GCP健康检查的请求格式,从VPC内的机器或者集群节点发送请求:

curl -H "User-Agent: GoogleHC/1.0" http://[Pod的内网IP]:[Pod监听端口]/[健康检查路径]

如果这里能正常返回200,但健康检查还是失败,那大概率是NetworkPolicy或者VPC防火墙阻止了健康检查的源IP——GCP健康检查的源IP段是130.211.0.0/22和35.191.0.0/16,你需要确保Pod的NetworkPolicy允许这些IP段的访问。

总结你的场景的大概率原因

结合你提到的“没收到GoogleHC请求”“健康检查频率异常”,最可能的几个原因是:

  1. Ingress控制器(GLBC)没有正确同步健康检查的路径/端口配置;
  2. VPC防火墙或Pod的NetworkPolicy阻止了GCP健康检查的源IP;
  3. 其他应用的Service选择器误匹配了你的Pod,导致健康检查串扰。

内容的提问来源于stack exchange,提问作者Sebbe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:44:24