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

GKE环境下Ingress资源关联服务后访问返回404如何解决?

故障根因

你遇到的404错误确实和host: "*.example.com"的配置直接相关,核心原因如下:

  • Nginx Ingress是基于请求头的Host字段做路由匹配的,你配置了*.example.com的主机规则后,只有请求头中Host符合该通配规则(比如a.example.com、test.example.com)的流量才会转发到你的Node应用。
  • 如果你直接通过GCP区域IP访问服务,请求的Host字段会默认填充为IP地址,无法匹配你配置的主机规则,流量会被转发到集群默认的default-http-backend,该组件默认对所有未匹配规则的请求返回404。

验证方法

执行以下命令确认故障点:

# 替换<GCP Regional IP>为你的实际IP,手动指定Host头请求
curl -H "Host: test.example.com" http://<GCP Regional IP>

如果该请求返回正常的Hello World响应,即可确认是Host匹配规则导致的问题。

解决方案

根据你的使用场景二选一即可:

方案1:允许任意Host访问(适合测试场景)

直接删除Ingress配置中的host: "*.example.com"字段,修改后规则如下:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-resource
  annotations:
    kubernetes.io/ingress.class: nginx
    nginx.ingress.kubernetes.io/ssl-redirect: "false"
spec:
  rules:
  - http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: node-app-blue-helm-chart
            port:
              number: 80

修改后所有请求不管Host头是什么都会转发到你的Node应用,直接用IP访问即可正常返回结果。

方案2:保留域名匹配规则(适合正式使用场景)

在本地hosts文件中添加如下记录(Windows系统路径为C:\Windows\System32\drivers\etc\hosts,Linux/Mac路径为/etc/hosts):

<GCP Regional IP> test.example.com

保存后直接访问http://test.example.com即可正常访问服务。如果是对外提供服务,将你的域名DNS解析的通配记录指向该GCP IP即可。

其他可选检查项

如果上述操作后仍有问题,可以按以下步骤排查:

  1. 确认Node应用Pod运行正常:
kubectl get pods -l app.kubernetes.io/instance=node-app-blue
  1. 集群内部访问服务验证可用性:
kubectl run -it --rm --image=curlimages/curl curl -- curl http://node-app-blue-helm-chart.default.svc

如果内部访问正常,说明问题仍出在Ingress配置层,检查是否有其他Ingress规则冲突即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:39:00