首页/云/Kubernetes 速查/Ingress 默认后端与 404 行为
网络与服务55 条

Ingress 默认后端与 404 行为

请求不匹配任何规则时的兜底:控制器自带默认后端(通常返回 404),也可在 Ingress 上指定 defaultBackend 指向自建兜底服务。

Kubernetes 速查云更新于 2026-10-13

兜底后端是什么

Ingress 按 host 与 path 匹配请求,没命中任何规则的请求交给默认后端:控制器自带一个默认后端(通常直接返回 404),也可以在 Ingress 上写 defaultBackend 指向自己的兜底服务,用于返回品牌页、维护通知或统一错误页。它只处理「没匹配上规则」的情形;规则命中而后端应用自己返回 404,与默认后端无关,两者的日志来源不同。

基本信息

适用平台networking.k8s.io/v1 的 Ingress
关键字段spec.defaultBackend,以及控制器全局的默认后端配置
默认行为未命中规则时返回 404
排查入口控制器访问日志、响应头特征、kubectl describe ingress
影响范围该 Ingress 覆盖的域名,或整个控制器的未匹配流量

典型使用场景

  • 品牌兜底页:把未匹配域名引导到统一入口而不是干巴巴的 404
  • 维护公告:维护窗口把兜底页指向提示服务,先挡住错误路径
  • 多域名共用入口:不同域名分别写规则,其余流量走默认后端
  • 排查区分:借助默认后端快速判断请求是没匹配上还是后端应用返回
  • 安全收敛:把扫描类请求统一引到无信息的兜底页,减少信息暴露

Ingress 级默认后端

Ingress 级默认后端
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: web-ing
  namespace: prod
spec:
  ingressClassName: nginx
  defaultBackend:
    service:
      name: fallback-web
      port:
        number: 80
  rules:
    - host: app.example.com
      http:
        paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: web
                port:
                  number: 80

排查 404 来源

排查 404 来源
kubectl describe ingress web-ing -n prod | grep -A10 Rules
curl -sv -H 'Host: app.example.com' http://<入口IP>/not-exist      # 看响应头判断来源
kubectl -n ingress-nginx logs deploy/ingress-nginx-controller | grep 404 | tail
kubectl get ingressclass                                   # 确认 Ingress 归属哪个控制器

404 的几种来源

现象可能原因确认方法
访问某个域名返回 404host 与规则不一致或路径未匹配用 curl -H Host 逐条复现
响应头带控制器特征控制器默认后端返回看控制器访问日志
响应头是应用框架特征后端应用自身返回看应用访问日志
所有域名都异常IngressClass 或规则未生效kubectl describe ingress 看事件
规则里的 host 必须与实际访问域名完全一致(含子域);用 curl 的 Host 头复现是最省事的验证方式,能一次排除 DNS 与客户端因素。
默认后端的匹配细节由控制器实现决定,不同控制器对规则与默认后端的优先级处理可能不同,不要把某一种行为当成 Kubernetes 标准。

易错点

  • host 与访问域名不一致:请求落到默认后端返回 404,却去查后端应用日志,方向完全跑偏
  • pathType 用错:Prefix 与 Exact 的匹配范围不同,部分路径意外落到默认后端
  • 自建默认后端服务未就绪:未匹配请求得到 5xx,比 404 更难看且更容易造成误解
  • 多控制器共存时 IngressClass 写错:Ingress 被另一个控制器忽略,表现为整个域名不可访问

数据来源与参考

  • Kubernetes 官方文档 · Ingress(Default backend)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌