如何通过 MongoDB Compass 或 RoboMongo 等 UI 工具连接运行在 Kubernetes 集群上的 MongoDB?

问题描述 投票:0回答:4

我通过 Helm 包在 Kubernetes 集群中部署了多个 MongoDB 实例。 它们作为服务在 NodePort 中运行。

如何通过 MongoDB Compass 和 RoboMongo 等 UI 工具从集群外部连接到这些 MongoDB 实例?

mongodb kubernetes mongodb-compass robo3t
4个回答
13
投票

您可以使用

kubectl port-forward
从集群外部连接到 MongoDB。

运行

kubectl port-forward name-of-a-mongodb-pod --namespace mongodb-namespace 27017:27017

现在将您的 UI 工具指向

localhost:27017
kubectl
会将所有连接转发到集群内的 Pod/服务。

从 Kubernetes 1.10+ 开始,您还可以使用此语法连接到服务(不必先找到 pod 名称):

kubectl port-forward svc/mongodb-service-name 27017:27017 --namespace mongodb-namespace

示例

如果您的连接字符串如下所示:

mongodb://username:[email protected]:27017,mongodb-1.mongodb-svc.mongodb.svc.cluster.local:27017,mongodb-2.mongodb-svc.mongodb.svc.cluster.local:27017/admin?replicaSet=mongodb&ssl=false

  1. 将主机名添加到您的主机文件中:

127.0.0.1 mongodb-0.mongodb-svc.mongodb.svc.cluster.local

127.0.0.1 mongodb-1.mongodb-svc.mongodb.svc.cluster.local

127.0.0.1 mongodb-2.mongodb-svc.mongodb.svc.cluster.local

  1. 使用 MongoDB Compass 或 Robo 3T 并使用以下连接字符串:

mongodb://username:[email protected]:27017,mongodb-1.mongodb-svc.mongodb.svc.cluster.local:27017,mongodb-2.mongodb-svc.mongodb.svc.cluster.local:27017/admin?replicaSet=mongodb&ssl=false


1
投票

获取与 MongoDB 关联的服务:

kubectl get services -n <namespace>

端口转发使用:

kubectl port-forward service/<service_name> -n <namespace> 27018:27017

localhost:27018
上打开 Robomongo。


0
投票

如果它不是您的生产数据库,您可以通过 NodePort 服务公开它:

# find mongo pod name
kubectl get pods
kubectl expose pod <<pod name>> --type=NodePort
# find new mongo service
kubectl get services

最后一个命令将输出类似的内容

mongodb-0   10.0.0.45    <nodes>       27017:32151/TCP   30s

现在您可以使用

mongo <<node-ip>>:32151

访问您的 mongo 实例

0
投票

如果未解决,请将您的 mongo 工作负载公开为负载均衡器并使用该服务提供的 IP 地址。复制LB IP地址并在robo3T中使用相同的IP地址。如果需要身份验证,请检查下面我的 YAML 文件:

apiVersion: apps/v1
kind: Deployment
metadata:
    name: mongodb
    labels:
        app: mongodb
spec:
    replicas: 1
    selector:
        matchLabels:
            app: mongodb
    template:
        metadata:
            labels:
                app: mongodb
        spec:
            containers:
                - name: mongodb
                  image: mongo
                  volumeMounts:
                      - name: data
                        mountPath: "/data/db"
                        subPath: "mongodb_data"
                  ports:
                      - containerPort: 27017
                        protocol: TCP
                  env:
                      - name: MONGO_INITDB_ROOT_USERNAME
                        value: xxxx
                      - name: MONGO_INITDB_ROOT_PASSWORD
                        value: xxxx
            imagePullSecrets:
                - name: xxxx
            volumes:
                - name: data
                  persistentVolumeClaim:
                      claimName: xxx

在 ROBO3T 的身份验证选项卡中设置相同的值

注意: 我没有在 YAML 中提到服务部分,因为我直接在 GCP UI 本身中公开为 LB。

© www.soinside.com 2019 - 2024. All rights reserved.