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

Google cloud platform GCP:使用私有IP地址从另一个项目访问mysql服务器,google-cloud-platform,google-cloud-networking,Google Cloud Platform,Google Cloud Networking,我的问题: 在谷歌云上,我有两个项目:ProjectA和ProjectB。 在ProjectA中,我有一个mysql服务器。 在ProjectB中,我有一个需要连接到mysql服务器的虚拟机。 我更喜欢使用私有地址(为了安全,因为mysql过滤来自公共IP的访问) 我的尝试: 我在每个项目中创建了一个网络,并查看它们。 但是它不起作用,我认为是因为通过将mysql服务器分配到网络,它创建了一个专用于服务的IP范围的私有服务连接,而该IP范围不在对等网络的导出路由中(它不在对等网络的导出路由中)

我的问题:

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

我的尝试:

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


如何使其工作,什么是好的方法?

目前,有一种用于“传递式对等”的GCP VPC对等

只有直接对等网络才能通信。不支持传递对等。换句话说,如果VPC网络N1与N2和N3对等,但N2和N3未直接连接,则VPC网络N2无法通过VPC网络对等与VPC网络N3通信

当您将GCP Cloud SQL实例与私有IP一起使用时,它将自动创建一个VPC对等,该对等具有不同的GCP项目和您的项目,这将发生在“项目a”上,而当您与“项目B”对等时,您将陷入此可传递对等限制

以下是解决此问题的两个解决方案:

  • 使用a在项目b中有一个虚拟机,但有一个项目a网络。(限制,两个项目必须在同一个组织中)
  • 用云VPN替换项目A和B之间的VPC对等(我建议设置一个动态(BGP)VPN/)。(限制,您将被指控在每一侧进行“出口交通”)
  • 创建一个可以用作它们之间桥梁的虚拟机,之前我使用以下iptables和ip forward进行了测试:
  • iptables-tnat-A后路由-s-o-j伪装
    iptables-tnat-A预路由-i-ptcp-dport-jdnat-to
    iptables-A FORWARD-p tcp-d--dport-j ACCEPT
    

    (限制,取决于您选择的虚拟机类型,您可能会受到限制)

    在项目A中,您是在使用GCP Cloud,还是在自己管理的虚拟机中安装SQL server?@Frank这实际上是一个GCP Cloud SQLHi,我也使用共享VPC进行了测试,但都不起作用,当我查看共享IP范围时,它也只共享子网络,而不共享服务专用IP范围共享VPC是指项目B中的VM与项目A位于同一个VPC中(因此不使用2个VPC网络对等),您应该能够通过使用nmap来尝试这一点,telnet或连接到您的GCP Cloud SQL数据库内部IP地址如果仍然不起作用,请使用共享VPC并将您的Project B VM放置在与您的云SQL服务器相同的区域谢谢您挽救了我的一周!我终于用一个共享的VPC实现了。测试花费了很多时间,因为我无法从虚拟机ping数据库,尽管它不起作用。但是,JDBC驱动程序具有访问权限。
    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