入口路由-基于路径的路由到其他React应用

时间:2019-04-23 10:33:54

标签: reactjs kubernetes openshift kubernetes-ingress

我在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使用不同的路径吗?

2 个答案:

答案 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: /

轻松完成