首页 > 解决方案 > 为什么 App Engine 无法连接到 Compute Engine 虚拟机实例?

问题描述

我在 GCP 上有一个使用 postgres 运行的 VM 实例(e2-micro)。我添加了自己的外部 IP 地址,pg_hba.conf以便可以连接到本地计算机上的数据库。旁边我有一个 nodeJS 应用程序,我想连接到该数据库。在本地工作,应用程序可以连接到 VM 实例上的数据库。但是,当我将应用程序部署到 GCP 时,当我尝试在浏览器中访问该页面时出现 500 服务器错误。

这些是我已经做过/尝试过的事情:

如果我允许我的VM实例上的所有IP地址,0.0.0.0/0那么App Engine可以连接,所以我的猜测是我做错了连接器?当虚拟机实例的内部 IP 地址是时,我使用10.8.0.0/28IP 范围,这10.132.0.2是一个问题吗?我尝试了一个 IP 范围,10.0.0.0但也没有用。

标签: postgresqlgoogle-app-enginegoogle-cloud-platformgoogle-compute-enginegoogle-vpc

解决方案


首先检查您的应用程序是否使用 /28 IP 地址范围请参阅文档):

创建连接器时,您还为其分配了 IP 范围。通过连接器发送到您的 VPC 网络的流量将来自此范围内的地址。IP 范围必须是尚未在您的 VPC 网络中保留的 CIDR /28 范围。

当您创建 VPC 连接器时,还会创建适当的防火墙规则以允许流量:

在您的 VPC 网络上创建优先级为 1000 的隐式防火墙规则,以允许从连接器的 IP 范围进入网络中的所有目标。

正如您在创建允许来自任何 IP 的流量的规则时自己编写的那样(您的应用程序可以连接)。所以 - 寻找允许来自您的应用程序所在 IP 范围的流量的规则 - 如果它不存在,请创建它。

或者 - 您可以通过公共 IP 将您的应用程序连接到您的数据库 - 在这种情况下,您还必须创建一个适当的规则,以允许从应用程序到数据库的流量。

第二 - 检查应用程序使用的数据库的 IP。 我的猜测是您没有更改数据库的 IP(该应用程序使用)并且它尝试不通过 VPC 连接器而是通过外部 IP 进行连接,这就是为什么它不能(并且仅在您创建防火墙规则时才有效)。


推荐阅读