Google 云:如何使用 public 主机名在网络内发送数据而不产生数据传输成本?

Google Cloud : How to send data within the network using public hostname without incurring the data transfer cost?

我在 Google 云中的集群上有一个日志聚合器服务 运行。来自 Google 云平台内部和外部的应用程序都应该向该服务发送数据。由于设计原因,所有 internal/external 应用程序只能使用相同的 hostname/ip 与服务通信。

现在,如果我使用外部 IP 作为公布的主机名,系统可以正常工作,但 Google 将向我收取从内部网络中的应用程序向服务发送数据的费用。我想避免承担这笔费用。

另一方面,AWS 提供了一个 public 主机名,它从网络外部解析为 public ip,但从网络内部解析为内部 ip。这样我就可以为服务使用 public 主机名,而不会产生内部数据传输成本。有没有办法在 Google 云中实现同样的事情?

AWS EC2 提供主机名,根据访问位置自动解析为 public 或私有 IP,从而使这一切变得简单。 Google Cloud 目前没有此功能,但有一些解决方法:

  • 使用实例的主机名,而不是 IP。在 GCP 内部使用时,主机名将自动解析为内部 IP。在外面时,您可以在外部机器上编辑本地主机文件以解析到外部 IP。如果你有很多外部机器或者它们不在你的控制范围内,这就不容易扩展。

  • 运行您自己的 DNS 服务器,设置一个新域,并根据请求的来源自动响应正确的 IP。

  • 使用虚拟 SDN(软件定义网络)自动路由流量。所有主机都将位于同一个虚拟 LAN 网络上,您可以在它们之间使用内部 IP。内部主机将自动直接连接,外部主机将使用 public 互联网上的隧道,但两者将使用相同的 IP。 ZeroTier or Pritunl 是不错的选择,具体取决于您的需要。