与kubernetes中的Mongodb集群的外部连接-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

与kubernetes中的Mongodb集群的外部连接

k8s小能手 2019-01-11 11:26:18 3000

我已经使用mongo k8s sidecar在kubernetes上配置了一个3成员副本集mongo集群。我需要在外部公开mongodb服务,因此创建了一个LoadBalancer。

这就是服务的样子

LoadBalancer Ingress: xxx.yyy.elb.amazonaws.com
Port: 27017/TCP
TargetPort: 27017/TCP
NodePort: 30994/TCP
Endpoints: 100.14.1.3:27017,100.14.1.4:27017,100.14.2.5:27017
尝试使用mongodb shell 3.6连接工作正常 mongo --host xxx.yyy.elb.amazonaws.com

但在java客户端代码中,我看到以下异常。 java.net.UnknownHostException: mongo-1.mongo.dev.svc.cluster.local

我可以确认mongo pod正在运行。我能够从群集中的其他pod连接到mongo - 只是无法从外部访问它。

我在java客户端中几乎没有理解的东西,我在创建时指定了elb作为mongo主机MongoClient - 不确定其映射到副本集节点名称的方式/位置。

Kubernetes 网络协议 NoSQL Java Shell MongoDB 容器 Perl
分享到
取消 提交回答
全部回答(2)
  • Zz
    2019-10-28 18:32:26

    楼主如何解决的?

    0 0
  • k8s小能手
    2019-07-17 23:25:15

    您收到错误mongo-1.mongo.dev.svc.cluster.local,这是群集中的内部端点。换句话说,就是如何从群集中的其他pod获取Mongo实例。

    在Java客户端上,您需要使用xxx.yyy.elb.amazonaws.com:27017Mongo端点配置。

    像这样的东西:

    MongoClient mongoClient = new MongoClient( "xxx.yyy.elb.amazonaws.com" , 27017 );
    为了概述路径,您的Mongo实例通过端口上的LoadBalancer Kubernetes服务公开27017。

    然后流量进入负载均衡器并从那里转发到您的终端100.14.1.3:27017等。

    然后,从那里,他们进入每个节点上NodePort 30994上的节点。

    然后运行pod的节点回复答案。

    容器中的Mongo进程本身在端口上运行,27017因此当流量到达端口上的节点时30994,容器运行时将流量转发到容器中的应用程序27017。

    0 0
添加回答
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

推荐文章
相似问题