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

裸金属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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:36:02