我在Openshift内独立部署了不同的react应用程序及其后端服务。其中有一个应用程序,用户可以使用此应用程序中提供的链接登录并导航到其他应用程序。
当前,每个应用程序的链接都直接指向react应用程序的“ 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 <
。
经过大量搜索后,我发现如果不需要从根目录部署React应用,则必须对其进行不同的配置。
我想念什么?我在哪里做错了?进入或响应应用程序构建?我可以在同一个域中使用不同的Ingress,但对每个react-app及其后端api使用不同的路径吗?
答案 0 :(得分:1)
您可以为此使用openshift路由而不是ingress,可以在文档上检查如何应用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
答案 1 :(得分:-2)
我认为使用Openshift路由器无法解决此问题(请参见this issue)。
使用Nginx Ingress,可以使用注释nginx.ingress.kubernetes.io/rewrite-target: /