这个问题类似于Kubernetes PetSet DNS not working,但是(我相信)是不同的。我的问题是:我想使用Kubernetes PetSet运行分片数据库(RethinkDB)。我需要将数据库中另一个分片的dns地址传递给每个分片,以便这些分片可以作为群集彼此连接。我还需要其他服务来连接到数据库并查询数据库,我想通过k8s NodePort服务来实现这一点(我认为,如果其他Pod通过服务连接到RethinkDB,则每个客户端Pod都将连接到随机Rethink Pod,提供一种基本的负载平衡。使用NodePort服务还意味着我可以从集群外部连接到Rethink管理控制台)。

我相信Kubernetes应该为每个RethinkDB分片分配一个一致的域名,并且我应该能够传递每个分片,例如用于集群的rethink-0.rethink-service.default.svc.cluster.local。但是,我尝试了两种配置PetSet的方法,但似乎都没有分配域名rethink-0.rethink-service.default.svc.local:

1)我创建了一个与PetSet对话的非无头服务,仅此而已。在这种配置下,我创建的唯一重新思考的宠物似乎正在获得一个随机名称:

$ kc get all
NAME       DESIRED   CURRENT   READY     AGE
rc/etcd    1         1         1         46s
rc/pachd   1         1         1         46s
NAME                  CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE
svc/etcd              10.0.0.206   <none>        2379/TCP,2380/TCP              46s
svc/kubernetes        10.0.0.1     <none>        443/TCP                        3d
svc/pachd             10.0.0.176   <nodes>       650/TCP,651/TCP                46s
svc/rethink-service   10.0.0.3     <nodes>       8080/TCP,28015/TCP,29015/TCP   46s
NAME             READY     STATUS    RESTARTS   AGE
po/etcd-x02ou    1/1       Running   0          46s
po/pachd-cqdus   1/1       Running   1          46s
po/rethink-0     1/1       Running   0          46s
  info: 2 completed object(s) was(were) not shown in pods list. Pass --show-all to see all objects.


NAME                                 STATUS    VOLUME             CAPACITY   ACCESSMODES   AGE
pvc/rethink-volume-claim-rethink-0   Bound     rethink-volume-0   1Gi        RWO           46s

$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
...
# nslookup -type=srv rethink-service.default.svc.cluster.local
Server:     10.0.0.10
Address:    10.0.0.10#53

rethink-service.default.svc.cluster.local   service = 10 100 0 3231383531646337.rethink-service.default.svc.cluster.local.

在这里,我的RethinkDB宠物似乎得了名字3231383531646337.rethink-service.default.svc.cluster.local
2)我创建了一个非无头服务(供外部服务与Rethink交流)和无头服务(供域名分配),但我似乎仍然得到了随机的DNS名称:
$ kc get all
NAME       DESIRED   CURRENT   READY     AGE
rc/etcd    1         1         1         6m
rc/pachd   1         1         1         6m
NAME                   CLUSTER-IP   EXTERNAL-IP   PORT(S)                        AGE
svc/etcd               10.0.0.59    <none>        2379/TCP,2380/TCP              6m
svc/kubernetes         10.0.0.1     <none>        443/TCP                        3d
svc/pachd              10.0.0.222   <nodes>       650/TCP,651/TCP                6m
svc/rethink-headless   None         <none>                                       6m
svc/rethink-service    10.0.0.30    <nodes>       8080/TCP,28015/TCP,29015/TCP   6m
NAME             READY     STATUS    RESTARTS   AGE
po/etcd-anc7v    1/1       Running   0          6m
po/pachd-i1anr   1/1       Running   1          6m
po/rethink-0     1/1       Running   0          6m
  info: 2 completed object(s) was(were) not shown in pods list. Pass --show-all to see all objects.


NAME                                 STATUS    VOLUME             CAPACITY   ACCESSMODES   AGE
pvc/rethink-volume-claim-rethink-0   Bound     rethink-volume-0   1Gi        RWO           6m

$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
...
# nslookup -type=srv rethink-service.default.svc.cluster.local
Server:     10.0.0.10
Address:    10.0.0.10#53

rethink-service.default.svc.cluster.local   service = 10 100 0 6638393531396237.rethink-service.default.svc.cluster.local.

在这里,我的RethinkDB宠物似乎得到了名字6638393531396237.rethink-service.default.svc.cluster.local,但它似乎仍然是任意的。

我的基本问题是:除了非无头NodePort服务之外,我是否还需要将节点连接到无头服务以获得稳定的DNS地址?同一套节点是否可以同时拥有两项服务?为什么这些设置都不给rethink-0域名rethink-0.rethink-<something>.default.svc.cluster.local

非常感谢你的帮助!!!

编辑:两次更新:

1)这是我使用的完整的k8s list 。很长,但是如果有帮助,我很乐意提取某些部分:http://pastebin.com/nm73Xtxi

2)我似乎无法执行与无头RethinkDB服务rethink-headless相关的任何DNS解析:
# nslookup rethink-headless.default
Server:     10.0.0.10
Address:    10.0.0.10#53

** server can't find rethink-headless.default: NXDOMAIN

# nslookup rethink-headless
Server:     10.0.0.10
Address:    10.0.0.10#53

** server can't find rethink-headless: SERVFAIL

最佳答案

您也可以将无头服务用于节点之间的数据库访问,而将常规服务用于外部访问。

2个服务指向相同节点以用于不同目的没有问题

09-06 01:03