mok*_*oku 8 reactjs google-cloud-platform google-cloud-cdn google-cloud-load-balancer
我一直在四处寻找是否有可能在 Google Cloud Storage 存储桶中托管静态 React 应用程序并使用 Google Cloud CDN 和单个 Google Cloud Load Balancer 将缓存未命中路由到存储桶,管理证书,并将来自 React 应用程序的内部请求路由到 GKE 中托管的 API?
是否有可能实现这种架构,或者是否有另一种推荐的方法?
您可以拥有一个带有(两个或更多)路由匹配器的负载均衡器,一个用于 api.example.com 并带有 GKE 的后端,另一个用于带有后端存储桶的 static.example.com。
此后端存储桶将启用 CDN。如果需要,您可以将多个路由指向同一个后端。
具体来说:
创建由独立网络端点组表示的 Kubernetes 服务。这将允许您在 GKE 之外管理负载均衡器。文档:https : //cloud.google.com/kubernetes-engine/docs/how-to/standalone-neg
创建一个 HTTP(S) 负载均衡器,使用您想要匹配 API 端点的路由。在负载均衡器创建流程中创建一个 BackendService,并将其指向您在第 1 步中创建的现有区域网络端点组。文档:https : //cloud.google.com/load-balancing/docs/https/https-load-balancer-example
在同一流中创建一个 BackendBucket,将其指向您要用于存储静态 React 资产的存储桶。确保勾选“启用云 CDN”框并创建将流量发送到该存储桶的路由。文档:https : //cloud.google.com/cdn/docs/using-cdn#enable_existing
完成 LB 的创建,该 LB 将分配 IP 地址,并更新您的域名的 DNS 以指向这些 IP。
使用这种方法首先要考虑的是,CDN 位于负载均衡器之前,而不是相反。这意味着 CDN 不涉及路由。路由是在CDN 缓存请求内容后完成的。
除此之外,CDN仅在第一次缓存未命中后才开始缓存内容。这意味着只有在客户端请求该资源后才需要第一次获取该资源。
如果资源尚未缓存在 CDN 中,则它将被路由到后端(通过负载均衡器)以检索它并制作“本地副本”。当然,这需要该资源也存在于后端,以便CDN对其进行缓存。
您的方法似乎假设 CDN 将充当不同类型的持久层,因此我相信它仍然是可能的,但不使用 Cloud CDN,而是使用Cloud Storage 存储桶。
由于存储桶具有多区域类别,因此您也许能够实现与使用 CDN 尝试的非常相似的效果。
更新:
考虑新的前提:使用相同的负载均衡器在 GCS 存储桶中托管的静态站点和 GKE 中部署的 API 之间路由请求,CDN 位于其前面并支持证书。
尽管HTTP(S) 负载均衡器可以管理证书,与 Cloud CDN 兼容,可以将存储桶或 GCE 实例作为后端,并且是 GKE 中的默认 [Ingress] 选项(因此它也与其兼容),但这种方法并不能似乎可行。
当您使用部署此类负载均衡器的默认入口类 (GCE)在 GKE 上公开应用程序时,GKE云控制器管理器负责该资源并依赖于部署到 GKE 的定义。
如果您尝试手动管理负载均衡器以添加新后端(在您的情况下是包含静态应用程序的存储桶),则如果将新版本的 Ingress 部署到集群,则更改可能会被逆转。
在相反的情况下,您手动创建负载均衡器并配置其后端来为存储桶的内容提供服务:不支持将此负载均衡器附加到 GKE 集群,它必须在 Kubernetes 中创建。
因此,简而言之:要么将负载均衡器与存储桶一起使用,要么与 GKE 集群一起使用,但由于上述设计,不能同时使用两者。
ingress如果您部署 2 个不同的负载均衡器(就 GKE 而言)并将 CDN 与存储桶放在负载均衡器前面,这当然是完全可能的。我提到这一点是为了与上面的信息进行对比。
让我知道这是否有帮助:)
| 归档时间: |
|
| 查看次数: |
874 次 |
| 最近记录: |