开发者社区> 问答> 正文

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

我已经使用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 - 不确定其映射到副本集节点名称的方式/位置。

展开
收起
k8s小能手 2019-01-11 11:26:18 7269 0
2 条回答
写回答
取消 提交回答
  • Zz

    楼主如何解决的?

    2019-10-28 18:32:26
    赞同 展开评论 打赏
  • 整合最优质的专家资源和技术资料,问答解疑

    您收到错误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。

    2019-07-17 23:25:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
ACK 云原生弹性方案—云原生时代的加速器 立即下载
ACK集群类型选择最佳实践 立即下载
企业运维之云原生和Kubernetes 实战 立即下载

相关镜像