从 App Engine 到云 SQL 的流量是通过互联网还是在 Google 内部网络上传输?

Does traffic from App Engine to Cloud SQL travel over the internet or on Google internal network?

我们在办公室进行了讨论,无法得出结论。所以我在这里寻求一些建议。

我们有一个 Google 云 SQL 运行 没有 public IP。 Google 来自不同 App Engine 项目的 App Engine 通过授权他们的服务帐户连接到这个单一的云 SQL。

项目之间没有 VPC 设置。这些应用程序在 google 应用程序引擎标准环境中。应用项目中没有使用实例的私有IP。

项目之间的连接是使用此处找到的教程建立的

https://cloud.google.com/sql/docs/mysql/connect-app-engine

正在创建连接字符串

mysql+pymysql://<db_user>:<db_pass>@/<db_name>?unix_socket=/cloudsql/<cloud_sql_instance_name>

问题是流量如何从其他 App Engine 项目流向此云 SQL 实例?

连接握手是通过互联网进行的(即在 Google 的网络之外)还是 google 处理流量并在内部路由它而无需将请求转到互联网?

如果有人能帮忙解答这些问题,那就太好了

如果您已将云 SQL 配置为使用私有 IP 地址,则连接会使用 VPC 网络对等互连和来自 Google App Engine 的通信(运行 在 Google 和 VPC 连接)到您的托管云 SQL(运行 在单独的 VPC 网络上)全部在 Google 内部使用 VPC。

有关这方面的详细信息,请参阅此处的文章:

从 App Engine Standard 到云端的连接 SQL 它是通过 Internet 建立的。 App Engine 和 Cloud 之间有更多的内部服务 SQL,但默认情况下不会对实例的私有 IP 进行调用。

如果您查看连接器 repository 的自述文件,您会发现您可以使用几乎相同的方法从本地环境连接到云 SQL 实例。这可能是互联网上发生的事情的线索。

这个问题的答案实际上因您使用的 App Engine 版本而异。

在旧版本的 App Engine Standard 上,/cloudsql/ unix 套接字通过内部网络直接连接到您的实例。

在较新版本的 App Engine Standard 上,它使用一个版本的云 SQL 代理来验证您通过它的 public IP 与实例的连接。这就是 Connecting from App Engine 页面声明您的 Cloud SQL 实例必须具有 public IP 的原因。