个人随记 —— GCP Cloud SQL 的 Private Service Connect 访问方案

一句话简述问题

GCP Cloud SQL 服务并没有官方提供 Private Service Connect 的链接通路,需要手动配置。

方案设计

image

如图所示,需要申请规划

  1. VPC、Subnet、Security Group
  2. Cloud SQL
  3. Instance Group
  4. NLB
  5. Private Service Connect

最后通过在需要访问 RDS-MySQL 的 VPC 中申请 Endpoint,从而打通网络。

  • 为什么引入NLB
    Private Service Connect 申请需要绑定一个 NLB 来实现。

  • 为什么引入 Instance Group
    GCP 的 NLB 后端只能挂载 vm,所以需要通过一个 vm 把流量转发到 Cloud SQL 分配的 private ip

GCP 手动方案验证

创建独立的 VPC(metaDB VPC)

为 service 预留 ip range (10.215.118.0/24)

VPC firewall 开放该 ip range 的 ingess/egress 流量,简单起见使用 0.0.0.0/0

创建 CloudSQL 并分配 private ip

创建 cloudSQL,去掉 public ip,勾选 private ip,绑定之前生成的 VPC network(metaDB VPC), 选择预留的 ip range(10.215.118.0/24) , 从而获得在 metaDB VPC 中映射的 private ip(10.215.118.5)。
在分配 private ip 的过程中,console 自动创建了 metaDB VPC 到 google self-managed VPC(cloudSQL 自带) 的 vpc peering。

创建 instance group + vm

  • 在 metaDB VPC 中创建一个 subnet 10.20.0.0/16,然后创建 vm 关联 lb-test 分配 internal ip(10.20.0.2)
  • 登陆 vm 设置 nat 路由规则,将 Cloud SQL 请求转发从 VM 转发到 CloudSQL
// 临时打开 ip forward 能力
sudo sysctl -w net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp --dport 3306 -j DNAT --to-destination 10.215.118.2:3306
iptables -A FORWARD -p tcp  -d 10.215.118.2 --dport 3306 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE
  • 创建 unmanaged instance group
    创建 instance group 绑定之前创建的 vm

创建 Cloud load balance(L4)

创建 ILB,绑定 unmanaged instance group,选择 lb-test subnet,给 lb 分配个 internal ip(10.20.1.13), 开放所有端口。

创建 private service connect service

  • 在 metaDB VPC 中给 private service connect 分配个单独的 subnet 10.21.0.0/24
  • 创建 private service connect service,绑定 Cloud load balance,选择上步创建的subnet,选择自动同意 endpoint。

搭建 customer VPC 验证通过 PSC 访问 Cloud SQL

在另外一个用户的 project 中

  • 创建 dataplane VPC, 新建 subnet,给 private service connect endpoint 和 vm 使用
  • 创建 private service connect endpoint, 选择 cloudSQL service name
  • 创建 DNS zone, 绑定 private service connect endpoint 的 ip 和 port 443
  • 在 subnet 中创建个 vm,登陆 vm,验证使用 endpoint 连接 cloud SQL:
mysql -h10.176.0.4 -P3306 -uroot -p
Enter password: 
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MySQL connection id is 43087
Server version: 5.7.39-google-log (Google)

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MySQL [(none)]>
posted @ 2023-02-15 21:15  Blue Mountain  阅读(283)  评论(0编辑  收藏  举报