如何在openshift集群中解析* .svc地址

时间:2018-02-22 08:03:24

标签: openshift

当我在openshift中创建一个应用程序时,它会在* .svc地址中公开一个服务。

oc project
Using project "coco" on server "https://master.lab.example.com:8443"
oc get svc -o wide
NAME      CLUSTER-IP      EXTERNAL-IP   PORT(S)    AGE       SELECTOR
ruby-ex   172.30.18.144   <none>        8080/TCP   9h        app=ruby-ex,deploymentconfig=ruby-ex

从群集的节点我可以卷曲

 curl -vvv ruby-ex.coco.svc:8080
 * About to connect() to ruby-ex.coco.svc port 8080 (#0)
 *   Trying 172.30.18.144...
 * Connected to ruby-ex.coco.svc (172.30.18.144) port 8080 (#0)
 ....

因此它按预期工作,但我找不到谁在解决这个域名。仍来自同一节点

 dig +short ruby-ex.coco.svc

什么都不输出。因此我想知道curl如何找到合适的ip?

编辑1 :根据格雷厄姆的回答我的理解进展

文件/etc/resolv.conf包含以下内容:

search  lab.example.com cluster.local
nameserver 10.0.2.15

我可以看到10.0.2.15属于节点,dnsmask侦听端口53

netstat -tulnp | grep 10.0.2.15
tcp        0      0 10.0.2.15:53            0.0.0.0:*               LISTEN      1274/dnsmasq
udp        0      0 10.0.2.15:53            0.0.0.0:*                           1274/dnsmasq

转到dnsmask的配置

cat /etc/dnsmasq.d/node-dnsmasq.conf
server=/in-addr.arpa/127.0.0.1
server=/cluster.local/127.0.0.1

并且

netstat -tulnp | grep 127.0.0.1:53
tcp        0      0 127.0.0.1:53            0.0.0.0:*               LISTEN      2128/openshift
udp        0      0 127.0.0.1:53            0.0.0.0:*                           2128/openshift

显示进程openshift正在侦听127.0.0.1:53。

当我使用此服务器挖掘连接超时

dig +short  @127.0.0.1 ruby-ex.coco.svc
;; connection timed out; no servers could be reached

但对于群集中的已知域,它可以正确回答

dig +short  @127.0.0.1 node1.lab.example.com
172.25.250.11

我无法在cluster.local和* .svc地址之间建立链接,我也无法解释为什么curl会解析地址但不能解析。

修改2

由于我对/etc/resolv.conf的理解不好,我终于找到了答案。 使用resolv.conf中的搜索指令curl尝试ruby-ex.coco.svc然后使用ruby-ex.coco.svc.cluster.local等尝试每个域。确实

dig +short @127.0.0.1 ruby-ex.coco.svc.cluster.local
172.30.18.144

按预期工作,感谢您的帮助。

1 个答案:

答案 0 :(得分:3)

OpenShift内部有一个处理请求的DNS。看看/etc/resolv.conf它会有类似的东西:

nameserver 172.31.39.82
search myproject.svc.cluster.local svc.cluster.local cluster.local ap-southeast-2.compute.internal
options ndots:5

与服务名称对应的主机名在创建时会添加到内部DNS中。