从具有公共IP和私有IP的VM连接到Cloud SQL实例-如何确保为连接选择正确的网络接口?

时间:2020-09-24 22:15:47

标签: google-cloud-platform google-compute-engine google-cloud-sql

我要设置的内容:

  • 具有私有IP,Postgresql数据库的Cloud SQL实例
  • 具有公共IP的VM,但与SQL实例位于同一VPC网络上的一个私有IP(VM,SQL实例和VPC都位于同一区域)
  • VM的服务帐户具有足够的Cloud SQL客户端/查看器权限
  • 从VM连接到SQL实例的可能性。

会发生什么?

  • 从psql客户端或db-migrate等任何实际使用该连接的尝试都只是挂起-例如psql --host 10.78.0.3 -U gcp-network-issue-demo-staging-db-user gcp-network-issue-demo-staging-database不会提示输入密码,只是坐在那里。
  • 如果我从设置中删除了VM的公共IP地址,则可以正常连接。但是,我需要一个可公开访问的VM,其他服务才能连接到它。

我认为psql连接尝试通过了错误的网络接口或某些东西(这可能只是我对网络内容的无知)-如何使它工作?我想念什么?

PS:这与Connecting to Google Cloud SQL instance on private IP from a VM with both private and public IPs fails基本上是相同的问题,但是那里的评论者似乎想要一个与Terraform有关的问题,以及一个与连接问题有关的问题。

一些截图:

VM IP: VM IP addresses

数据库IP: DB IP addresses

VM的网络配置: VM networks

数据库实例的专用IP配置: DB instance connections config

这是专用网络的设置: VPC config screenshot

我不明白为什么数据库实例(10.78.0.3)的私有IP不是私有网络(10.2.0.0-10.2.0.24范围内的IP,对吗? ..?那是我的问题吗?

1 个答案:

答案 0 :(得分:1)

回答您的问题:

我不明白为什么数据库实例的私有IP(10.78.0.3)不是私有网络范围内的IP(10.2.0.0-10.2.0.24,对吧?)..?

为Cloud SQL实例分配了allocated range的IP地址。设置private services access时,将在使用以下信息的VPC gcp-network-issue-demo-staging-network 服务生产商VPC网络之间创建VPC对等分配范围10.78.0.0/16 enter image description here

另外,查看您的VM网络配置,我发现该VM在两个不同的VPC(默认 gcp-network-issue-demo-staging-network )。您只能使用一个Nic。

下一步,请确保您的VM仅使用用于创建private connection的VPC网络。完成后,您应该可以使用以下命令连接到Cloud SQL实例IP:

telnet 10.78.0.3 3306