我的问题是如何配置Google Cloud Composer,以便在同一Google Cloud项目中使用相同的网络配置访问Google Cloud SQL。
-
云SQL配置为与默认网络关联的私有IP。云SQL配置
-
Cloud Composer已配置网络ID=默认Cloud Composer配置
执行DAG时,使用配置了专用IP和默认端口(5432(的PostgresOperator进行连接,我们总是会得到相同的连接错误:
错误-无法连接到服务器:连接超时ou是服务器在主机"private_ip"上运行,并接受上的TCP/ip连接端口5432
我们预计应该建立连接,因为我们已经配置了相同的网络,并且我们正在使用私有IP从Composer访问云SQL服务器。
根据Introducing private networking connection for Cloud SQL,这仍然是两个独立的网段(请参阅那里的可视化方案(。因此需要VPC网络对等,以获得可路由的私有IP。请参阅代码实验室,它也涵盖了这个场景。
Composer的请求来自pod的IP地址,该地址在VPC之外是不可路由的。因此,它必须伪装成10.0.0.0/8中的节点接口的IP(当使用默认网络时(。
如果您在设置私有IP连接时将CloudSQL实例配置为使用自动生成的IP范围,则该IP很可能也在10.0.0.0/8中,但不在同一VPC内。
如果连接到10.0.0.0/8并且不在VPC中,则无法路由。作为一种变通方法,您可以创建一个自定义地址范围,例如192.168.X.X:
gcloud beta compute addresses create [RESERVED_RANGE_NAME]
--global
--purpose=VPC_PEERING
--addresses=192.168.0.0
--prefix-length=16
--description=[DESCRIPTION]
--network=[VPC_NETWORK]
并将您的云SQL实例的私有IP配置在该范围内。
云SQL代理是一个很好的方法,类似的问题(如果不一样的话(已经得到了回答,并提供了有关设置的详细信息。
要解决内部IP问题,请参阅谷歌文档:
您可以使用云SQL代理连接到也配置为使用私有IP的实例。代理可以使用专用IP地址或公共IP地址进行连接。如果使用云SQL代理连接到同时分配了公用和专用IP地址的实例,则默认情况下代理使用公用IP地址。