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

Kubernetes使用Ingress部署ASP.NET Core应用时CSS、JS资源404问题

问题根因

你的静态资源加载404的核心原因是ASP.NET Core应用输出的静态资源引用使用了站点根路径的绝对地址,与Ingress配置的路径前缀不匹配:

  1. 你通过Ingress访问web1的地址是 http://tasty.taco.com/web1,Ingress将路径重写为 / 转发给web1服务,应用返回的HTML里静态资源路径是 /lib/bootstrap/xxx.css 这种根路径格式
  2. 浏览器解析时会把该路径拼在域名后,发起的请求地址是 http://tasty.taco.com/lib/bootstrap/xxx.css,该请求无法匹配Ingress配置的/web1//web2前缀规则,所以返回404
  3. 直接访问ClusterIP服务时没有前缀,应用根路径就是/,所以静态资源请求路径完全匹配,没有问题。
解决方案

给你三种可落地的方案,按需选择:

方案1:修改Ingress配置+调整应用PathBase(推荐,保留路径前缀规则)

第一步:修改Ingress资源配置

将rewrite规则改为带捕获组的形式,同时添加X-Forwarded-Prefix头告知应用当前的路径前缀:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /$2
  name: taco-ingress
spec:
  rules:
   - host: tasty.taco.com
     http:
       paths:
       - path: /web1(/|$)(.*)
         pathType: Prefix
         backend:
           service:
             name: web1
             port:
               number: 80
       - path: /web2(/|$)(.*)
         pathType: Prefix
         backend:
           service:
             name: web2
             port:
               number: 80

第二步:给ASP.NET Core应用配置PathBase

在应用的Program.cs(.NET 6+)或Startup.cs(旧版本)中添加PathBase配置,让应用自动识别路径前缀生成正确的资源地址:

// Program.cs示例,在其他中间件之前添加
app.UsePathBase("/web1"); // web2应用就填/web2
app.UseStaticFiles(); // 保证静态资源也能识别路径前缀

重新打包镜像上传后重启Deployment即可。

方案2:使用子域名区分不同应用(最简单,无需修改应用代码)

给每个应用分配独立的子域名,去掉路径前缀配置,就不存在路径匹配问题:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: taco-ingress
spec:
  rules:
   - host: web1.tasty.taco.com
     http:
       paths:
       - path: /
         pathType: Prefix
         backend:
           service:
             name: web1
             port:
               number: 80
   - host: web2.tasty.taco.com
     http:
       paths:
       - path: /
         pathType: Prefix
         backend:
           service:
             name: web2
             port:
               number: 80

配置后分别通过http://web1.tasty.taco.com和http://web2.tasty.taco.com访问即可。

方案3:修改应用静态资源为相对路径(不推荐,维护成本高)

把HTML中所有/lib/xxx、/css/xxx的根路径引用改为相对路径,比如./lib/xxx,但这种方式需要修改所有页面的资源引用,后续迭代容易出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 01:45:05