修改gcp默认的cloudsql网段

背景

由于gcp和国内是有专线的,所以各个网络是互通,这样也就是需要保证每一个网段不能有冲突。
但是gcp中,创建mysql的时候会默认自动分配一段网段,这个默认是没法指定的,所以这样就会有网段冲突的风险。

概念

当我们创建了mysql后,会默认生成两个private service connection(专有服务连接,可以在vpc下面看到),这个的本质就是做vpc peering。如下是两个专有服务连接,一个是连接到cloud sql的project,一个是连接到其他公共服务的project。

1
2
servicenetworking-googleapis-com
cloudsql-mysql-googleapis-com

其实你在vpc peering中也可以看到,默认会有两个:
png1

之后你就会看到默认会给你这两个专有服务连接分配了一段地址,这个名字叫google-managed-services-+vpc名字,这个地址段是随机分配的,并且也绑定上了两个专有连接。
png2
png3

思路

思路很简单了,自定义创建一个ip range地址段,然后手动绑定到两个专有连接上。

1.创建ip range 地址段

png4

2.使用gcloud更新

翻看官网文档,这个需要使用gcloud命令行来更新,不然只能对专有连接的ip段进行叠加
我们只需要更新servicenetworking-googleapis-com这个专有连接即可,不用更新cloudsql。

1
2
3
4
5
gcloud services vpc-peerings update \
--service=servicenetworking.googleapis.com \
--ranges=test \
--network=xxxx \
--force

注意:range就是你刚自定义创建的地址段名称,network就是你vpc的名称。

3.验证

最终你会发现你的自定义地址段就生效了
png5

温馨提示

1.自定义ip range必须是24位的
2.mysql、redis需要一个单独的ip range
3.mc和redis可以共用一个ip range
4.cloudsql-ip-range是vpc级别的,不是region级别,多个ip-range,只有当一个用完了,才会用下一个
5.private dns zone也是vpc级别的,不是region级别,一个vpc下不同region是走的一个dns zone

如果你只分配了一个ip range,那么创建云服务的时候会报这个错:
png6

参考链接:https://cloud.google.com/vpc/docs/configure-private-services-access#allocating-range

温馨提示2

如果你跟国内有bgp专线,那么有两种情况:

  1. custom 子网通告到对端,需要在哪里配置
  2. 自定义vpc peering子网通告到对端,需要在哪里配置

第一种情况,直接在vpc下面新增一个子网,然后直接在bgp router上配置自定义子网即可:
png7

第二种情况,新增的vpc peering子网,比如mysql,redis等,需要在bpg会话配置自定义子网:
png8
png9