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

通过Kubernetes Ingress访问Pod中Angular应用的配置与故障排查

核心故障原因
  • 静态资源路径不匹配
    现有Dockerfile执行Angular构建时未指定--base-href参数,打包生成的index.html内所有JS、CSS静态资源的引用路径默认是站点根路径/。当通过Ingress提供的/angular-app/ser/路径访问时,页面发起的静态资源请求会直接向http://localhost/runtime-xxx.js这类根路径地址发起请求,完全不匹配Ingress配置的路由规则,导致请求无法被正确转发到后端服务
  • Ingress 路由规则逻辑错位
    配置的nginx.ingress.kubernetes.io/rewrite-target: "/$1"规则会剥除请求中的/angular-app/ser/前缀,将转发给后端Nginx服务的路径修改为不带前缀的相对路径。这套逻辑本身没有问题,但和未配置base-href的Angular应用叠加后,所有未命中/angular-app/ser/前缀的请求会被Ingress判定为无匹配后端服务,直接返回503错误
  • 路由匹配失效导致返回默认页
    当请求的路径不满足Ingress配置的/angular-app/ser/(.*)匹配规则时,Ingress找不到可转发的后端服务,会返回自身的默认错误页;部分场景下转发逻辑错位时,会命中后端Nginx的默认欢迎页配置,出现访问Ingress地址却显示Nginx默认首页的问题
修复方案
  1. 调整Angular构建参数
    修改Dockerfile中的构建命令,补上与Ingress访问路径一致的base-href配置,保证页面内静态资源的引用路径带上正确的访问前缀:
    RUN npm run build -- --output-path=./dist/out --configuration $configuration --base-href=/angular-app/ser/
    
  2. 修正Ingress路由逻辑
    如果需要保留现有路径前缀对外暴露的能力,可直接移除rewrite注解,让完整的请求路径带着/angular-app/ser/前缀转发给后端服务。只要保证Angular的base-href配置和对外暴露的路径完全一致,后端Nginx就能正常找到对应目录下的静态资源
    如果需要保留现有rewrite剥除前缀的逻辑,需要确认正则捕获组的配置和当前集群内Ingress-Nginx的版本匹配,避免因匹配规则兼容问题导致路由失效
  3. 完善后端Nginx配置
    在nginx-custom.conf的server块内补充单页应用路由兼容配置,避免页面刷新时出现404错误:
    server {
        listen 80;
        server_name localhost;
        root /usr/share/nginx/html;
        index index.html index.htm;
        location / {
            try_files $uri $uri/ /index.html;
        }
    }
    
  4. 校验Service关联状态
    确认Ingress配置中引用的angular-ser服务,其selector标签能正确匹配运行Angular应用的Pod,且Service的端口映射和Pod内Nginx服务的暴露端口一致。如果Service没有关联到健康的Pod端点,即使Pod本身可以通过IP直接访问,Ingress转发请求时也会返回503

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.29 05:06:08