连接到不同命名空间中的 Kubernetes mongo db

Mut*_*thu 3 mongodb kubernetes kubernetes-statefulset

任何人都可以指出如何使用 mongo 客户端使用命令行客户端或使用连接字符串从 .net core 程序连接到 mongo 数据库实例?

我们在 digitalocean 中创建了一个带有命名空间的示例集群,假设是mongodatabase

我们安装了带有 3 个副本的 mongo statefulset。我们能够使用以下命令成功连接 kubectl --kubeconfig=configfile.yaml -n mongodatabase exec -ti mongo-0 mongo 但是当我们从不同的命名空间或默认命名空间使用以下格式的 pod 名称连接时,它不起作用。

 kubectl --kubeconfig=configfile.yaml  exec -ti mongo-0.mongo.mongodatabase.cluster.svc.local mongo
Run Code Online (Sandbox Code Playgroud)

其中mongo-0.mongo.mongodatabase.cluster.svc.local位于pod-0.service_name.namespace.cluster.svc.local中(也尝试了 pod-0.statfulset_name.namespace.cluster.svc.local 和 pod-0。 service_name.statefulsetname.namespace.cluster.svc.local) 等,

任何人都可以帮助在命令行中以及从 java/.net core 等程序连接 mongo 客户端时使用正确的 dns 名称/连接字符串吗?

另外,我们应该在这里使用 kubernetes 部署而不是有状态集吗?

fra*_*nkd 5

您需要通过命名空间 dns 引用 mongo 服务。因此,如果您的 mongo 服务是mymongoapp并且部署在 中mymongonamespace,您应该能够以mymongoapp.mymongonamespace.

为了测试,我使用了bitnami/mongodbdocker 客户端。如下:

从内部来看mymongonamespace,这个命令有效

$ kubectl config set-context --current --namespace=mymongonamespace
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp
Run Code Online (Sandbox Code Playgroud)

但是当我切换到默认名称空间时它不起作用

$ kubectl config set-context --current --namespace=default
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp
Run Code Online (Sandbox Code Playgroud)

然后使用命名空间限定主机

$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp.mymongonamespace
Run Code Online (Sandbox Code Playgroud)