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,就会给到真实的连接地址

posted @ 2023-09-01 10:46  Professor哥  阅读(2)  评论(0编辑  收藏  举报