如何确保 gsutil 复制不使用外部 Internet?

Posted

技术标签:

【中文标题】如何确保 gsutil 复制不使用外部 Internet?【英文标题】:How to ensure gsutil copy does not use external Internet? 【发布时间】:2021-01-24 01:06:29 【问题描述】:

我有一个使用 this guide 在 GCP 上构建的 Minecraft 服务器。它在 GCP us-central1-f (Iowa) 上运行,在 us-central1 (Iowa) 上有一个区域存储桶。我有一个 cronjob 设置来运行一个 bash 脚本,以使用 gsutil 每 4 小时将世界文件(大约 2GB)备份到存储桶中。这是备份脚本:

#!/bin/bash
FILENAME=$(date "+%Y%m%d-%H%M%S")-world.tar.gz 

screen -r mcs -X stuff 'save-all flush\nsave-off\n'
tar -zcvf /home/minecraft/$FILENAME /home/minecraft/world /home/minecraft/world_nether /home/minecraft/world_the_end
/usr/bin/gsutil cp /home/minecraft/$FILENAME gs://path-to-bucket-minecraft-backup/$FILENAME 
screen -r mcs -X stuff 'save-on\n'
rm /home/minecraft/$FILENAME

我以这种方式运行了大约一个月,我注意到我被收取数百 GB 的外部网络出口费用,并且 Minecraft 服务器上只有 5-10 个用户。我联系了 GCP 支持,他们确认网络数据是传输到存储桶的数据,显然是通过互联网传输的。他们的建议是配置 Private Google Access 以使用 gsutil。

我与另一位 GCP 支持代表合作尝试这样做:

我们编辑了服务器 VM 实例并将“Cloud API 访问范围”设置为“允许完全访问所有 Cloud API” 我们进入默认 VPC 网络并为 us-central1 启用了“私人 Google 访问”。 我们禁用了外部 IP,并确认我可以将文件复制到存储桶,因此可以通过内部网络运行备份。

根据Configuring Private Google Access 上的文档,具有分配给其网络接口的外部 IP 地址的 VM 不需要专用 Google 访问权限来连接到 Google API 和服务。 GCP 支持无法判断备份流量现在是通过内部链接还是外部链接。他们将我指向 Stack Overflow 寻求帮助。

所以我想我的问题是,我需要做些什么来确保我使用 gsutil cp 的备份通过内部网络传输,而不是通过互联网传输?我需要调整路由吗?我已经阅读了documentation on gsutil,但我没有找到任何关于如何指定流量如何流动的信息。

提前感谢您的帮助!

【问题讨论】:

【参考方案1】:

根据官方文档:

Private Google Access

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

Private Google Access 对具有外部 IP 地址。具有外部 IP 地址的实例可以访问 互联网,根据互联网访问要求。他们不 需要任何特殊配置才能向外部 IP 发送请求 Google API 和服务的地址。

因此,我相信只有当您的 VM 具有内部 IP 地址时,您才能在内部网络上使用 gsutil。

【讨论】:

以上是关于如何确保 gsutil 复制不使用外部 Internet?的主要内容,如果未能解决你的问题,请参考以下文章

gsutil 从 s3 匿名复制?

如何使用 gsutil 从 GCE 上的容器中复制存储桶中的文件

在附加日期时间的同时使用 gsutil 复制文件

如何在使用 gsutil 保留 ACL 的同时将文件从 Google Cloud Storage 存储桶 1 复制到存储桶 2

如何使用 gsutil 将所有文件和子文件夹从当前目录复制/移动到 Google Cloud Storage 存储桶

如何跳过 gsutil rsync 中的现有文件