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

GCP GKE Ingress无法访问后端服务,健康检查、防火墙等配置均正常

核心问题解答

端口配置疑问

你当前的端口配置逻辑是正确的:

  • GCE Ingress对接NodePort类型服务时,负载均衡后端默认指向你配置的NodePort 32001,这是符合设计的
  • BackendConfig健康检查配置中填写服务端口80即可,GKE会自动完成映射:负载均衡的健康检查请求先打到节点的32001端口,再由kube-proxy转发到Pod的80端口,不需要手动将健康检查端口改为NodePort
  • 中间的流量转发由GKE内置的kube-proxy组件实现,无需额外配置代理

因果关系说明

是健康检查失败导致负载均衡将后端标记为不可用,进而返回502错误,而非反过来。


问题根因&排查修复步骤

按优先级排序逐一验证:

  1. 修复YAML配置语法错误
    你贴出的配置文件中,BackendConfig资源前后的---分隔符存在缩进错误,YAML对缩进高度敏感,该错误会导致BackendConfig无法被正确识别,健康检查配置无法关联到服务。修正分隔符缩进后执行kubectl get backendconfig,确认资源正常创建无报错。

  2. 验证健康检查接口可用性
    你之前仅验证了根路径的可用性,需确认/health接口返回正常:

kubectl exec adcloud-api-5cb96bb47d-tmrd8 -- curl -I http://localhost/health

确保返回状态码为200 OK,如果返回404等错误,要么修正应用的健康检查路径,要么修改BackendConfig的requestPath为应用实际存在的健康检查路径。

  1. 修正防火墙规则配置
    多数该类问题都是防火墙配置不规范导致的:
  • 确认你创建的防火墙规则源IP范围为GCP官方健康检查网段:130.211.0.0/22 和 35.191.0.0/16
  • 端口范围需覆盖所有NodePort端口:30000-32767,协议为TCP
  • 目标标签必须匹配GKE节点的实际标签(可在GCE实例详情页查看节点标签,通常格式为gke-<集群名>-<节点池名>-<随机后缀>),规则优先级需低于1000(数值越小优先级越高)
  1. 清理残留负载均衡资源
    你看到的不健康后端、实例组显示资源不存在的问题,是因为集群节点重建/扩缩容后,旧的负载均衡后端资源没有被自动清理导致的残留垃圾:
  • 执行kubectl delete ingress api-ingress删除现有Ingress
  • 等待10分钟让GCP完全清理关联的负载均衡、后端服务、实例组资源
  • 重新执行kubectl apply -f deployment.yaml创建所有资源,等待5-10分钟后查看负载均衡状态,残留的不健康后端会自动消失
  1. 手动验证节点端口连通性
    如果以上步骤都完成后仍然异常,可直接验证节点端口的公网连通性:
    找到任意一台GKE节点的公网IP,执行curl http://<节点公网IP>:32001/health,如果不通说明防火墙规则仍然配置错误,如果通则说明健康检查配置仍有问题,可进一步查看GCP负载均衡的健康检查日志定位异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 20:54:04