在单独的项目中访问 Cloud SQL 实例
Access Cloud SQL instance in separate project
我正在寻找一种解决方案(也许这不是最好的方法)来在我们项目 A 中的一个 GKE 集群上获取应用程序 运行,以访问云 SQL Project-B 中的实例,它是一个内部 IP,最好是通过云 SQL 代理。更多信息:
- 我们在项目 A 和项目 B 之间有 VPC 对等互连,来自两个 VPC 的流量绝对可以正常流动
- 我们在项目 A 的 GKE 集群中有 Cloud SQL 代理 运行,在项目 B 中定义了 SQL 实例
- 云SQL实例只有一个内部私有IP
- Pods 来自项目 B 中的 GKE 集群可以访问同一项目(项目 B)中的云 SQL 所以我知道内部连接肯定存在
- 只有当我们在项目 B 中简单地添加一个 public IP 到云 SQL 实例时,从项目 A 通过云 SQL 代理
的连接才有效
当我尝试从项目 A 到项目 B 时,连接超时。
我了解到,在创建具有内部 IP 的云 sql 实例时,在同一项目中从 VPC 创建了另一个名为 servicenetworking-googleapis.com 的独立 VPC 对等连接。
我的想法是,来自网络背景,项目-A 中没有 IP 路由,告诉 pod 流量如果想到达私有,则通过两个项目之间的 VPC 对等连接云 SQL 实例的 IP。
但我想知道是否有其他人尝试过同样的事情。
我在文档中发现不支持可传递的对等互连。我自己没有尝试过,但似乎推荐的方法是使用共享 VPC 从多个项目访问 CloudSQL。
在这个部分:
https://cloud.google.com/sql/docs/mysql/private-ip#quick-reference
Transitive peering
Only directly peered networks can communicate. Transitive peering is not supported. In other words, if VPC network N1 is peered with N2 and N3, but N2 and N3 are not directly connected, VPC network N2 cannot communicate with VPC network N3 over VPC Network Peering.
Clients in one project can connect to Cloud SQL instances in multiple projects using Shared VPC networks.
您可以使用 following guide 在项目之间设置共享 VPC。总结一下,它涉及以下步骤:
- 将托管您的 Cloud SQL 实例的项目设置为宿主项目,因为它是共享资源的项目,在本例中包括您的 Cloud SQL 实例。
- Select 您要共享给其他项目的子网
- 将托管 GKE 集群的项目设置为服务项目。然后可以将此服务项目附加到之前设置的宿主项目。
- 将服务项目附加到宿主项目并设置适当的 VPC 管理员角色,以便允许服务项目的用户访问共享资源。
如另一个答案中所述,VPC 对等互连不可传递。因此,即使项目 A 和项目 B 之间存在 VPC 对等互连,但这并不意味着项目 A 可以与私有 IP 云 SQL 实例(部署在项目 B 内对等的另一个 VPC 内)进行通信。
作为解决方法,您可以在项目 B 中部署 SOCKS5 代理,并让项目 A 使用云 SQL 代理连接到它。
ALL_PROXY=socks5://localhost:8000 cloud_sql_proxy \
-instances=$INSTANCE_CONNECTION_NAME=tcp:5432
我正在寻找一种解决方案(也许这不是最好的方法)来在我们项目 A 中的一个 GKE 集群上获取应用程序 运行,以访问云 SQL Project-B 中的实例,它是一个内部 IP,最好是通过云 SQL 代理。更多信息:
- 我们在项目 A 和项目 B 之间有 VPC 对等互连,来自两个 VPC 的流量绝对可以正常流动
- 我们在项目 A 的 GKE 集群中有 Cloud SQL 代理 运行,在项目 B 中定义了 SQL 实例
- 云SQL实例只有一个内部私有IP
- Pods 来自项目 B 中的 GKE 集群可以访问同一项目(项目 B)中的云 SQL 所以我知道内部连接肯定存在
- 只有当我们在项目 B 中简单地添加一个 public IP 到云 SQL 实例时,从项目 A 通过云 SQL 代理 的连接才有效
当我尝试从项目 A 到项目 B 时,连接超时。
我了解到,在创建具有内部 IP 的云 sql 实例时,在同一项目中从 VPC 创建了另一个名为 servicenetworking-googleapis.com 的独立 VPC 对等连接。
我的想法是,来自网络背景,项目-A 中没有 IP 路由,告诉 pod 流量如果想到达私有,则通过两个项目之间的 VPC 对等连接云 SQL 实例的 IP。
但我想知道是否有其他人尝试过同样的事情。
我在文档中发现不支持可传递的对等互连。我自己没有尝试过,但似乎推荐的方法是使用共享 VPC 从多个项目访问 CloudSQL。 在这个部分: https://cloud.google.com/sql/docs/mysql/private-ip#quick-reference
Transitive peering
Only directly peered networks can communicate. Transitive peering is not supported. In other words, if VPC network N1 is peered with N2 and N3, but N2 and N3 are not directly connected, VPC network N2 cannot communicate with VPC network N3 over VPC Network Peering. Clients in one project can connect to Cloud SQL instances in multiple projects using Shared VPC networks.
您可以使用 following guide 在项目之间设置共享 VPC。总结一下,它涉及以下步骤:
- 将托管您的 Cloud SQL 实例的项目设置为宿主项目,因为它是共享资源的项目,在本例中包括您的 Cloud SQL 实例。
- Select 您要共享给其他项目的子网
- 将托管 GKE 集群的项目设置为服务项目。然后可以将此服务项目附加到之前设置的宿主项目。
- 将服务项目附加到宿主项目并设置适当的 VPC 管理员角色,以便允许服务项目的用户访问共享资源。
如另一个答案中所述,VPC 对等互连不可传递。因此,即使项目 A 和项目 B 之间存在 VPC 对等互连,但这并不意味着项目 A 可以与私有 IP 云 SQL 实例(部署在项目 B 内对等的另一个 VPC 内)进行通信。
作为解决方法,您可以在项目 B 中部署 SOCKS5 代理,并让项目 A 使用云 SQL 代理连接到它。
ALL_PROXY=socks5://localhost:8000 cloud_sql_proxy \
-instances=$INSTANCE_CONNECTION_NAME=tcp:5432