GCP:使用私有 IP 地址从另一个项目访问 mysql 服务器

GCP: Access to a mysql server from another project with a private IP adress

我的问题:

在 google 云上,我有两个项目:ProjectA 和 ProjectB。 在 ProjectA 中,我有一个 mysql 服务器。 在 ProjectB 中,我有一个虚拟机需要连接到 mysql 服务器。 我更喜欢使用私人地址(为了安全,因为 mysql 过滤来自 public IP 的访问)。

我试过的:

我在每个项目中都创建了一个网络并相互对等。 但是它不起作用,我认为是因为通过将 mysql 服务器分配给网络,它创建了一个专用服务连接,该连接具有专用于服务的 IP 范围,该连接没有对等(它不在导出的对等网络的路由)。

如何让它工作,什么是好的方法?

目前,有一个 GCP VPC 对等 restriction 用于“传递对等”

Only directly peered networks can communicate. Transitive peering is not supported. In other words, if VPC network N1 is peered with N2 and N3, but N2 and N3 are not directly connected, VPC network N2 cannot communicate with VPC network N3 over VPC Network Peering.

当您使用具有私有 IP 的 GCP 云 SQL 实例时,它会自动创建一个与不同 GCP 项目和您的 GCP 对等的 VPC,这将发生在“项目 A”和您对等的那一刻使用“项目 B”,那么您将陷入这种可传递的对等限制。

为了解决这个问题,这里有几个解决方案:

  1. 使用 Shared VPC 以便在项目 b 中拥有虚拟机,但在项目 a 网络中。 (限制,两个项目必须在同一个组织中)
  2. 用 Cloud VPN 替换项目 A 和 B 之间的 VPC 对等互连(我建议设置一个动态 (BGP) HA/Classic)。 (限制,你将被收取每边的“出口流量”)
  3. 创建一个可以用作它们之间桥梁的虚拟机,我之前使用以下 iptables 和启用的 ip 转发进行了测试:
iptables -t nat -A POSTROUTING -s <source-ip-range> -o <network-interface> -j MASQUERADE
iptables -t nat -A PREROUTING -i <network-interface> -p tcp --dport <cloud-sql-port> -j DNAT --to <cloud-sql-ip>
iptables -A FORWARD -p tcp -d <cloud-sql-ip> --dport <cloud-sql-port> -j ACCEPT

(限制,取决于您选择的 VM 类型,您可能会受到限制 bandwidth