入口路由 - 基于路径的路由到不同的React app

问题描述 投票:4回答:2

我有不同的反应应用程序及其后端服务在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吗?

reactjs kubernetes openshift kubernetes-ingress
2个回答
1
投票

您可以使用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


-2
投票

我不认为使用Openshift路由器可以解决这个问题(参见this issue)。

使用Nginx Ingress,可以使用注释nginx.ingress.kubernetes.io/rewrite-target: /轻松完成

© www.soinside.com 2019 - 2024. All rights reserved.