为什么 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:
- 创建防火墙规则以允许连接到我自己的外部 IP 地址
- 创建了一个 VPC 连接器并将该连接器添加到我的
app.yaml
- 确保所有内容都在同一项目和区域 (europe-west1)
如果我使用 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。
我在 GCP 运行 postgres 上有一个 VM 实例 (e2-micro)。我将自己的外部 IP 地址添加到 pg_hba.conf
,这样我就可以连接到本地计算机上的数据库。接下来我有一个 nodeJS 应用程序,我想连接到该数据库。在本地工作,应用程序可以连接到 VM 实例上的数据库。但是当我将应用程序部署到 GCP 时,当我尝试在浏览器中访问该页面时出现 500 服务器错误。
这些是我已经did/tried:
- 创建防火墙规则以允许连接到我自己的外部 IP 地址
- 创建了一个 VPC 连接器并将该连接器添加到我的
app.yaml
- 确保所有内容都在同一项目和区域 (europe-west1)
如果我使用 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。