Kubernetes Ingress跨命名空间路径路由出现HTTP404问题求助
问题分析与修复方案
你的判断是对的,核心问题就是缺少路径重写配置,另外还有两处配置遗漏需要修正:
问题根源
当你访问myapp-region1.onazure.com/testing/openapi.json时,当前Ingress会把完整路径/testing/openapi.json直接转发给default-testing命名空间的后端服务。但后端服务的接口是基于根路径/设计的(比如它期望收到的请求是/openapi.json),找不到/testing/openapi.json这个路由,所以返回404。
具体修复步骤
1. 启用并修正路径重写注释
把注释掉的nginx.ingress.kubernetes.io/rewrite-target打开,设置为/$1,配合正则化的path规则提取/testing之后的路径部分。
2. 恢复pathType: Prefix
在Kubernetes Ingress v1版本中,pathType是必填字段,注释掉会导致Ingress配置不生效或行为异常。
修改后的完整Ingress配置
kind: Ingress apiVersion: networking.k8s.io/v1 metadata: name: liveapi-ingress-object-testing namespace: default-testing annotations: kubernetes.io/ingress.class: public-nginx nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: tls: - hosts: - myapp-region1.onazure.com - myapp-region2.onazure.com secretName: ingress-tls-csi-testing rules: - host: myapp-region1.onazure.com http: paths: - path: /testing(/|$)(.*) pathType: Prefix backend: service: name: liveapi-svc-testing port: number: 8080 - host: myapp-region2.onazure.com http: paths: - path: /testing(/|$)(.*) pathType: Prefix backend: service: name: liveapi-svc-testing port: number: 8080
说明
- 正则路径
/testing(/|$)(.*)会匹配所有以/testing开头的请求(包括/testing本身和/testing/openapi.json这类子路径) rewrite-target: /$1会把匹配到的$1部分(也就是/testing之后的内容)转发给后端服务,比如/testing/openapi.json会被重写为/openapi.json发给后端,这样就能匹配到服务的正确路由了。
内容的提问来源于stack exchange,提问作者Artur123
相关产品推荐
相关产品推荐

