我有一些远程虚拟机,我想在其上部署一些 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 服务器的远程访问权限。为确保已应用此选项,我在 Mongodb 实例中从同一个 shell 运行此命令:
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