1

我有一个使用无头服务公开的 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 的情况下,是否可以自动找到主副本(或可写/可读副本)?

4

1 回答 1

0

服务应可通过其 DNS 名称访问。如果您分配了命名空间,则在您的情况下为“mongo”或“mongo.my-namespace”。您还应该检查您的部署文件中是否设置了“spec.clusterIP=None”。如果是这种情况,您是在告诉 kubernetes 您不想使用标准的服务发现方式,而是自己提供。

有多种公开服务的标准方法:

  1. 您可以使用“spec.clusterIP”字段为服务添加固定的内部集群 IP。

  2. 为您的服务添加“NodePort”类型。这允许您定义每个节点上可用的端口。所以当你在服务前面有一个负载均衡器时,你可以转发到每个节点上的这个端口。

更多信息可以在k8s 文档中找到

于 2017-04-02T07:01:54.060 回答