【问题标题】:Can't connect to mongodb replicaset via kubectl port-forward无法通过 kubectl port-forward 连接到 mongodb 副本集
【发布时间】:2019-07-22 08:14:45
【问题描述】:

我正在尝试通过 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


我的连接字符串如下所示:

mongodb://LOGIN:PW@localhost:27020,localhost:27021,localhost:27022/animedb?replicaSet=rs0


但是,我仍然无法连接到我的 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]


但如果我使用直接连接,我仍然可以连接到每个节点!
这里可能有什么问题?如何连接 mongodb 进行开发?

【问题讨论】:

  • 不太了解连接到 mongodb,但您可以尝试从终端运行端口转发到单个 pod 以查看会发生什么。另外,如果那是您来自 mongo 的日志,那么它似乎可能还没有完全正确地设置和运行。

标签: mongodb kubernetes google-kubernetes-engine kubectl project-calico


【解决方案1】:

端口转发将在您的机器上创建一个本地端口重定向(转发)流量到某个 pod。在您的情况下,您已要求 Kubernetes 将 127.0.0.1:27020 上的流量转发到您的 pod 的 27017 端口。

出现问题是因为副本集配置使用您的内部集群 IP 指向其他节点,因此您会在 mongo 客户端会话中看到类似 [ReplicaSetMonitor-TaskExecutor] changing hosts to rs0/<ClusterIP-1>:27017,<ClusterIP-2>:27017,<ClusterIP-3>:27017 from rs/localhost:27020,localhost:27021,localhost:27022 的内容,并且您的机器当然无法访问您的集群 IP .

出于开发目的,您必须仅连接到您的主要 Mongo 节点(如 mongodb://localhost:27020/animedb),这会将您的数据复制到您的辅助节点中。这对于开发/调试来说足够安全,但不适合生产!

如果您需要将其设置为永久/生产访问,您应该更新您的副本集设置,以便它们使用公共 IP 或主机名找到彼此,请参阅https://docs.mongodb.com/manual/tutorial/change-hostnames-in-a-replica-set/

【讨论】:

  • false,端口转发只能通过对我有端口的服务来完成
猜你喜欢
  • 2013-05-25
  • 2021-11-21
  • 2020-12-11
  • 1970-01-01
  • 2021-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多