google-cloud-platform - 在单独的项目中访问 Cloud SQL 实例
问题描述
我正在寻找一种解决方案(也许这不是最好的方法),让应用程序在 Project-A 中的一个 GKE 集群上运行,访问 Project-B 中的 Cloud SQL 实例,通过它的内部 IP 和理想情况下通过云 SQL 代理。更多信息:
- 我们在项目 A 和项目 B 之间有 VPC 对等互连,来自两个 VPC 的流量肯定流动良好
- 我们在项目 A 的 GKE 集群中运行 Cloud SQL 代理,并定义了项目 B 中的 SQL 实例
- 云 SQL 实例只有一个内部私有 IP
- Project-B 中 GKE 集群的 Pod 可以访问同一项目(Project-B)中的 Cloud SQL,所以我知道内部连接肯定存在
- 只有当我们在项目 B 中向云 SQL 实例简要添加公共 IP 时,才能通过 Cloud SQL 代理从项目 A 进行连接
当我尝试从项目 A 到项目 B 时,我们会遇到连接超时。
我了解,在创建具有内部 IP 的云 sql 实例时,会在同一个项目中的 VPC 中创建另一个名为 servicenetworking-googleapis.com 的单独 VPC 对等连接。
从网络背景来看,我的想法是项目-A 中没有 IP 路由,如果要访问云 SQL 的私有 IP,则告诉 pod 流量通过 2 个项目之间的 VPC 对等连接实例。
但我想知道是否有其他人尝试过同样的事情。
解决方案
我在文档中发现,不支持传递对等。自己没有尝试过,但似乎推荐的方法是使用共享 VPC 从多个项目访问 CloudSQL。在本节中: https ://cloud.google.com/sql/docs/mysql/private-ip#quick-reference
传递对等互连
只有直接对等互连的网络才能进行通信。不支持传递对等互连。换言之,如果 VPC 网络 N1 与 N2 和 N3 对等,但 N2 和 N3 没有直接连接,则 VPC 网络 N2 无法通过 VPC Network Peering 与 VPC 网络 N3 通信。一个项目中的客户端可以使用共享 VPC 网络连接到多个项目中的 Cloud SQL 实例。
您可以使用以下指南在项目之间设置共享 VPC。概括起来,它涉及以下步骤:
- 将托管您的 Cloud SQL 实例的项目设置为宿主项目,因为它是共享资源的项目,在这种情况下包括您的 Cloud SQL 实例。
- 选择要共享给其他项目的子网
- 将托管 GKE 集群的项目设置为服务项目。然后可以将此服务项目附加到之前设置的宿主项目。
- 将服务项目附加到宿主项目并设置适当的 VPC 管理员角色,以便允许服务项目中的用户访问共享资源。
推荐阅读
- python - 如何在数据集中查找没有分类列和数字列
- java - 从数据库中读取 Jasypt 密码以进行验证
- azure-active-directory - MSAL 和 Graph API - 无需用户交互即可访问用户的日历?
- java - 与 Java 服务器的安全连接失败
- postgresql - liquibase lock 无法在 postgresql docker Image 中获取更改日志锁
- arrays - 遍历数组并为每个项目创建一个 ListItem
- android - AndroidStudio:列出配对设备
- amazon-web-services - Cloudformation 支持 Amazon EventBridge 中的架构注册表
- java - 通过 unirest 连接到 jira 时出错
- python - 在 Django-Rest-Framework POST 调用中更新 manytomany 字段适用于 JSON 但不适用于表单数据