【发布时间】:2019-12-22 17:23:30
【问题描述】:
我有一个 ReactJS 前端,Spring boot 后端应用程序部署在一个运行 Kubernetes Ingress 的裸机 Kubernetes 集群上,请求由 HAProxy 代理到它。访问应用程序的 URL 时,我可以看到它加载了应用程序的 index.html,但对静态资产的所有其他请求都没有正确完成。
我的应用的入口资源:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
namespace: app
name: app-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/rewrite-target: /$3
spec:
rules:
- host: devops
http:
paths:
- path: /dev/app1(/|$)(.*)
backend:
serviceName: app1
servicePort: 80
在检查使用 Chrome 开发人员工具加载的页面时,我看到有 6 个对静态资产的传出调用。检索应用程序的index.html 的调用成功完成,但检索静态资产的调用(例如:http://devops/dev/app1/static/js/4.2761693d.chunk.js)在检索index.html 页面时无法正常工作。 (基本上所有调用只提供index.html 页面)
我感觉这是因为 nginx.ingress.kubernetes.io/rewrite-target 注释,但即使在 index.html 页面上删除它也会导致 404。
我正在使用 nginx 入口控制器 0.25.1
编辑:
这是我执行到容器中并运行 curl localhost:8080/dev/app1/static/js/4.2761693d.chunk.js(错误后备页面)时的输出
这是我运行 curl localhost:8080/tatic/js/4.2761693d.chunk.js 时的输出(正确加载 css)
【问题讨论】:
-
您的 Spring 应用程序是否在
/static/路由上提供静态资产目录? -
@AnkitDeshpande 在“常规”部署中,Spring 应用程序将在
package.json文件的homepage字段中定义的路由上提供静态资产。对于此部署,我已输入http://devops/dev/app1作为homepage字段的值 -
另外,通过常规部署,我的意思是手动部署,即构建 jar 和
java -jar jar_name.jar -
尝试连接到 pod 并运行
curl localhost<port>/dev/app1/static/js/4.2761693d.chunk.js,这会返回什么? -
检查这是否有帮助:*.com/a/47860209/3968921
标签: kubernetes kubernetes-ingress nginx-ingress