使用 MongoDB+SRV 连接到部署为 StatefulSet 的 MongoDB



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

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

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 集群正常运行,我可以通过本地主机或使用单独的(非无头(服务连接到成员(例如mongo "mongodb://mongodb.mongo.svc.cluster.local"(。

我是否在mongodb+srv要求/实现中缺少某些内容,或者我需要在 k8s 部署中调整某些内容?

默认情况下,mongodb+srv://的连接使用 SSL/TLS。您需要通过添加tls=falsessl=false来手动禁用它们。

以下连接 URI 在 GKE 上的 MongoDB 4.2 三成员副本集上为我工作。

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

添加replicaSet查询选项可能有助于连接到正确的副本集。

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

最新更新