【问题标题】:Connecting Google Cloud Run Service to Google Cloud SQL database将 Google Cloud Run 服务连接到 Google Cloud SQL 数据库
【发布时间】:2021-02-12 03:41:19
【问题描述】:

我有 2 个谷歌云服务:

  1. 谷歌云运行服务(Node Js / Strapi)
  2. 谷歌云 SQL 服务 (Mysql)

我已从 UI 添加了与 Google Cloud Run 服务的 Cloud SQL 连接,并且拥有 Google Cloud SQL 服务的公共 IP。最重要的是,我已将运行服务 IP 添加到 SQL 服务的授权网络中。

如果我尝试从另一台服务器(谷歌云外部)连接,我可以轻松连接到谷歌云 SQL 服务并执行查询。 但是,如果我尝试使用完全相同的设置(Ip、database_name 等)从 GCloud Run 服务内部进行连接,我的连接将挂起,并且在日志中出现超时错误...

如何正确允许 Gcloud SQL 接受来自 GCloud RUN 的连接?

我在这里寻找其他答案,但它们看起来都很老(大约 2015 年)

【问题讨论】:

    标签: google-cloud-platform google-cloud-sql google-cloud-run


    【解决方案1】:

    您可以使用 3 种模式来访问您的数据库

    • 使用内置功能。在这种情况下,您不需要指定 IP 地址,它是一个开放的 linux 套接字,可以与数据库通信,如the documentation 中所述
    • 使用 Cloud SQL 私有 IP。这一次,不需要在 Cloud Run 服务中配置连接,你不会使用它,因为你将使用 IP,而不是 linux 套接字。这个解决方案需要两件事
      • 首先将您的数据库附加到您的 VPC 和 give it a private IP
      • 然后,您需要通过您的 VPC 路由 Cloud Run 的私有 IP 流量。为此,您必须创建一个serverless VPC Connector,然后将其附加到 Cloud RUN 服务
    • 使用 CLoud SQL 公共 IP。这一次,无需在 Cloud Run 服务中配置连接,您不会使用它,因为您将使用 IP,而不是 linux 套接字。要实现这一点,您需要更多步骤(而且不太安全)

    在您的情况下,您已将 Cloud Run IP 列入白名单,但它是一个共享 IP(其他服务可以使用相同的 IP!请注意)而且并不总是相同,Google 云使用了一个 IP 地址池.

    【讨论】: