从 Google Cloud 内部 IP 调用 Google Cloud 存储桶

Posted

技术标签:

【中文标题】从 Google Cloud 内部 IP 调用 Google Cloud 存储桶【英文标题】:Calling Google Cloud Buckets from Google Cloud internal IP 【发布时间】:2020-03-16 11:12:41 【问题描述】:

我在 Google Cloud 上有一个包含文件 (my-large-file.zip) 的存储桶 (my-bucket-name)。我创建了一个带有GET 权限的签名 URL 来下载文件。

我的下载网址如下所示:

https://storage.googleapis.com/my-bucket-name/my-large-file.zip?GoogleAccessId=...

当我从我的开发人员电脑(Google Cloud 外部)下载此 URL 时,它通过 通过互联网下载文件来工作。

我的 Google Cloud 使用相同的 URL 部署应用程序并下载它们。我想知道文件是否也通过互联网传输?或者我可以通过内部网络下载文件。我希望下载性能会快得多。

当代码在 Google Cloud 上运行时,是否可以在不使用互联网的情况下下载文件?

【问题讨论】:

这不能保证。如果您使用的是高级网络,那么所有请求都尽可能保留在 Google 的主干网络中。但是,不要指望网络速度会有很大的变化。性能取决于许多因素,CPU 速度、距离、跳数等。您只需要实施和测试。您的问题需要有关源服务、地区等的确切详细信息。 【参考方案1】:

当代码在 Google Cloud 上运行时,是否可以在不使用互联网的情况下下载文件?

如果您在仅具有内部(私有)IP 地址的虚拟机实例上运行代码, 您可以启用:Private Google Access

只有内部 IP 地址的虚拟机实例(没有外部 IP 地址)可以使用私人谷歌访问。他们可以到达外部 Google API 和服务的 IP 地址

Note:即使 Google API 和服务的 IP 地址是 public,来自使用 Private Google 的实例的流量路径 对 Google API 的访问仍然在 Google 的网络中

注意:即使调用了所需路由的下一跳 “默认互联网网关”和 Google API 的 IP 地址和 服务是公开的,来自 VM 的对 Google API 和服务的请求 在子网 a 中只有内部 IP 地址(其中 Private Google 访问已启用)不通过公共互联网发送。那些 请求保留在 Google 的网络中。此外,仅 有内部IP地址不满足上网 访问其他公共 IP 地址的要求 Google API 和服务。

编辑

我在默认子网上创建了一个只有内部 IP 地址的 Google VM 实例,并开启了私有访问。我无法从我的 VM 访问 Internet,但我可以使用 gsutil 访问云 Google Cloud Storage,并且还能够使用 wget 下载 blob。据我了解,从文档和我的测试来看,从我的实例到 Google API 的流量路径仍然在 Google 的网络中。

【讨论】:

有趣!所以,我使用 Kubernetes 集群。我检查了 pod 的子网络,发现 Private Google access=ON。所以,如果我理解正确 - 我必须继续使用 same URL(就像我在我的开发人员机器中使用的那样),但它会在 Google 网络中路由而不会到达互联网?跨度> 【参考方案2】:

假设您的本地和 Google Cloud 之间有某种形式的互连,您/您的网络管理员希望启用此版本的 Google Cloud 私有访问:https://cloud.google.com/vpc/docs/private-access-options#pga-onprem 如果您希望避免您的开发人员 PC 访问 Google Cloud通过 Internet 存储。

这是否会导致更高的下载量取决于许多细节,包括但可能不限于

往返时间,通过 Internet 或互连 本地 PC 通告的最大 TCP 窗口大小的配置。

对于批量传输,TCP 吞吐量的一个常见限制是:

吞吐量

【讨论】:

以上是关于从 Google Cloud 内部 IP 调用 Google Cloud 存储桶的主要内容,如果未能解决你的问题,请参考以下文章

从具有私有和公共 IP 的虚拟机连接到私有 IP 上的 Google Cloud SQL 实例失败

无法从 GCP 调度程序调用 Google Cloud Function

如何从 google-cloud-platform vminstance 中的 pubsub 回调函数调用全局变量?

从 Google Cloud Function (Python) 将新文件写入 Google Cloud Storage 存储桶

内部 TCP 负载平衡器上的目标端口 - Google Cloud

无法通过 Google Cloud VM 的外部 IP 访问 nginx 容器