gpt4 book ai didi

mongodb - 无法连接到Kubernetes中的Mongodb Pod(拒绝连接)

转载 作者:行者123 更新时间:2023-12-02 11:32:44 26 4
gpt4 key购买 nike

我有一些远程虚拟机,我想在这些虚拟机上部署一些Mongodb实例,然后使其可以远程访问,但是由于某些原因,我似乎无法使它工作。

这些是我采取的步骤:

  • 我启动了在远程虚拟机上运行Mongodb的Kubernetes pod。
  • 然后我通过Kubernetes NodePort服务公开了它。
  • 然后我尝试从笔记本电脑连接到Mongodb实例,但是它
    没用。

  • 这是我用来尝试连接的命令:
    $ mongo host:NodePort   

    (“主机”是指Kubernetes主机)。

    这是它的输出:
    MongoDB shell version v4.0.3
    connecting to: mongodb://host:NodePort/test
    2018-10-24T21:43:41.462+0200 E QUERY [js] Error: couldn't connect to server host:NodePort, connection attempt failed: SocketException:
    Error connecting to host:NodePort :: caused by :: Connection refused :
    connect@src/mongo/shell/mongo.js:257:13
    @(connect):1:6
    exception: connect failed

    从Kubernetes管理员那里,我确保Mongodb pod处于运行状态。然后,我在容器中运行了一个shell,并检查了Mongodb服务器是否正常运行。此外,我以前通过在Yaml描述中指定“--bind-ip = 0.0.0.0”选项来授予对Mongodb服务器的远程访问权限。为了确保已应用此选项,我在同一 shell 的Mongodb实例中运行了此命令:
    db._adminCommand( {getCmdLineOpts: 1}

    这是输出:
    {
    "argv" : [
    "mongod",
    "--bind_ip",
    "0.0.0.0"
    ],
    "parsed" : {
    "net" : {
    "bindIp" : "0.0.0.0"
    }
    },
    "ok" : 1
    }

    因此,Mongodb服务器实际上应该可以远程访问。

    我不知道问题是由Kubernetes还是Mongodb引起的。

    作为测试,我通过使用MySQL遵循了完全相同的步骤,并且可以正常工作(即,我运行一个MySQL pod并使用Kubernetes服务将其公开,使其可以远程访问,然后从我成功地连接到它笔记本电脑)。这会让我认为罪魁祸首是这里的Mongodb,但我不确定。也许我只是在某个地方犯了一个愚蠢的错误。

    有人可以帮我阐明一下吗?还是告诉我如何调试此问题?

    编辑:

    根据您的请求,这是 kubectl describe deployment <mongo-deployment>命令的输出:
    Name:                   mongo-remote
    Namespace: default
    CreationTimestamp: Thu, 25 Oct 2018 06:31:24 +0000
    Labels: name=mongo-remote
    Annotations: deployment.kubernetes.io/revision=1
    Selector: name=mongo-remote
    Replicas: 1 desired | 1 updated | 1 total | 1 available | 0 unavailable
    StrategyType: RollingUpdate
    MinReadySeconds: 0
    RollingUpdateStrategy: 1 max unavailable, 1 max surge
    Pod Template:
    Labels: name=mongo-remote
    Containers:
    mongocontainer:
    Image: mongo:4.0.3
    Port: 5000/TCP
    Host Port: 0/TCP
    Command:
    mongod
    --bind_ip
    0.0.0.0
    Environment: <none>
    Mounts: <none>
    Volumes: <none>
    Conditions:
    Type Status Reason
    ---- ------ ------
    Available True MinimumReplicasAvailable
    OldReplicaSets: <none>
    NewReplicaSet: mongo-remote-655478448b (1/1 replicas created)
    Events:
    Type Reason Age From Message
    ---- ------ ---- ---- -------
    Normal ScalingReplicaSet 15m deployment-controller Scaled up replica set mongo-remote-655478448b to 1

    为了完整起见,以下是部署的yaml描述:
    apiVersion: extensions/v1beta1
    kind: Deployment
    metadata:
    name: mongo-remote
    spec:
    replicas: 1
    template:
    metadata:
    labels:
    name: mongo-remote
    spec:
    containers:
    - name: mongocontainer
    image: mongo:4.0.3
    imagePullPolicy: Always
    command:
    - "mongod"
    - "--bind_ip"
    - "0.0.0.0"
    ports:
    - containerPort: 5000
    name: mongocontainer
    nodeSelector:
    kubernetes.io/hostname: xxx

    最佳答案

    我发现了错误(而且我怀疑这是一个愚蠢的错误)。
    问题出在部署的yaml描述中。由于在mongod命令中未指定任何端口,因此mongodb在侦听默认端口(27017),但是容器在侦听另一个指定的端口(5000)。

    因此,解决方案是将containerPort设置为mongodb的默认端口,如下所示:

           command:
    - "mongod"
    - "--bind_ip"
    - "0.0.0.0"
    ports:
    - containerPort: 27017
    name: mongocontainer

    或将mongodb的端口设置为containerPort之一,如下所示:
          command:
    - "mongod"
    - "--bind_ip"
    - "0.0.0.0"
    - "--port"
    - "5000"
    ports:
    - containerPort: 5000
    name: mongocontainer

    关于mongodb - 无法连接到Kubernetes中的Mongodb Pod(拒绝连接),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52978472/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com