启用私有IP并关闭公共iP后,无法从Cloud Run连接到Cloud SQL

时间:2020-01-12 17:44:20

标签: google-cloud-platform google-cloud-sql google-cloud-run

我有一个postgreSQL CLoud SQL实例,该实例通过UNIX套接字连接,并根据文档来自Cloud Run容器中的实例名称。使用公共IP,此连接可以正常工作。我当时想关闭公共IP,而只有一个私有IP,所以以后我不会为公共IP付费。

当我第一次创建Cloud SQL实例时,我仅启用了公共IP。几天后,我启用了专用IP。对于专用IP的关联网络,我接受默认设置,因为Cloud Run实例在同一项目中。

当我关闭公共IP时,我的应用程序无法再连接到Cloud SQL实例。我收到连接被拒绝的错误:

sqlalchemy.exc.InterfaceError: (pg8000.core.InterfaceError) ('communication error', ConnectionRefusedError(111, 'Connection refused'))

如上所述,我确实遵循了“从Cloud Run连接到Cloud SQL”页面上的说明:

https://cloud.google.com/sql/docs/postgres/connect-run

我什至在关闭公共IP且只有私有IP可用之后运行gcloud命令来更新现有的已部署修订版本,

从Cloud Run到Cloud SQL的连接是否需要公共IP?我没有在连接文档页面中看到它。还是尝试切换到仅拥有私有IP时,我还错过了其他东西吗?还是我需要在没有公共IP的情况下创建新的Cloud Instance,然后按照说明再次通过实例anme连接Cloud Run?

2 个答案:

答案 0 :(得分:1)

从Cloud Run到Cloud SQL的连接是否需要公共IP?我没有在连接文档页面中看到它。

Connecting to Cloud SQL from Cloud Run page上,它显示“注意:这些说明要求您的Cloud SQL实例配置有公共IP地址。”

专用IP访问是来自Virtual Private Cloud (VPC)的访问。为了通过VPC访问您的实例,您要连接的资源必须是VPC的一部分。 Cloud Run目前不支持VPC访问,因此您现在需要使用具有公共IP。

答案 1 :(得分:0)

TL; DR :为Google支持部门开案

您的案例很有趣,因为根据设计,我认为尚不支持。

实际上,当您使用私有IP创建Cloud SQL数据库时,network peering is done between your VPC and the Cloud SQL VPC (or something equivalent)

此外,今天还无法将Cloud Run实例插入VPC。使用function和App Engine,您将拥有一个serverless VPC connector,但尚未使用Cloud Run(即将推出!)。

无服务器VPC连接器执行与Cloud SQL私有IP相同的功能,我的意思是您的VPC与Cloud Functions(或App Engine)VPC(或类似功能)之间的对等连接。

即使无服务器VPC连接器在Cloud Run上可用,也由于network peering transitivity不确定它是否可以正常工作。简而言之,如果您在VPC A-> VPC B和VPC B-> VPC C之间建立对等连接,则无法通过在VPC B中执行跃点来从VPC A到达VPCC。将A替换为VPC Cloud Run,B通过项目的VPC,并通过VPC Cloud SQL进行C。

仅直接对等网络可以通信。不支持传递对等。换句话说,如果VPC网络N1与N2和N3对等,但是N2和N3没有直接连接,则VPC网络N2无法通过VPC网络对等与VPC网络N3通信。

我没有检查AppEngine或Cloud Function,但是这种设计不起作用。

但是我不确定,这就是为什么Google支持会为您提供一个明确的答案,甚至是路线图上的输入的原因。欢迎从Google支持获得任何有价值的信息!