postgresql - 为什么 App Engine 无法连接到 Compute Engine 虚拟机实例?
问题描述
我在 GCP 上有一个使用 postgres 运行的 VM 实例(e2-micro)。我添加了自己的外部 IP 地址,pg_hba.conf
以便可以连接到本地计算机上的数据库。旁边我有一个 nodeJS 应用程序,我想连接到该数据库。在本地工作,应用程序可以连接到 VM 实例上的数据库。但是,当我将应用程序部署到 GCP 时,当我尝试在浏览器中访问该页面时出现 500 服务器错误。
这些是我已经做过/尝试过的事情:
- 创建了防火墙规则以允许在我自己的外部 IP 地址上进行连接
- 创建了一个 VPC 连接器并将该连接器添加到我的
app.yaml
- 确保一切都在同一个项目和地区(欧洲西部1)
如果我允许我的VM实例上的所有IP地址,0.0.0.0/0
那么App Engine可以连接,所以我的猜测是我做错了连接器?当虚拟机实例的内部 IP 地址是时,我使用10.8.0.0/28
IP 范围,这10.132.0.2
是一个问题吗?我尝试了一个 IP 范围,10.0.0.0
但也没有用。
解决方案
首先检查您的应用程序是否使用 /28 IP 地址范围(请参阅文档):
创建连接器时,您还为其分配了 IP 范围。通过连接器发送到您的 VPC 网络的流量将来自此范围内的地址。IP 范围必须是尚未在您的 VPC 网络中保留的 CIDR /28 范围。
当您创建 VPC 连接器时,还会创建适当的防火墙规则以允许流量:
在您的 VPC 网络上创建优先级为 1000 的隐式防火墙规则,以允许从连接器的 IP 范围进入网络中的所有目标。
正如您在创建允许来自任何 IP 的流量的规则时自己编写的那样(您的应用程序可以连接)。所以 - 寻找允许来自您的应用程序所在 IP 范围的流量的规则 - 如果它不存在,请创建它。
或者 - 您可以通过公共 IP 将您的应用程序连接到您的数据库 - 在这种情况下,您还必须创建一个适当的规则,以允许从应用程序到数据库的流量。
第二 - 检查应用程序使用的数据库的 IP。 我的猜测是您没有更改数据库的 IP(该应用程序使用)并且它尝试不通过 VPC 连接器而是通过外部 IP 进行连接,这就是为什么它不能(并且仅在您创建防火墙规则时才有效)。
推荐阅读
- java - 普罗米修斯刮擦后如何重置指标状态?
- c# - C#“如果抛出异常......”
- spring-boot - 如何使用 jdbc 令牌库从 mysql 中删除过期的 Oauth 刷新令牌?
- asp.net-core - EF Core 3.1 - 如何根据参数进行过滤?
- python - 用于嵌套 XML 和动态变量名称的 Python sax 解析器查询
- elasticsearch - 带有嵌套桶聚合的弹性搜索“尝试创建太多桶”
- sql-server-data-tools - 在 SSDT 中运行 DDL 查询
- c - 无法导入 uxtheme 库
- android - android recyclerview layoutanimation 在股票android中不起作用
- scala - 将 paytm 回调 url 设置为 localhost