我有一个用无头服务公开的MongoDB实例集群
k get svc
NAME CLUSTER-IP EXTERNAL-IP PORT(S) AGE
hello 10.0.0.90 <nodes> 8080:32361/TCP 7h
kubernetes 10.0.0.1 <none> 443/TCP 7h
mongo None <none> 27017/TCP 7h
所以有多个MongoDB端点:
k get ep
NAME ENDPOINTS AGE
hello 172.17.0.4:8080 7h
kubernetes 10.0.2.15:8443 7h
mongo 172.17.0.5:27017,172.17.0.6:27017 7h
我的其他服务(称为hello
)如何找到1个IP或1个DNS条目进行通信?如何才能有效地发现IP列表呢?
对于Mongo,是否可以自动查找主副本(或可写/可读副本)?
答案 0 :(得分:0)
应通过DNS名称访问服务。在您的情况下,如果您指定了命名空间,则为“mongo”或“mongo.my-namespace”。 您还应该检查部署文件中是否设置了“spec.clusterIP = None”。如果是这种情况,您告诉kubernetes您不想使用标准的服务发现方式,并且会提供您自己的服务。
有多种标准方法可以公开服务:
您可以使用“spec.clusterIP”字段为服务添加固定的内部群集IP。
为您的服务添加“NodePort”类型。这允许您定义每个节点上可用的端口。因此,当您在服务前面有一个负载均衡器时,您可以转发到每个节点上的此端口。
可以在k8s docs
找到更多信息