【问题标题】:Access to Mongodb in Kubernetes在 Kubernetes 中访问 Mongodb
【发布时间】:2016-04-13 08:58:56
【问题描述】:

我根据Kubernetestutorial创建了一个Mongodb服务。

现在我的问题是如何使用 Robomongo 之类的客户端或类似客户端访问数据库本身?仅用于进行备份或探索已输入的数据。

mongo-pod 和服务只有一个内部端点和一个挂载。

有没有办法在没有公共端点的情况下安全地访问这个实例?

内部 URI 是 mongo:27***

【问题讨论】:

  • 我强烈建议使用 mongo shell (docs.mongodb.org/getting-started/shell/client) 作为 mongo 客户端,mongodumpmongorestore 用于备份。使用像 Robomongo 这样的 GUI 作为补充,而不是作为主要客户端。
  • 如果您知道容器名称(类似于 k8s_mongo),您可以通过 docker exec 命令访问正在运行的容器的外壳:docker ps --format "{{.ID}}\t{{.Names}}" | grep "${name}" | cut -f1 | xargs -I NAME docker exec -i NAME echo 1

标签: mongodb mean-stack kubernetes


【解决方案1】:

您可以使用kubectl port-forward mypod 27017:27017,然后将您的mongodb客户端连接到localhost:27017

如果您想停止,只需在同一 cmd 窗口中点击 Ctrl+C 即可停止该进程。

【讨论】:

  • 非常适合从计算机中运行的 Robomongo 等外部客户端访问
  • 你也可以使用kubectl port-forward svc/mongodb 27018:27017而不是podname的服务名称连接到一个pod,这样你就不必查找不断变化的pod名称
  • 您好,如何在集群外的这个端口上使用该服务?
【解决方案2】:

kubernetes cmd-line 工具提供了此功能,正如 @ainlolcat 所述

kubectl get pods

检索当前运行的 pod 名称并使用:

kubectl exec -i mongo-controller-* bash

你会得到一个基本的 bash,它可以让你执行

mongo

进入数据库以创建转储,等等。 bash 非常基础,没有补全等功能。我还没有找到更好的外壳的解决方案,但它可以完成这项工作

【讨论】:

    【解决方案3】:

    当您在 kubernetes 中创建服务时,您需要为其命名,例如“mymongo”。服务创建完成后

    kubernetes 的 DNS 服务(默认开启)将确保任何 pod 都可以通过其名称发现该 servixe。所以你可以像

    一样设置你的 uri
    uri: mongodb://**mymongo**:27017/mong
    

    此外,服务 IP 和端口将被设置为运行 pod 的环境变量。

    MYMONGO_SERVICE_HOST

    MYMONGO_SERVICE_PORT

    事实上,我写了一篇博客,展示了一个带有 nodejs Web 服务器和 mongo 的应用程序的分步示例,可以进一步解释

    http://codefresh.io/blog/kubernetes-snowboarding-everything-intro-kubernetes/

    欢迎反馈!

    【讨论】:

      【解决方案4】:

      @grchallenge 的回答是正确的,但自 2021 年起已弃用

      所有新人请使用

      kubectl exec  mongo-pod-name -i -- bash
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-03-05
        • 2021-03-09
        • 1970-01-01
        • 2020-03-23
        • 2023-03-16
        • 2021-04-18
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多