Google Cloud (GCP) 使用基于 Atlas 的 MongoDB 托管服务,配置Google Cloud VPC Peering 方式进行数据访问
Google Cloud 自身只提供有少部分的 SaaS 托管服务,其他包括 ElasticSearch、MongoDB、Kafka 等服务都是基于合作伙伴公有云的方式,直接打通与全球各区域的 GCP 实例以提供云上服务。
背景
使用者希望数据通过类似于 VPC Peering 或者 Private Service Connect(PSC) 的方式进行数据传输到 Atlas MongoDB 中,保证数据的安全性,而且对于业务访问也可以做到无感知直接访问,在全球各相同区域能保证数据传输的效率。
解决思路
Atlas MongoDB 支持与 Azure、AWS、GCP 云厂商直接打通 VPC Peering 访问,当然,也提供了 PSC 的方式进行访问。
本文介绍使用 VPC Peering 的方式进行网络打通。
- 创建 Atlas MongoDB 集群
- 在 Atlas MongoDB 上创建对应云服务商的 VPC Peering Connection 配置信息
- 在 GCP 上 VPC 对接 Atlas MongoDB 服务
开通服务访问权限
首先需要联系销售伙伴开通使用 Elastic Cloud 云服务的权限,并且订阅该服务。
在 GCP 服务页面搜索 MongoDB 服务
开通权限后,使用 Google 账号进行登录
创建 MongoDB 集群
首先创建一个 Project
这里可以添加集群的账户信息
Project 创建完成后,在该 Project 下创建 MongoDB deployment 集群
选择合适的集群类型
注意: 这里需要选择
M10
或者以上,才能支持 VPC Peering 特性
选择实例的基础云提供商,以及对应的 region
区域
集群创建很简单,一键操作,在后台创建期间,可以添加 DB 的账户信息,以及连接地址白名单
在 Atlas MongoDB 实例上,创建 VPC Peering
在 Deployment
->Network Access
->Peering
添加一个 Peering Connection
选择云服务提供商 GCP
填入自己的项目ID,VPC 名称
项目ID 在这里查看
创建完成后,进入等待对接对端对等链接阶段
回到 GCP,准备对接 VPC Peering
VPC网络
->VPC网络对等连接
->创建对等连接
填入该对等连接的名称,选择GCP侧的 VPC 网络
在下方对等连接里,选择在其他项目中
,项目ID
填入 Atlas MongoDB页面中生成的项目ID,VPC网络名称
填入 Atlas MongoDB 页面中生成的网络名称
勾选导入自定义路由
和导出自定义路由
, 点击创建
稍等片刻后,会在两端看到该对等连接处于活跃 Active(Available)
状态
在 Atlas MongoDB 的 Deployment 侧添加网络白名单
我这里添加上 GKE 的两个IP段,不然无法通信
测试验证
回到 Deployment 的主面板,点击Connect
按钮,进入连接指引弹窗页面
选择使用 Private IP for Peering
类型
我这里选择 Shell 方式进行测试
## 在 GKE 里面手动启动一个 Mongodb Client 容器
>_ kubectl run --restart=Never mongodb --image=bitnami/mongodb:latest --command -- sleep infinity
在容器内部,进行连接测试
使用传统的连接方式
在该示例里,官方只给了使用mongodb+srv://[path]
的方式进行连接,实际上业务配置里面可能还对这种新型的连接方式兼容性不够,需要转换为原有传统的mongodb://[path]
的方式进行使用。
mongodb+srv://
的连接scheme 大致原理是,由连接器进行 SRV DNS 查询,查询FQDN格式为 _mongodb._tcp.[endpoint]
的 SRV 记录,该记录会返回服务名为mongodb
,提供网络连接协议为tcp
的真实对端信息
如图所示,返回了该服务连接协议在DNS里面找到的信息,其中27017
为开放的TCP端口,真实endpoint为 poptube-production-mong-shard-00-01-pri.reqvr.mongodb.net
另外,连接参数也是通过 DNS 的 TXT 记录提供的
如图所示,返回了默认的url参数串,包含 authSource
认证库串,replicaSet
副本及名称信息。
那么我们就可以基于以上信息,组装成传统连接串,以供业务侧配置使用
mongodb://<username>:<password>@poptube-production-mong-shard-00-00-pri.reqvr.mongodb.net:27017,poptube-production-mong-shard-00-01-pri.reqvr.mongodb.net:27017,poptube-production-mong-shard-00-02-pri.reqvr.mongodb.net:27017/?ssl=true&replicaSet=atlas-kvo2fp-shard-0&authSource=admin&retryWrites=true&w=majority
PS: 其实也不用这么复杂,直接在连接指引弹窗里面,选择一个低版本的client,就会给到真实的连接地址