将静态IP云功能连接到Cloud SQL

时间:2020-03-20 06:53:49

标签: mysql google-cloud-platform google-cloud-functions google-cloud-sql google-cloud-networking

在这两种情况下都有几个不错的答案-但不能结合在一起。

1。我需要通过列入白名单的静态调用外部API IP。
参见:Associating Cloud Function egress with a static IP address
a)从Cloud Function调用外部API
b)将来自此Cloud Function的所有出口路由通过vpcnetwork-1上的VPC连接器(IP地址范围= 10.8.10.0/28)
c)使用云NAT 通过[STATIC IP]路由vpcnetwork-1上的所有流量 (由外部API列入白名单)

2。接下来,我需要获取该API数据并将其发送到Cloud SQL 实例(在这种情况下为MySQL)。
参见:Connecting to Cloud SQL from Cloud Functions
a)创建UNIX套接字路径 连接到[Cloud SQL实例]

当我使用VPC连接器运行时(如上所示),我得到:
1)成功!我已使用列入白名单的IP地址接收API数据
2) [Cloud SQL实例]拒绝了连接-因为我使用的是静态外部IP?套接字路径是使用外部的还是连接在我的Google Cloud Project中的?

如果我从Cloud Function中删除VPC连接器,则会得到:
1)-拒绝连接-该IP未列入白名单(因为我不再使用静态IP)
2)成功!我现在可以连接到[Cloud SQL实例](使用UNIX套接字路径,用户名和密码)

如何从相同的Cloud Function上使它们同时工作?

我看到我可以“仅将请求通过VPC连接器路由到专用IP”,但我确实希望得到相反的结果。我只想将外部请求路由到VPC连接器,以使用我的静态IP,然后在我的GCP中保留用于连接的私有路由。

已添加:我正在使用Javascript mysql连接到Cloud SQL。

var pool = mysql.createPool({ socketPath: '/cloudsql/[instance_connection_name]',
                              user: uid,
                              password: pwd,
                              database: 'mysql_db' });
var result = pool.query(sql, {}, (err,result)=> {});

无需使用VPC连接器即可正常工作。当我使用具有静态外部IP地址的VPC连接器时,该连接将被拒绝。是否因为VPC连接器和Cloud SQL实例不在同一VPC上?我不认为Cloud SQL链接到VPC,是吗?

1 个答案:

答案 0 :(得分:0)

Cloud SQL实例概述仪表板同时列出了[公共IP地址]和[实例连接名称]

对于标准Cloud Functions连接,我使用:

socketpath:[Instance Connection Name]
user: uid
password: pwd
database: 'mysql_db'

使用VPC连接器时,我使用

host:[Private (or Public) IP Address]
user: uid
password: pwd
database: 'mysql_db'

摘要:

[Cloud Function] -> socketpath:[Instance Connection Name] => **SUCCESS**
[Cloud Function] -> host:[Public IP Address] => **FAIL** (Timeout - IP Not Allowed)

Private VPC Connections:
[Cloud Function] -> [VPC Connector] -> socketpath:[Instance Connection Name] => **FAIL** (Connection Refused)
[Cloud Function] -> [VPC Connector] -> host:[Private IP Address] => **SUCCESS** (Set up Private IP in GCP->SQL->Connections)

Public VPC Connection:
[Cloud Function] -> [VPC Connector] -> host:[Public IP Address] => **SUCCESS** (Only after allowing/whitelisting IP of the VPC Connector routed through Cloud NAT)

用于私有IP设置的Google Cloud CLI说明:
CONNECTING FROM GOOGLE CLOUD FUNCTIONS TO CLOUD SQL USING TCP AND UNIX DOMAIN SOCKETS 2020

相关问题