我已经使用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 - 不确定其映射到副本集节点名称的方式/位置。
您收到错误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。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。