DNS解析是否适用于使用非无头服务的PetSet?

时间:2016-11-21 23:06:41

标签: networking dns kubernetes

这个问题类似于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清单。这很长,但如果有帮助,我很乐意提取某些部分:http://pastebin.com/nm73Xtxi

2)我无法做出与无头RethinkDB服务相关的任何DNS解析,rethink-headless

# 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 个答案:

答案 0 :(得分:1)

您还可以使用无头服务进行节点之间的数据库访问,并使用常规服务进行外部访问。

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

答案 1 :(得分:0)

好的,我有这个工作。完成这项工作的关键是:

  • 第二种方法(有两种服务,一种NodePort服务和一种无头服务)最终起作用。

  • 无头服务需要配置

Ports := [ <rethink DB's cluster port> ]

  • NodePort服务配置为

Ports := [ <rethink DB's query port>, <rethink DB's admin port> ]

  • 这可能很明显,但我犯了一个错误:RethinkDB petset需要配置ServiceName := "rethink-headless"

配置了所有这些后,我得到了:

$ kubectl run -i --tty --image ubuntu dns-test --restart=Never /bin/sh
# apt update && apt install -y dnsutils
# nslookup -type=srv rethink-headless.default.svc.cluster.local
Server:     10.0.0.10
Address:    10.0.0.10#53

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

所以我终于得到了rethink-0.rethink-headless.default.svc.cluster.local