Google 云 - 无法从另一个 VPC 网络访问一个 VPC 网络中的私有 CloudSQL 数据库

Google Cloud - Unable to access private CloudSQL database in one VPC network from another VPC network

我们的设置包括 - 一个主 VPC,我们在其中拥有使用私有 IP 创建的计算引擎和 Postgres 数据库。我们将其称为 main-network, - Vault 部署在它自己的 VPC 中,可通过 Loadbalancer 访问(根据最佳实践)。我们将其称为 vault-network.

main-network 内,计算实例能够访问具有私有 IP 的数据库,作为在创建时使用 main-network 作为父网络创建的数据库。查看各种 VPC 详细信息,似乎创建过程会自动创建 private-service-access,如 in the docs..

所述

问题 - 对于 Vault database secret-engine,Vault 需要能够访问数据库以动态生成机密。 我已经尝试在 main-networkvault-network 之间创建 VPC 网络对等互连,并验证(通过 netcat)我可以从 vault-network 中的机器成功到达 main-network 中的机器。

但是,我无法从 vault-network 中的节点访问数据库实例。

是否可以与对等 vpc 网络共享对私有服务的访问?

我不想制作数据库 public 除非这是唯一的方法。

因为你的云SQL不在你的VPC中,但是云SQL和你的VPC之间进行了VPC对等,所以你无法通过对等方式到达另一个VPC网络。正如约翰所说,它被命名为传递性并在 VPC peering restrictions

中进行了描述

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.

遗憾的是,您无法按照 John 的建议在您的云 SQL 和另一个项目的 VPC 网络(您的保管库网络)之间创建对等互连。我只看到 2 个解决方案来解决这个问题

  • 设置一个只转发流量的通道虚拟机。 Micro VM 就足够了,但是您必须维护它,以确保高可用性,(...)
  • 在您的 2 个项目中设置 shared VPC。将您的 Cloud SQL 私有 IP 设置到共享 VPC 子网中。

我联系了我们帐户的 Google 支持人员并询问了他们这个问题,他们确认无法进行可传递的 VPC 对等互连

VPC peering is not transitive, this scenario is not possible using VPC peering between the VPC networks:

Cloud SQL <[VPC Peering]> VPC “main-network” <[VPC Peering]> VPC “vault-network”.

创建共享 VPC 违背了最初创建单独网络的目的,因为它会使保管库节点可以在共享 VPC 中直接访问。

Google 人建议创建一个 VPN:

As a workaround, you could create a VPN between the VPC networks “main-network” and “vault-network”:

Cloud SQL <[VPC Peering]> VPC “main-network” <[Cloud VPN]> VPC “vault-network”.

我需要一些时间考虑是否要走这条路。

目前,我已在数据库实例的 settings.ip_configuration.authorized_networks 配置中将保管库集群的 NAT IP 列入白名单,以授予对保管库网络的访问权限。 不利的一面是数据库现在有一个 public IP,这不一定是坏的,因为防火墙阻止 public 访问它。

感谢大家的建议。