我有不同的反应应用程序及其后端服务在Openshift内部独立部署。其中有一个应用程序,用户使用此应用程序中提供的链接登录并导航到应用程序。
目前,每个应用程序的链接直接指向反应应用程序的“Openshift Route”(类似于Kube Ingress)。
但是,对于生产区域,我们必须改变它的工作方式。有一个公共领域,比如apps.mydomain.com
。我们应该通过这条路径加载每个应用程序的链接,apps.mydomain.com/reactapp1
应该加载reactapp1和reactapp2应该加载到apps.mydomain.com/reactapp2
等等。
因此,有一个配置了路径的Ingress配置
rules:
- host: apps.mydomain.com
http:
paths:
- backend:
serviceName: home
servicePort: 8080
path: /
- backend:
serviceName: react-app-1
servicePort: 8080
path: /reactapp1
- backend:
serviceName: app-1-api
servicePort: 8080
path: /app1/api
- backend:
serviceName: react-app-2
servicePort: 8080
path: /reactapp2
- backend:
serviceName: app-2-api
servicePort: 8080
path: /app2/api
当我点击网址https://apps.mydomain.com
它加载home
应用程序,登录后,点击应用程序链接应用程序不加载。虽然我可以看到浏览器标题已更改为导航的应用程序,但我收到此错误Uncaught SyntaxError: Unexpected token <
。
经过大量搜索后,我发现如果需要不从root用户部署,则必须以不同的方式配置react应用程序。
我错过了什么?我哪里做错了? Ingress或反应应用程序构建?我可以为每个react-app及其后端api使用相同的域但具有不同路径的不同Ingress吗?
您可以使用openshift路由而不是入口,您可以查看文档如何应用它https://docs.openshift.com/container-platform/3.11/architecture/networking/routes.html#path-based-routes
如果您的应用程序将收到相对路径,请注意一个细节,它不会脱离您的请求,例如:
apps.mydomain.com/app2/api ---> app-2-api.svc:8080/app2/api
我不认为使用Openshift路由器可以解决这个问题(参见this issue)。
使用Nginx Ingress,可以使用注释nginx.ingress.kubernetes.io/rewrite-target: /
轻松完成