首页 > 解决方案 > 在 React SPA 中将两个子域组合在一起

问题描述

这绝对是一个更具理论性的架构问题,我承认我对 React 或 Kubernetes/Istio 都不是很熟悉,所以如果我感到困惑,我请求你澄清一下。

我正在建立一个 React SPA(单页应用程序)。实际上,我让它运行得很好,它被静态托管在 AWS S3 上,通过 CloudFront 分发,并在域中注册(我们yuchensdomain.com现在称之为)并以 HTTPS 为支持。

不久前我发现了Kubeflow 项目,并且为了好玩而建立了集群,并且 tldr; 在 AWS EKS 上部署后,您将 Istio Ingress Gateway 公开为 AWS ELB。我能够将它部署到我的子域kubeflow.yuchensdomain.com

Kubeflow 还公开了一个非常漂亮的 React 应用程序(请参见下面的屏幕截图,尽管忽略api.ychennay.com域 - 我将其用作我的部署的测试域): 在此处输入图像描述

Kubeflow 的设置很痛苦,并且使用了一堆ksonnet难以挖掘的文件,所以我想把这两个前端应用程序的实际集成留到以后。

我的问题是:鉴于我的 React SPA 的 CNAMEyuchensdomain.com和我的 Kubeflow 的 CNAME 是,将我的 React SPA 连接(路由用户)到 Kubeflow 前端的最佳方式是kubeflow.yuchensdomain.com什么?基本上,我希望在我的 React SPA 中能够执行以下操作:

<Route exact path="kubeflow.yuchensdomain.com" )/>

所以如果我有一些 React 组件,我可以写类似

<Button onClick={()=> goToKubeFlowUrl()}/>

显然,上面的代码不起作用,来自这个Reddit 帖子这个 SO 帖子。我知道这主要是服务器端问题,因为内容是从后端的不同机器提供的。但是,我仍然很想知道是否有围绕这个问题的最佳实践,因为我对 Kubernetes 和 React 都是新手。

如果我能以某种方式配置 AWS ELB 以侦听特定端点,例如yuchensdomain.com/kubeflow并将其路由到,我也会很高兴kubeflow.yuchensdomain.com,但是,我认为这在 AWS 负载平衡中是不可能的。

我最初的猜测是我只需要一个指向的直接 href 链接kubeflow.yuchensdomain.com,如下所示:

class Button extends Component {
  handleOnClick() {
    window.location.assign('https://kubeflow.yuchensdomain.com');
  }

  render() {
    return (
      <button onClick={this.handleOnClick.bind(this)} />
    );
  }
} 

但是,我想知道是否有一种更简单/更清洁的方式在 React 中的不同子域和域之间进行路由。

标签: reactjsamazon-web-serviceskubernetesamazon-route53istio

解决方案


推荐阅读