这个问题类似于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个服务指向相同节点以用于不同目的没有问题