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