当我在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
按预期工作,感谢您的帮助。
答案 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中。