Google Cloud Kubernetes Ingress遇default backend -404错误求助
问题诊断与修复方案
从你提供的kubectl describe ing输出里的警告信息——failed to identify user specified default backend, couldn't find nodeport for default/sv-security, using system default——就能定位到核心问题:你在Ingress配置里错误地使用了NodePort(32290),或者虽然尝试过用Service的80端口,但配置逻辑存在问题,导致GKE的Ingress控制器无法正确关联到你的后端Service。
具体错误点
- Ingress的作用是将外部流量路由到集群内的Service,它需要关联的是Service的ClusterIP端口(也就是你Service定义里的
spec.port: 80),而非NodePort。NodePort是给集群外部直接访问节点用的,Ingress控制器不会通过NodePort来转发流量。 - 你尝试用
servicePort: 32290是完全错误的,这会让Ingress控制器找不到正确的后端路径,最终 fallback到系统默认的404 backend。
修正后的Ingress配置
把你的Ingress YAML改成下面这样,确保指向Service的ClusterIP端口(80),同时推荐使用更稳定的networking.k8s.io/v1 API版本(GKE已支持很久):
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-sv-security annotations: kubernetes.io/ingress.allow-http: "false" spec: defaultBackend: service: name: sv-security port: number: 80
额外检查项
- 确认后端Pod的健康状态:GKE的Ingress控制器只会把流量转发到处于
Ready状态的Pod。你可以用kubectl get pods -l run=sv-security查看Pod状态,确保每个Pod都配置了就绪探针(readinessProbe),且探针返回成功。 - 验证Service与Pod的关联:执行
kubectl describe service sv-security,检查Endpoints字段是否有Pod的IP地址——如果是空的,说明Service的标签选择器和Pod的标签不匹配,需要修正Pod的run: sv-security标签。 - 等待Ingress控制器完成配置:GKE创建Ingress后需要几分钟时间配置负载均衡器,你可以通过
kubectl get ingress ingress-sv-security查看ADDRESS字段是否稳定,并且事件里没有新的警告。
为什么之前的配置失败?
当你指定servicePort: 32290时,Ingress控制器会尝试寻找Service上对应的端口定义,但你的Service里并没有定义port: 32290(只有nodePort: 32290),所以控制器找不到匹配的端口,只能使用系统默认的后端,最终出现404错误。
内容的提问来源于stack exchange,提问作者Vandeperre Maarten
相关产品推荐
相关产品推荐

