当前位置: 首页 > 知识库问答 >
问题:

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

东方飞捷
2023-03-14

谁能指出如何连接到mongodb实例使用mongo客户端使用命令行客户端或从. net核心程序与连接字符串?

我们已经创建了一个具有命名空间的数字海洋示例集群,让我们说mongo数据库。

我们安装了带有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

其中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)等,

任何一个可以帮助正确的dns名称/连接字符串使用,同时连接mongo客户端在命令行中,也从像java/. net核心等程序?

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

共有3个答案

羊禄
2023-03-14

我认为您正在寻找用于服务和 Pod 的此 DNS。

您可以为服务Pod使用完全限定的域名(FQDN)。

另外请看看这个kubernetes:位于另一个命名空间中的服务,因为我认为它将为您提供有关如何从不同命名空间访问它的答案。

示例如下所示:

apiVersion: v1
kind: Service
metadata:
  name: default-subdomain
spec:
  selector:
    name: busybox
  clusterIP: None
  ports:
  - name: foo # Actually, no port is needed.
    port: 1234
    targetPort: 1234
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox1
  labels:
    name: busybox
spec:
  hostname: busybox-1
  subdomain: default-subdomain
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    name: busybox
---
apiVersion: v1
kind: Pod
metadata:
  name: busybox2
  labels:
    name: busybox
spec:
  hostname: busybox-2
  subdomain: default-subdomain
  containers:
  - image: busybox:1.28
    command:
      - sleep
      - "3600"
    name: busybox

如果在与pod相同的命名空间中存在一个无头服务,并且与子域同名,集群的KubeDNS服务器也会返回pod的完全限定主机名的a记录。例如,如果一个Pod的主机名设置为“busybox-1”,子域设置为“<code>default subdomain”的无头服务,则该Pod将看到其自己的FQDN为“ busybox1”和“ busybox2”都可以有不同的A记录。

Endpoints对象可以为任何endpoint地址及其IP指定主机名

注意:因为没有为Pod名称创建A记录,所以创建Pod的A记录需要主机名。没有主机名但具有subdomain的Pod将只为无头服务( )创建A记录,并指向Pod的IP地址。此外,Pod需要准备好才能有记录,除非在服务上设置了 publishNotReadyAddresses=True

乜业
2023-03-14

这就是你如何进入mongo舱

kubectl --kubeconfig=configfile.yaml  exec -ti mongo-0 sh
夹谷志
2023-03-14

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

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

mymongo命名空间中,此命令有效

$ kubectl config set-context --current --namespace=mymongonamespace
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp

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

$ kubectl config set-context --current --namespace=default
$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp

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

$ kubectl run mongodbclient --rm --tty -i --image bitnami/mongodb --command -- mongo --host mymongoapp.mymongonamespace
 类似资料:
  • 我得到了(超过)两个Api POSTendpoint。每一个都需要一个json作为参数。但是当我在两个endpoint参数类中使用相同的类名负载时,Swagger就不起作用了。当我改变其中的一个,例如从有效载荷到有效载荷1时,它就不起作用了。当然,我在包装类中设置了正确的名称空间,以便它找到负载。但我希望每次都使用相同的名称“有效载荷”。如何使用相同的类名负载?在这两种情况下,我都可以保留json

  • 我只是用MVVM轻型工具包编写一些培训窗口项目。当MVVM Light引用添加到项目中时,下面的资源被自动添加到app.xml中 不幸的是,它不起作用,即由于以下错误,无法构建/编译项目: 我找到了几种针对此问题的常见解决方案(例如:更改解决方案平台、清理、重建、重新启动Visual Studio等),但它们并没有改变什么。创建一个新项目也没有帮助。 有没有其他办法让它起作用?我使用Visual

  • 在OpenFOAM中,存在一个函数,其名称为exp,表示数学中的幂操作。同时,C++本身也可以进行这个计算,并且函数名称也为exp。这会导致调用的时候,编译器并不知道应该调用OpenFOAM的exp还是C++本身的exp。一种方法是将其中一个exp函数进行改名,比如将OpenFOAM中的exp改成expFoam。但还有更简单的方式。 名称空间专门用于解决上面的问题,它可作为附加信息来区分不同库中相

  • Oracle版本: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production jdbc驱动版本: ojdbc8@19.3.0.0

  • 在Visual Studio 2015专业版中打开我的项目时,我的所有视图(*. cshtml)中都有以下错误(以及更多)。 错误CS0246找不到类型或命名空间名称“系统”(您是否缺少使用指令或程序集引用?)严重性代码描述项目文件行 错误CS0518预定义类型“系统”。对象“”未定义或导入严重性代码描述项目文件行 错误CS0518预定义类型“系统”。字符串“”未定义或导入 我有这些参考资料: 我

  • 我已经创建了空的ASP.NET核心项目,我想在那里设置角。为此,我需要应用程序服务静态文件。所以我的startup.cs看起来是: 怎么了?