1

I have deployed a mongodb replicaset (v6.0.2) using this chart: bitnami/mongodb 13.3.1

I have enabled external access with SVC type LoadBalancer. I have my DNS records pointing to each external SVC IP.

  • mongodb-0.dev -> 10.246.50.1
  • mongodb-1.dev -> 10.246.50.2
  • mongodb-2.dev -> 10.246.50.3
kubectl get pod,svc -owide
NAME                    READY   STATUS               
pod/mongodb-0           2/2     Running   
pod/mongodb-1           2/2     Running  
pod/mongodb-2           2/2     Running   
pod/mongodb-arbiter-0   2/2     Running   

NAME                               TYPE           CLUSTER-IP      EXTERNAL-IP    PORT(S)           AGE     SELECTOR
service/mongodb-0-external         LoadBalancer   10.43.182.101   10.246.50.1   27017:30727/TCP   6m6s    app.kubernetes.io/component=mongodb,app.kubernetes.io/instance=mongodb,app.kubernetes.io/name=mongodb,statefulset.kubernetes.io/pod-name=mongodb-0
service/mongodb-1-external         LoadBalancer   10.43.130.10    10.246.50.2   27017:30137/TCP   6m6s    app.kubernetes.io/component=mongodb,app.kubernetes.io/instance=mongodb,app.kubernetes.io/name=mongodb,statefulset.kubernetes.io/pod-name=mongodb-1
service/mongodb-2-external         LoadBalancer   10.43.86.149    10.246.50.3   27017:32246/TCP   6m6s    app.kubernetes.io/component=mongodb,app.kubernetes.io/instance=mongodb,app.kubernetes.io/name=mongodb,statefulset.kubernetes.io/pod-name=mongodb-2
service/mongodb-arbiter-headless   ClusterIP      None            <none>         27017/TCP         8m51s   app.kubernetes.io/component=arbiter,app.kubernetes.io/instance=mongodb,app.kubernetes.io/name=mongodb
service/mongodb-headless           ClusterIP      None            <none>         27017/TCP         8m51s   app.kubernetes.io/component=mongodb,app.kubernetes.io/instance=mongodb,app.kubernetes.io/name=mongodb

I run a docker from OUTSIDE to test the client:

docker run --rm -it -v docker.io/bitnami/mongodb:6.0.2-debian-11-r1 bash

I CAN connect from OUTSIDE using this command:

mongosh  mongodb://mongodb-0.dev:27017 --authenticationDatabase admin -u root -p root1234
Connecting to:      mongodb://<credentials>@mongodb-0.dev:27017/?directConnection=true&authSource=admin

rs0 [direct: primary] test> 

I CAN'T connect using this one:

mongosh  mongodb://mongodb-0.dev:27017,mongodb-1.dev:27017,mongodb-2.dev:27017?replicaSet=rs0 --authenticationDatabase admin -u root -p root1234

Connecting to:      mongodb://<credentials>@mongodb-0.dev:27017,mongodb-1.dev:27017,mongodb-2.dev:27017/?replicaSet=rs0&authSource=admin&appName=mongosh+1.6.0

MongoNetworkError: getaddrinfo ENOTFOUND mongodb-0.mongodb-headless.mongodb.svc.cluster.local

Of course, If I add the DNS records it works (pay attention at the prompt)::

  • mongodb-0.mongodb-headless.mongodb.svc.cluster.local -> 10.246.50.1
  • mongodb-1.mongodb-headless.mongodb.svc.cluster.local -> 10.246.50.2
  • mongodb-2.mongodb-headless.mongodb.svc.cluster.local -> 10.246.50.3
Connecting to:      mongodb://<credentials>@mongodb-0.dev:27017,mongodb-1.dev:27017,mongodb-2.dev:27017/?replicaSet=rs0&authSource=admin&appName=mongosh+1.6.0

rs0 [primary] test> 

But I don't want to do that workaround at DNS level, of course it's wrong. I also don't want to harcode IPs on /etc/hosts

Extra TIP: From INSIDE the k8s cluster this works:

kubectl run mongo-client-6 --rm -ti --image=docker.io/bitnami/mongodb:6.0.2-debian-11-r1 -- bash
mongosh --host mongodb-headless --authenticationDatabase admin -u root -p root1234

Summary: I want to connect using the SECOND method (replica set from OUTSIDE) Any help?

mrk
  • 640
  • 8
  • 16

1 Answers1

0

I have the same issue I believe the core reason is that the internal host entries for replicas are cluster-based not external URLs so when you access the server from outside the internal logic of replicas still using the internal headless service.

I am still trying to solve this issue from my side but still.

Victor Faltas
  • 168
  • 1
  • 9