裸金属K8s集群v1版本Ingress部署前后端服务异常问题咨询
问题1:同根路径多React前端部署冲突问题
根因
networking.k8s.io/v1版本的Ingress规则中,同域名下路径前缀完全相同的多条规则,会被nginx ingress controller按Ingress资源的创建时间排序合并,请求会被随机分发到匹配到的多个后端Service,导致请求串发、响应异常、访问变慢。你当前两个Ingress都配置了/前缀路径,且无主机名区分,必然出现冲突。
解决方案(无可用主机名场景)
因为无法使用基于主机名的路由,推荐通过路径前缀区分两套前端,配合React项目侧的路由配置即可解决:
- 修改React项目配置
给两套前端分别分配独立的访问前缀,比如web1用/web1、web2用/web2
修改react-router配置,给BrowserRouter添加basename属性,以web1为例:
修改前端打包配置,将<BrowserRouter basename="/web1"> {/* 原有路由规则不变 */} </BrowserRouter>publicPath设置为对应前缀(比如web1设置为/web1/),保证静态资源路径正确。 - 修改Ingress配置
合并为单个Ingress资源,配置不同的路径前缀,按需添加重写规则:apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: web-ingress annotations: nginx.ingress.kubernetes.io/rewrite-target: /$2 spec: ingressClassName: nginx rules: - http: paths: - path: /web1(/|$)(.*) pathType: Prefix backend: service: name: web1-service port: number: 4000 - path: /web2(/|$)(.*) pathType: Prefix backend: service: name: web2-service port: number: 5000
问题2:maptiler服务接入Ingress后静态资源报错问题
根因
Unexpected '<'报错的本质是:请求静态资源(css/js)时,后端返回的是HTML内容(首字符为<),被浏览器当成js/css解析导致报错。你的配置存在两个明确错误:
pathType: Exact是精确匹配,你配置的路径是/styles/*,只有请求路径完全等于/styles/*时才会命中规则,正常的/styles/xxx.css根本无法匹配- 就算请求命中规则,
nginx.ingress.kubernetes.io/rewrite-target: /会把所有请求路径重写为/,请求/styles/main.css最终转发到map服务的根路径/,返回的是服务首页HTML,直接触发报错。
解决方案
根据maptiler服务的实际路径配置调整Ingress规则:
如果maptiler的静态资源本身就暴露在/styles路径下,直接删除重写注解,修改路径匹配规则即可:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-map annotations: nginx.ingress.kubernetes.io/enable-cors: "true" spec: ingressClassName: nginx rules: - http: paths: - path: /styles pathType: Prefix backend: service: name: map-service port: number: 7000
如果需要把/styles/xxx的请求转发到map服务的/xxx路径,用捕获组规则配置重写:
apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: ingress-map annotations: nginx.ingress.kubernetes.io/enable-cors: "true" nginx.ingress.kubernetes.io/rewrite-target: /$1 spec: ingressClassName: nginx rules: - http: paths: - path: /styles/(.*) pathType: Prefix backend: service: name: map-service port: number: 7000
内容的提问来源于stack exchange,提问作者Denn
相关产品推荐
相关产品推荐

