【问题标题】:GCP: Access to a mysql server from another project with a private IP adressGCP:使用私有 IP 地址从另一个项目访问 mysql 服务器
【发布时间】:2020-11-04 16:34:25
【问题描述】:

我的问题:

在谷歌云上,我有两个项目:ProjectA 和 ProjectB。 在 ProjectA 中,我有一个 mysql 服务器。 在 ProjectB 中,我有一个需要连接到 mysql 服务器的虚拟机。 我更喜欢使用私有地址(出于安全考虑,并且因为 mysql 会过滤来自公共 IP 的访问)。

我尝试了什么:

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

如何让它发挥作用,有什么好的方法?

【问题讨论】:

  • 在项目 A 中,您是使用 GCP Cloud SQL 还是将 SQL 服务器安装在您自己管理的虚拟机中?
  • @Frank 这实际上是一个 GCP Cloud SQL

标签: google-cloud-platform google-cloud-networking


【解决方案1】:

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

只有直接对等的网络才能进行通信。不支持传递对等互连。换言之,如果 VPC 网络 N1 与 N2 和 N3 对等,但 N2 和 N3 没有直接连接,则 VPC 网络 N2 无法通过 VPC Network Peering 与 VPC 网络 N3 通信。

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

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

  1. 使用Shared VPC 以便在项目 b 中拥有虚拟机,但在项目 a 中拥有网络。 (限制,两个项目必须在同一个组织中)
  2. 用 Cloud VPN 替换项目 A 和 B 之间的 VPC 对等互连(我建议设置一个动态 (BGP) 一个 HA/Classic)。 (限制,您将被收取每边的“出口流量”)
  3. 创建一个可以用作它们之间的桥梁的虚拟机,我之前使用以下 iptables 和启用了 ip forward 进行了测试:
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

【讨论】:

  • 嗨,我也使用共享 VPC 进行了测试,但它也不起作用,当我查看共享 IP 范围时,它也只共享子网而不共享服务私有 IP 范围跨度>
  • 共享 VPC 是为了让您在项目 B 中的虚拟机与项目 A 在同一个 VPC 中(因此不使用 2 个 VPC 网络对等互连),您应该可以通过使用 nmap、telnet 来尝试此操作或连接到您的 GCP Cloud SQL 数据库内部 IP 地址如果这仍然不起作用,请使用共享 VPC 并将您的项目 B 虚拟机放置在与您的 Cloud SQL 服务器相同的区域
  • 谢谢你拯救了我的一周!我终于使用共享 VPC 使它工作。测试花了很多时间,因为我无法从 VM ping 数据库并且认为它不起作用。但是 JDBC 驱动程序可以访问。
猜你喜欢
  • 1970-01-01
  • 2016-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-06
  • 2017-07-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多