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

Kubernetes Ingress配置问题:请求带/app前缀致Angular资源加载失败

解决方案:修改Ingress配置统一剥离路径前缀

你完全应该选择修改Ingress配置来解决这个问题——这不仅能一次性搞定前端的资源加载问题,后续你的.NET Core后端也能复用同样的规则,避免每个服务单独处理前缀的麻烦。

问题根源

当前你的Ingress配置里,ingress.kubernetes.io/rewrite-target: /只是简单把请求路径替换为根路径,但没保留/app之后的资源路径部分。比如浏览器请求/app/inline.js时,Ingress会转发成/而非/inline.js,导致Nginx找不到对应资源。

修改后的Ingress配置

我们需要用正则捕获组来保留/app之后的路径内容,再通过rewrite规则转发到服务的根路径下。更新后的配置如下:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: fullstack-ingress
  annotations:
    # 若使用官方nginx-ingress控制器,建议用nginx.ingress.kubernetes.io前缀
    nginx.ingress.kubernetes.io/rewrite-target: /$2
spec:
  rules:
  - http:
      paths:
      - path: /app(/|$)(.*)
        backend:
          serviceName: frontend-main
          servicePort: 80
      - path: /core(/|$)(.*)
        backend:
          serviceName: backend-core
          servicePort: 80

配置说明

  1. 正则路径匹配:/app(/|$)(.*)会覆盖两种场景:
    • 精确匹配/app或/app/
    • 匹配/app开头的所有子路径(比如/app/inline.js、/app/styles.css等)
  2. Rewrite规则:/$2表示把捕获到的第二个分组(也就是/app之后的所有内容)拼接到根路径后。举几个例子:
    • 请求/app/ → 转发到/
    • 请求/app/inline.js → 转发到/inline.js
    • 请求/core/api/users → 转发到/api/users(完美适配你的后端服务)

为什么不修改Nginx配置?

如果改前端容器的Nginx配置,你得重新构建Docker镜像、重新部署,而且后续后端服务要处理/core前缀时,还得单独改Kestrel的路由配置——这会大幅增加维护成本。而在Ingress层面处理,所有服务的前缀剥离逻辑统一管理,更符合Kubernetes的网关设计理念。

验证步骤

  1. 应用更新后的Ingress配置:
    kubectl apply -f your-ingress-file.yaml
    
  2. 等待Ingress控制器更新规则后,访问http://[loadbalancerip]/app/
  3. 打开浏览器开发者工具的「网络」面板,查看静态资源请求:此时转发到前端服务的请求应该是/inline.js、/main.js等,资源能正常加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:47:50