Postgresql 为什么可以';t应用程序引擎连接到计算引擎VM实例?

Postgresql 为什么可以';t应用程序引擎连接到计算引擎VM实例?,postgresql,google-app-engine,google-cloud-platform,google-compute-engine,google-vpc,Postgresql,Google App Engine,Google Cloud Platform,Google Compute Engine,Google Vpc,我在GCP上有一个VM实例(e2micro)与postgres一起运行。我将自己的外部ip地址添加到pg_hba.conf中,以便连接到本地计算机上的数据库。接下来我有一个nodeJS应用程序,我想连接到那个数据库。在本地,应用程序可以连接到VM实例上的数据库。但是,当我将应用程序部署到GCP时,当我尝试访问浏览器中的页面时,会出现500服务器错误 以下是我已经做过/尝试过的事情: 创建防火墙规则以允许在我自己的外部ip地址上进行连接 创建了VPC连接器并将该连接器添加到myapp.yaml

我在GCP上有一个VM实例(e2micro)与postgres一起运行。我将自己的外部ip地址添加到
pg_hba.conf
中,以便连接到本地计算机上的数据库。接下来我有一个nodeJS应用程序,我想连接到那个数据库。在本地,应用程序可以连接到VM实例上的数据库。但是,当我将应用程序部署到GCP时,当我尝试访问浏览器中的页面时,会出现500服务器错误

以下是我已经做过/尝试过的事情:

  • 创建防火墙规则以允许在我自己的外部ip地址上进行连接
  • 创建了VPC连接器并将该连接器添加到my
    app.yaml
  • 确保所有内容都在同一项目和地区(欧洲西部1)

如果我使用
0.0.0.0/0
允许VM实例上的所有ip地址,那么App Engine可以连接,所以我猜我在连接器上做错了什么?我使用
10.8.0.0/28
作为ip范围,而VM实例的内部ip地址是
10.132.0.2
,这是一个问题吗?我尝试了一个ip地址范围
10.0.0.0
,但也不起作用。

首先检查你的应用程序是否使用/28 ip地址范围():

创建连接器时,还可以为其指定IP范围。交通 通过连接器发送到您的VPC网络将源自 此范围内的地址。IP范围必须是符合以下条件的CIDR/28范围 您的VPC网络中尚未保留

创建VPC连接器时,还将创建一个适当的防火墙rulle以允许流量:

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

正如你自己写的,当你创建一个规则,允许来自它工作的任何IP的流量(你的应用程序可以连接)。因此-寻找允许应用程序所在IP范围流量的规则-如果不存在,则创建该规则

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

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

这个答案为我指出了正确的方向:

我需要使用部署我的应用程序

gcloud测试版应用程序部署


因为VPC连接器方法是测试版。此外,我试图连接到我的
app.yaml
中的外部IP,但那当然需要是内部IP。

事实上,我试图连接到我的
app.yaml中的外部IP地址,将其更改为我的内部IP地址。但我还需要使用
gcloud beta app deploy部署,请参见下面的答案