【问题标题】:Problem while connecting to Cloud SQL from App Engine Flexible从 App Engine Flexible 连接到 Cloud SQL 时出现问题
【发布时间】:2020-01-02 22:28:03
【问题描述】:

我的 ASP NET CORE 服务作为 App Engine Flexible 在 Google Cloud 上运行。 PostgreSQL 数据库也在 SQL Cloud 上运行。服务连接到数据库并获取数据。

如果我在 localhost 上运行服务并从浏览器或 Fidler 测试 api,它工作正常。当服务在云中运行但 api 响应是模拟的时,它也可以正常工作。但是如果服务需要连接做数据库,它会得到 HTTP ERROR 500。没有更多关于错误的额外信息。

也许有人知道为什么它会像描述中那样工作?

连接字符串如下:

"ConnectionString": "Server=11.11.11.11;Port=1111;Database=namedb;;User Id=user;Password=pass;Keepalive=1;",

【问题讨论】:

  • 云sql是如何配置的?请记住,默认情况下,云 sql 拒绝来自任何主机的连接,您可能允许您的 localhost 用于测试/开发目的,对吧?
  • 一开始是的,从 pgadmin 连接到 SQL 云。但是为了测试我删除了所有允许的主机。从手机上它的工作原理相同,没有连接到数据库 - 正确,连接到 db http 500。
  • 那么,您必须将您的应用引擎应用列入白名单,以便对您的云 sql 实例执行经过身份验证的调用 :) 尝试将应用引擎 IP 范围列入白名单,看看它是否有效,如果这是问题所在我建议您使用证书提高连接安全性
  • 我想我尝试过它。我获得了服务工作实例的 IP 并将其添加到白名单中。您的建议是否正确?
  • App Engine 目前不提供将静态 IP 地址映射到应用程序的方法。为了优化最终用户和 App Engine 应用程序之间的网络路径,不同 ISP 或地理位置的最终用户可能会使用不同的 IP 地址来访问同一个 App Engine 应用程序。随着时间的推移或从不同的网络位置,DNS 可能会返回不同的 IP 地址来访问 App Engine。 cloud.google.com/appengine/kb

标签: postgresql http asp.net-core google-cloud-platform cloud


【解决方案1】:

为避免将 IP 列入白名单,这是一项繁重的工作,有两种方法可以从 App Engine Flex 进行连接,您无需这样做。

一种方法: 是使用beta settings 并连接到本地地址。如果您只连接到一个数据库,这种方式很好 为此,您需要将以下行添加到 app.yaml

beta_settings:
  cloud_sql_instances: <INSTANCE_CONNECTION_NAME>=tcp:<PORT>

INSTANCE_CONNECTION_NAME 是 ::

例如:

beta_settings:
  cloud_sql_instances: my-project:my-region:my-instance=tcp:5432

另一种方式: 是通过私有 IP 连接。为此,您需要在同一区域拥有 App Engine 和 CloudSQL。并将以下几行添加到您的 app.yaml

   network:
       name: projects/<HOST_PROJECT_ID>/global/networks/<NETWORK_NAME>

例如

network:
  name: projects/my-project/global/networks/default

【讨论】:

  • INSTANCE_CONNECTION_NAME 就像 region:xxx:region 或者只有 xxx 一样? tcp 中的端口: 对于 PostgreSQL 是 5432?在哪里我可以从网络中找到 HOST_PROJECT_ID 和 NETWORK_NAME:名称:projects//global/networks/
  • 您是在尝试第一个还是第二个选项?您能分享一下您遇到的错误吗?
  • 两者。我在回答中分享了它。在我的盲拍中,我在我的 SQL Cloud 中设置了私有地址 IP,现在可能有问题吗?
  • 您的 Cloud SQL 内部 IP 是否与 app.yaml 中声明的网络位于同一网络中?
  • 是的,它是默认网络。在 SQL Cloud 概述中,它是名为 Associated network 的字段,是吗?
猜你喜欢
  • 1970-01-01
  • 2017-12-05
  • 2017-06-17
  • 2020-01-22
  • 2017-01-12
  • 2020-06-07
  • 1970-01-01
  • 2015-01-12
  • 1970-01-01
相关资源
最近更新 更多