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

Kubernetes Ingress需添加哪些注解解决Angular静态资源404问题?

解决Angular应用在Kubernetes Ingress子路径下静态资源404问题

问题根源

你的Angular应用构建时默认将静态资源的请求路径设为根路径(/),比如请求/main.js、/styles.css等。但当前Ingress配置仅将sport.domain.com/sports路径转发到后端competitions-service,当访问sport.domain.com/sports时,应用发起的根路径资源请求会直接被Ingress拦截(因为没有对应路径规则),导致返回404。

解决方案

方案一:修改Angular构建配置(推荐)

构建Angular应用时,通过--base-href参数指定子路径前缀,让所有静态资源的请求路径自动加上/sports前缀:

ng build --base-href /sports/

如果使用Docker镜像打包,需要在Dockerfile中修改构建命令,加入该参数。构建完成后,应用会请求/sports/main.js这类路径,刚好匹配Ingress的/sports转发规则,静态资源即可正常加载。

方案二:使用Nginx Ingress重写注解(无需修改应用)

如果无法调整应用构建流程,可以通过Ingress的注解实现请求路径重写,把根路径的静态资源请求映射到/sports路径下。修改后的Ingress配置如下:

kind: Ingress
metadata:
  name: sports-ingress
  namespace: default
  annotations:
    # 启用正则匹配
    nginx.ingress.kubernetes.io/use-regex: "true"
    # 将根路径请求重写为/sports下的对应资源
    nginx.ingress.kubernetes.io/rewrite-target: /sports/$1
spec:
  ingressClassName: ingress-nginx
  rules:
  - host: sport.domain.com
    http:
      paths:
      # 匹配根路径下的所有请求(比如/main.js)
      - pathType: Prefix
        path: "/(.*)"
        backend:
          service:
            name: competitions-service
            port:
              number: 80
      # 保留/sports路径的直接访问
      - pathType: Prefix
        path: "/sports"
        backend:
          service:
            name: competitions-service
            port:
              number: 80

这个配置会把sport.domain.com/main.js这类请求重写为sport.domain.com/sports/main.js,再转发到后端服务,从而解决404问题。

注意事项

  • 方案一属于Angular应用部署在子路径下的标准做法,配置更简洁,避免Ingress规则复杂,优先推荐。
  • 若使用方案二,需确保你的Ingress Controller是ingress-nginx(已在配置中指定ingressClassName: ingress-nginx),因为不同Ingress Controller的注解规则不同。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 09:25:26