[英]Cannot connect to a Mongodb pod in Kubernetes (Connection refused)
我有一些遠程虛擬機,我想在這些虛擬機上部署一些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實例中運行了此命令:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.