使用mongodb + srv连接到部署为状态集的mongodb

时间:2018-05-04 16:47:44

标签: mongodb kubernetes

我在kubernetes中部署了一个3 pod mongodb statefulset,我试图使用新的mongodb+srv连接字符串(mongodb 3.6)连接到具有集群成员SRV记录的无头k8s服务。 / p>

但是,连接失败如下(正在satefulset中的第一个pod上执行mongo命令):

root@mongodb-0:/# mongo "mongodb+srv://mongodb-headless.mongo.svc.cluster.local"
FailedToParse: Hostname mongodb-0.mongodb-headless.mongo.svc.cluster.local. is not within the domain mongo.svc.cluster.local
try 'mongo --help' for more information

这是无头服务配置:

kubectl describe svc/mongodb-headless -n mongo
Name:              mongodb-headless
Namespace:         mongo
Labels:            app=mongodb-headless
                   chart=mongodb-1.0.1
                   heritage=Tiller
                   release=mongo
Annotations:       service.alpha.kubernetes.io/tolerate-unready-endpoints=true
Selector:          app=mongodb,release=mongo
Type:              ClusterIP
IP:                None
Port:              mongodb  27017/TCP
TargetPort:        27017/TCP
Endpoints:         
192.168.16.8:27017,192.168.208.3:27017,192.168.64.9:27017
Session Affinity:  None
Events:            <none>

mongodb群集功能正常,我可以通过localhost或使用单独的(非无头)服务(例如mongo "mongodb://mongodb.mongo.svc.cluster.local")连接到成员。

我是否遗漏了mongodb+srv要求/实施中的内容,或者我是否需要在k8s部署中调整某些内容?

1 个答案:

答案 0 :(得分:0)

mongodb+srv:// use SSL/TLS by default的连接。您需要通过添加tls=falsessl=false来手动禁用它们。

以下连接URI在GKE上设置的MongoDB 4.2三个成员副本上对我有用。

mongo "mongodb+srv://svc-headless.cluster.local/?tls=false&ssl=false"

添加replicaSet查询选项可能有助于连接到主要成员。

mongo "mongodb+srv://svc-headless.cluster.local/?tls=false&ssl=false&replicaSet=rs0"