背景
由于gcp和国内是有专线的,所以各个网络是互通,这样也就是需要保证每一个网段不能有冲突。
但是gcp中,创建mysql的时候会默认自动分配一段网段,这个默认是没法指定的,所以这样就会有网段冲突的风险。
概念
当我们创建了mysql后,会默认生成两个private service connection(专有服务连接,可以在vpc下面看到),这个的本质就是做vpc peering。如下是两个专有服务连接,一个是连接到cloud sql的project,一个是连接到其他公共服务的project。
1 | servicenetworking-googleapis-com |
其实你在vpc peering中也可以看到,默认会有两个:
之后你就会看到默认会给你这两个专有服务连接分配了一段地址,这个名字叫google-managed-services-+vpc名字
,这个地址段是随机分配的,并且也绑定上了两个专有连接。
思路
思路很简单了,自定义创建一个ip range地址段,然后手动绑定到两个专有连接上。
1.创建ip range 地址段
2.使用gcloud更新
翻看官网文档,这个需要使用gcloud命令行来更新,不然只能对专有连接的ip段进行叠加
。
我们只需要更新servicenetworking-googleapis-com
这个专有连接即可,不用更新cloudsql。
1 | gcloud services vpc-peerings update \ |
注意:range就是你刚自定义创建的地址段名称,network就是你vpc的名称。
3.验证
最终你会发现你的自定义地址段就生效了
温馨提示
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,那么创建云服务的时候会报这个错:
参考链接:https://cloud.google.com/vpc/docs/configure-private-services-access#allocating-range
温馨提示2
如果你跟国内有bgp专线,那么有两种情况:
- custom 子网通告到对端,需要在哪里配置
- 自定义vpc peering子网通告到对端,需要在哪里配置
第一种情况,直接在vpc下面新增一个子网,然后直接在bgp router上配置自定义子网即可:
第二种情况,新增的vpc peering子网,比如mysql,redis等,需要在bpg会话配置自定义子网: