Google Cloud 运行 在使用映射自定义子域时失去与 Mysql 的连接

Google Cloud Run looses connectivity to Mysql when using mapping custom subdomain

映射自定义域时,从云 运行 连接到我的 SQL 实例时遇到问题。在自定义域映射之前,连接很好,之后只是抛出错误:connect ETIMEDOUT。

我正在使用 Public IP,在我看来我应该将映射子域的 IP 添加为允许的网络,问题是映射只是一个指向 ghs.googlehosted.com 的 CNAME .分配的 IP 是动态的 DN。我无法从 Google 他们的 IP 范围获取,所以我也无法添加范围。

根据文档,Cloud 运行 在使用套接字时使用 Cloud SQL Proxy,因此理论上它应该处理动态 IP。

有什么帮助吗?

您可以通过不同方式连接您的云 SQL 数据库。首先,在 the documentation 你可以看到其中的两个:

  • 使用 public 云 SQL 数据库的 IP 创建一个 Unix 套接字来连接您的数据库。我可以理解 Unix 套接字有时对某些 libraries/frameworks 来说不是标准的,而您更喜欢 IP
  • 使用public IP:如果你想使用IP,这是我的首选方案。您必须创建一个无服务器 VPC 连接器以将内部流量路由到 VPC,然后安全地到达您的数据库。但是,如果 Cloud SQL 实例不在您的项目中,您需要执行对等互连,但它不起作用(长话短说,但相信我,VPC 对等互连 + Cloud SQL 私有 IP 不起作用没用)。

所以,最后的解决方案是在云SQL实例上授权网络,当然不是0.0.0.0/0!

为此,您需要在启动传出连接时从云 运行 获取 public IP。您可以使用 Cloud NAT.

实现此目的

在您的 Cloud NAT 配置中,select 您保留的私有 IP 确保始终保持相同的重复使用。在此配置中,您还将使用 Cloud NAT,但这次将 egress 参数设置为 ALL(而不是内部 ip 范围,就像您可以为私有 IP 访问所做的那样)。

现在您拥有了它:当云 运行 发起传出连接时,一个 public 静态 IP。在云端授权此IPSQL,尽情享受吧!