我们目前有一个在 Compute VM 上运行的 Web 应用,并且正在逐步将其迁移到 Cloud Run。(我们之所以逐步进行,是因为当前的后端使用 PHP,而我们正在使用 Go 重写它,一次一个端点)
我们的网站当前可通过以下方式访问:
https://www.myapp.com
以及 API 位于:
https://www.myapp.com/books
我们的计划是让新的 Cloud Run/Go API 可以通过“v2”路径访问:
https://www.myapp.com/v2/books
或在子域名上
https://v2.myapp.com/books
然后根据已完成的迁移内容决定在客户端使用哪个 API。
我想知道解决这个问题的好方法是什么。
我作为 GCP 初学者考虑过的事情
我们已经在计算虚拟机上运行了 nginx,因此需要为https://www.myapp.com/v2起初这似乎是个好主意,但目前似乎没有办法通过私有 IP 从 Compute 访问 Cloud Run,因此请求必须通过互联网发出,从而减慢速度(也不确定反向代理到外部 URL 是否会导致身份验证等问题?)
随着https://v2.myapp.com/books选项,但 Cloud Run 的自定义域映射似乎仍处于预览版本因此我对于在生产系统中使用它犹豫不决,而且理想情况下我们希望使用我们自己的 SSL 证书,但似乎不受支持。
Firebase 托管选项似乎有点复杂,并且请求超时时间为 60 秒,这对于我们收到的一些视频上传等来说太短了。
将负载均衡器连接到 NEG 会增加一点复杂性/成本,但这似乎是另一种选择。看起来无服务器 NEG 无法连接到 Compute,而托管 VM NEG 无法连接到 Cloud Run,那么在这种情况下我需要每个 NEG 各一个吗?
答案1
下面评论你提到的所有 4 个选项
- 我们已经在计算虚拟机上运行了 nginx,因此需要为https://www.myapp.com/v2起初这似乎是个好主意,但目前似乎没有办法通过私有 IP 从 Compute 访问 Cloud Run,因此请求必须通过互联网发出,从而减慢速度(也不确定反向代理到外部 URL 是否会导致身份验证等问题?)
从技术上来说,这是正确的,您可以设置 Cloud Run 服务以仅接受来自 VPC 的流量(这称为 Ingress 选项,您可以在此处的文档 [1] 中阅读相关内容)。当您这样做时,您的 Cloud Run 服务将继续在看似公共的 URL(部署服务时生成的 URL)上提供服务。但该 URL 只能从 VPC 访问,即使客户端似乎将调用互联网服务,该流量仍会保留在我们的网络中,永远不会离开我们的主干网,因此从技术上来说,这不会增加延迟。
- 随着https://v2.myapp.com/books选项,似乎 Cloud Run 的自定义域映射仍处于预览版本,因此我对于在生产系统中使用它犹豫不决,而且理想情况下我们希望使用我们自己的 SSL 证书,但似乎不受支持。
我不建议在生产中使用预览功能,因为该功能可能会以向后不兼容的方式发生变化。关于使用您自己的 SSL 证书,您可以在 Cloud Run 服务(设置为私有)前面部署 HTTP LoadBalancer,并自定义 LoadBalancer 以满足您的需求。
- Firebase 托管选项似乎有点复杂,并且请求超时时间为 60 秒,这对于我们收到的一些视频上传等来说太短了。
我不太熟悉 Firebase。
- 将负载均衡器连接到 NEG 会增加一点复杂性/成本,但这似乎是另一种选择。看起来无服务器 NEG 无法连接到 Compute,而托管 VM NEG 无法连接到 Cloud Run,那么在这种情况下我需要每个 NEG 各一个吗?
LoadBalancer 选项看起来很复杂,但实际上并非如此,您可以使用 Terraform 之类的东西来配置 LoadBalancer,只需执行一次
希望这能帮助你了解你的选择[1]https://cloud.google.com/run/docs/securing/ingress