reactjs - 在 Kubernetes Ingress 后面为静态反应应用程序提供服务
问题描述
我目前正在尝试将 React SPA 设置为 kubernetes 上的部署/服务。就像我目前正在运行的后端服务一样,我希望能够在 Ingress 后面点击它。
因为 SPA 只是一堆静态文件,所以我通过 nginx 公开这些文件。在部署中运行的容器安装了 nginx 来提供静态资产(nginx -g daemon off
在 docker 文件中)。如果我使用 a 公开部署,这完全可以正常工作LoadBalancer
,但如果我使用 Ingress,我不会得到任何响应。在入口后面提供静态资产时,有什么特别的事情需要考虑吗?或任何已知的参考/资源这样做?
这是我的 ingress.yml:
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-ingress
annotations:
kubernetes.io/ingress.global-static-ip-name: web-static-ip
nginx.ingress.kubernetes.io/rewrite-target: /$1
spec:
rules:
- host: api.my-domain.com
http:
paths:
- backend:
serviceName: web-backend-service
servicePort: 80
- host: app.my-domain.com
http:
paths:
- backend:
serviceName: web-frontend-service
servicePort: 80
解决方案
您需要在集群上部署一个入口控制器,才能使入口资源真正生效。这是 Nginx 入口控制器的安装指南。提供静态内容的示例入口如下所示。
apiVersion: extensions/v1beta1
kind: Ingress
metadata:
name: web-ingress
annotations:
kubernetes.io/ingress.class: "nginx"
nginx.ingress.kubernetes.io/add-base-url: "true"
nginx.ingress.kubernetes.io/rewrite-target: /
spec:
rules:
- host: api.my-domain.com
http:
paths:
- backend:
serviceName: web-backend-service
servicePort: 80
- host: app.my-domain.com
http:
paths:
- backend:
serviceName: web-frontend-service
servicePort: 80
这是有关如何使用 Nginx ingress 在 Minikube 上提供 Angular 8 应用程序的指南。
推荐阅读
- c# - 如何从一个数据库创建多个表(ASP.NET MVC)?
- java - 在 Java 中使用正则表达式替换多个值
- angular - RxJS 运算符延迟、计时器和间隔有什么区别?
- javascript - 在 ReactJS 中呈现已解决或拒绝的 Promise 值
- django - 从文件 URL 确定模型实例
- database - 寻找一种更好的方法来记录或跟踪脚本何时运行
- mysql - NodeJs + MySql 连接池 ER_WAIT_LOCK_TIMEOUT 有时只有
- mobile - Forge Viewer 中的选定元素在 Android 移动浏览器的 2D 视图中显示不正确
- reactjs - 不能在 react-router-dom 组件中使用 React 钩子
- java - 我如何使用从表单中获得的值作为我的 dao 类中的变量?