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

Angular SSR与静态服务的Kubernetes Ingress配置问题排查

问题分析与解决方案

你的核心问题出在Ingress的rewrite规则配置错误,以及静态服务的路由适配问题,导致Angular应用的资源加载或路由逻辑异常,触发TypeError: Cannot read properties of undefined (reading 'call')错误。

1. 修复Ingress的Rewrite规则

当前Ingress配置中的rewrite-target: /$1需要配合带捕获组的path使用,但你定义的路径没有设置捕获组,导致请求被错误重写,破坏了Angular应用的资源路径和路由逻辑。

修正后的Ingress配置(推荐)

移除不必要的rewrite规则,直接转发请求:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: c-frontend-dev
  namespace: development
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:
  ingressClassName: nginx
  rules:
    - host: "demo.example.com"
      http:
        paths:
          # SSR路径:直接转发完整路径
          - pathType: Prefix
            path: "/pages/subscriptions"
            backend:
              service:
                name: c-ssr-dev
                port:
                  number: 4000
          # 静态资源路径:匹配所有根路径请求
          - pathType: Prefix
            path: "/"
            backend:
              service:
                name: c-static-dev
                port:
                  number: 8080

若需保留rewrite规则的替代方案

如果业务需要使用rewrite,给路径添加捕获组:

apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: c-frontend-dev
  namespace: development
  annotations:
    nginx.ingress.kubernetes.io/ssl-redirect: "true"
    nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
  ingressClassName: nginx
  rules:
    - host: "demo.example.com"
      http:
        paths:
          - pathType: Prefix
            path: "/pages/subscriptions/(.*)"
            backend:
              service:
                name: c-ssr-dev
                port:
                  number: 4000
          - pathType: Prefix
            path: "/(.*)"
            backend:
              service:
                name: c-static-dev
                port:
                  number: 8080

2. 调整静态服务的构建与启动配置

构建时指定基础路径

修改镜像构建脚本中的npm run build命令,明确指定Angular的基础路径为根目录:

RUN npm run build --prod-nocdn -- --base-href /

优化serve命令参数

确保serve的单页应用模式正确生效,添加--single参数避免路由404:

CMD ["serve", "-s", ".", "-l", "8080", "--single"]

3. 验证SSR服务的路由兼容性

通过端口转发测试SSR服务的完整路径,确认服务本身能正确处理请求:

kubectl port-forward service/c-ssr-dev 4000:4000 -n development

访问http://localhost:4000/pages/subscriptions,检查页面渲染和资源加载是否正常。

4. 排查具体错误源

打开浏览器控制台,查看触发错误的具体资源路径。通常这类call属性未定义的错误,是因为某个JS文件加载失败(比如路径错误导致404),导致依赖的函数未初始化。重点检查静态资源的请求URL是否符合预期。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 08:35:56