ani*_*kun 6 mongodb calico kubernetes google-kubernetes-engine kubectl
我正在尝试通过 kubectl 访问 mongodb 复制集,所以我不会将其公开到互联网,我无法使用 OpenVPN,因为 Calico 阻止了它。
所以我正在使用这个脚本:
export MONGO_POD_NAME1=$(kubectl get pods --namespace develop -l "app=mongodb-replicaset" -o jsonpath="{.items[0].metadata.name}")
export MONGO_POD_NAME2=$(kubectl get pods --namespace develop -l "app=mongodb-replicaset" -o jsonpath="{.items[1].metadata.name}")
export MONGO_POD_NAME3=$(kubectl get pods --namespace develop -l "app=mongodb-replicaset" -o jsonpath="{.items[2].metadata.name}")
echo $MONGO_POD_NAME1, $MONGO_POD_NAME2, $MONGO_POD_NAME3
kubectl port-forward --namespace develop $MONGO_POD_NAME1 27020:27017 & p3=$!
kubectl port-forward --namespace develop $MONGO_POD_NAME2 27021:27017 & p4=$!
kubectl port-forward --namespace develop $MONGO_POD_NAME3 27022:27017 & p5=$!
wait -n
[ "$?" -gt 1 ] || kill "$p3" "$p4" "$p5"
wait
Run Code Online (Sandbox Code Playgroud)
我的连接字符串如下所示:
mongodb://LOGIN:PW@localhost:27020,localhost:27021,localhost:27022/animedb?replicaSet=rs0
Run Code Online (Sandbox Code Playgroud)
但是,我仍然无法连接到我的 mongodb 复制集,它说:
connection error: { MongoNetworkError: failed to connect to server
[anime-data-develop-mongodb-replicaset-0.anime-data-develop-mongodb-replicaset.develop.svc.cluster.local:27017]
on first connect [MongoNetworkError: getaddrinfo ENOTFOUND
anime-data-develop-mongodb-replicaset-0.anime-data-develop-mongodb-replicaset.develop.svc.cluster.local
anime-data-develop-mongodb-replicaset-0.anime-data-develop-mongodb-replicaset.develop.svc.cluster.local:27017]
Run Code Online (Sandbox Code Playgroud)
但如果我使用直接连接,我仍然可以连接到每个节点!
这里可能有什么问题?如何连接mongodb进行开发?
端口转发将使您计算机上的本地端口将流量重定向(转发)到某个 pod。在您的例子中,您已要求 Kubernetes 将 127.0.0.1:27020 上的流量转发到 pod 的 27017 端口。
发生此问题的原因是副本集配置使用内部集群 IP 指向其他节点,因此您将[ReplicaSetMonitor-TaskExecutor] changing hosts to rs0/<ClusterIP-1>:27017,<ClusterIP-2>:27017,<ClusterIP-3>:27017 from rs/localhost:27020,localhost:27021,localhost:27022在 mongo 客户端会话上看到类似的内容,当然,您的计算机无法访问集群的 IP。
出于开发目的,您必须仅连接到主 Mongo 节点(如 中所示mongodb://localhost:27020/animedb),这会将您的数据复制到辅助节点中。这对于开发/调试来说足够安全,但不适合生产!
如果您需要将其设置为永久/生产访问,您应该更新您的replicaSet设置,以便它们使用公共IP或主机名找到彼此,请参阅https://docs.mongodb.com/manual/tutorial/change-hostnames-in -a-副本集/ .
| 归档时间: |
|
| 查看次数: |
3770 次 |
| 最近记录: |