为什么 App Engine 无法连接到 Compute Engine VM 实例?

Why can't App Engine connect to Compute Engine VM instance?

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

这些是我已经did/tried:

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

首先检查您的应用是否使用 /28 IP 地址范围 (see the documentation):

When you create a connector, you also assign it an IP range. Traffic sent through the connector into your VPC network will originate from an address in this range. The IP range must be a CIDR /28 range that is not already reserved in your VPC network.

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

An implicit firewall rule with priority 1000 is created on your VPC network to allow ingress from the connector's IP range to all destinations in the network.

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

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

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

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

我需要使用

部署我的应用程序

gcloud beta app deploy

因为 VPC 连接器方法处于测试阶段。另外,我尝试连接到我 app.yaml 中的外部 IP,但这当然需要是内部 IP。