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

Kubernetes中配置host的ingress-2无法访问而ingress-1正常问题排查

问题根因

你遇到的404报错是Ingress路径转发时未做重写,后端服务不存在对应请求路径导致的,具体逻辑如下:

  • Ingress规则默认会将完整的请求路径原封不动转发给后端服务,你访问myapp.com/nginx时,后端nginx服务收到的请求路径是/nginx,而你部署的官方默认nginx、httpd镜像的站点根目录下没有/nginx、/httpd的对应路径,因此返回404。
  • 你之前使用ingress-1时正常,是因为ingress-1为无host匹配的默认Ingress规则,你大概率为该规则配置了nginx.ingress.kubernetes.io/rewrite-target: /的路径重写注解,你贴出的ingress-1配置未完整展示注解部分;当你切换到ingress-2时未同步配置该注解,因此触发404。

修复方案

给ingress-2加上nginx ingress controller的路径重写注解即可,修改后的完整配置参考:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: ingress-2
  annotations:
    # 重写规则:把/nginx、/httpd开头的路径重写到根路径/转发给后端
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  rules:
  - host: "myapp.com"
    http:
      paths:
      - pathType: Prefix
        path: "/nginx"
        backend:
          service:
            name: nginx-svc
            port:
              number: 80
      - pathType: Prefix
        path: "/httpd"
        backend:
          service:
            name: httpd-svc
            port:
              number: 80

如果需要支持/nginx/xxx转发到后端/xxx的场景,改用如下重写规则即可:

annotations:
  nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - host: "myapp.com"
    http:
      paths:
      - pathType: Prefix
        path: "/nginx(/|$)(.*)"
        backend:
          service:
            name: nginx-svc
            port:
              number: 80
      # httpd路径配置同理

验证方法

配置更新后,你可以直接进入后端nginx pod执行curl 127.0.0.1/nginx验证,原生默认镜像会直接返回404,说明路径问题和Ingress路由匹配无关,Ingress已经将请求正确转发到了后端服务。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 21:24:01