GCF从另一个项目连接到VM上的DB

时间:2018-01-29 04:10:09

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

假设我在项目A中的VM上运行了一个Mongo数据库实例。我想将项目B中的Google Cloud功能连接到项目A中的数据库。我需要在Console中设置什么?

我已将Project B的服务帐户添加到Project A IAM(以xxx@appspot.gserviceaccount.com结尾),但是从GCF的日志中,mongo保持报告错误,如MongoError: getaddrinfo ENOTFOUND mongodb0-server-1 mongodb0-server-1:27017

我认为我必须允许Project B从防火墙规则访问Project A的资源,但我不确定Cloud Functions是否没有像Compute Engine这样的外部IP。此外,我无法找到有关此案例的明确文件。

1 个答案:

答案 0 :(得分:0)

主机名解析

在Google Cloud Platform中,不同项目实例的主机名的DNS解析无效。

因此,在项目A中,您将能够解析该项目的Google Compute Engine实例的所有主机名,但您将无法对项目B执行相同操作(也因为实例的名称不是唯一的在整个项目中,这是不可能的!)。

这就是从项目A到项目B的连接,我认为你得到了:

MongoError: getaddrinfo ENOTFOUND mongodb0-server-1 mongodb0-server-1:27017

您可以决定通过运行mongoDB的实例的公共IP来引用服务器,或者按照this SO question中的建议在/etc/hosts中添加静态DNS规则,但我想这不是选项,因为您无权访问运行代码的实例。

防火墙

此外,在托管mongoDB的项目中,您需要允许流量到您的数据库,以便云功能使用的协议和端口与数据库进行通信。

为了实现这一目标,由于您似乎无法为Google Cloud Functions创建静态IP,因此您需要将所有人(不是最安全的解决方案)列入白名单或将Google IP列入白名单,类似问题here