OpenShift节点默认提供dns服务吗?

OpenShift节点默认提供dns服务吗?,dns,kubernetes,openshift,Dns,Kubernetes,Openshift,我有一个OpenShift、群集,在访问日志时,我会定期获得: worker1-sass-on-prem-origin-3-10 on 10.1.176.130:53: no such host" kube doing a connection to 53 on a node. 我还倾向于在10.1.176.136:53上看到tcp:lookup postgres.myapp.svc.cluster.local:pods中不时出现这样的主机错误,这再次让我想到,在访问内部服务端点、pods、客

我有一个OpenShift、群集,在访问日志时,我会定期获得:

worker1-sass-on-prem-origin-3-10 on 10.1.176.130:53: no such host" kube doing a connection to 53 on a node.
我还倾向于在10.1.176.136:53上看到
tcp:lookup postgres.myapp.svc.cluster.local:pods中不时出现这样的主机
错误,这再次让我想到,在访问内部服务端点、pods、客户端时,其他与Kubernetes相关的服务实际上与DNS服务器进行通信,该DNS服务器假定在所述POD运行的给定节点上运行

更新 查看给定节点上的一个pod,我在resolv.conf中发现了以下内容(我必须使用ssh并运行
docker exec
才能获得此输出-因为oc exec由于此问题无法工作)

因此,在我的集群中,容器似乎有一个自引用的resolv.conf条目。此集群是使用openshift ansible创建的。我不确定这是否是超特定的,或者它是否实际上是openshift节点工作的一个基本方面,但我怀疑是后者,因为我没有从上游openshift ansible配方对我的ansible工作流进行任何重大定制。

是的,openshift中每个节点上的DNS都是正常的。 openshift ansible部署在每个节点上部署
dnsmasq
服务似乎是正常的

细节。 下面是一个例子,说明这是如何影响事情的。在任何情况下,如果本地节点的dnsmasq由于任何原因表现为片状,它将阻止在该节点上运行的容器正确解析集群中其他容器的地址

深入研究dnsmasq“冒烟的枪” 在检查单个节点后,我发现事实上,确实有一个进程绑定到端口53,它是dnsmasq。因此,


[enguser@worker0-sass-on-prem-origin-3-10~]$sudo netstat-tupln | grep 53
tcp 0 0 127.0.0.1:53 0.0.0.0:*收听675/openshift

dnsmasq正在本地运行:


[enguser@worker0-sass-on-prem-origin-3-10~]$ps-ax | grep dnsmasq
4968分/0秒+0:00格雷普——颜色=自动dnsmasq
6994 ?        Ss 0:22/usr/sbin/dnsmasq-k
[enguser@worker0-sass-on-prem-origin-3-10~]$sudo ps-ax | grep dnsmasq
4976分/0秒+0:00格雷普——颜色=自动dnsmasq
6994 ?        Ss 0:22/usr/sbin/dnsmasq-k

最后一条线索是resolv.conf本身甚至将本地IP地址添加为名称服务器。。。这显然是借用到容器中开始的

 nameserver updated by /etc/NetworkManager/dispatcher.d/99-origin-dns.sh
 Generated by NetworkManager
search cluster.local bds-ad.lc opssight.internal
 NOTE: the libc resolver may not support more than 3 nameservers.
 The nameservers listed below may not be recognized.
nameserver 10.1.176.129
解决方案(在我的具体案例中) 在我的例子中,发生这种情况是因为本地名称服务器使用了
ifcfg
(您可以在/etc/sysconfig/network scripts/中看到这些文件)

但是,我的内部配置的虚拟机无法解析PEERDNS记录提供给它们的IP

最终的解决办法是与我们的IT部门合作,确保kube集群的权威域能够访问数据中心中的所有IP地址

通用修复:53查找错误。。。 如果您在尝试使用kubectl或oc logs/exec时发现:53记录错误,则您的apiserver可能无法通过kubelets的IP地址与之连接

如果您在其他位置(例如,在pod内部)看到:53记录错误,那么这是因为您的pod使用自己的本地DNS无法解析内部群集IP地址。这可能仅仅是因为您有一个过时的控制器,正在寻找不再存在的服务,或者,您在kubernetes dns实现级别上存在漏洞

 nameserver updated by /etc/NetworkManager/dispatcher.d/99-origin-dns.sh
 Generated by NetworkManager
search cluster.local bds-ad.lc opssight.internal
 NOTE: the libc resolver may not support more than 3 nameservers.
 The nameservers listed below may not be recognized.
nameserver 10.1.176.129
[enguser@worker0-sass-on-prem-origin-3-10 network-scripts]$ cat ifcfg-ens192 
TYPE=Ethernet
BOOTPROTO=dhcp
DEFROUTE=yes
PEERDNS=yes
PEERROUTES=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_PEERDNS=yes
IPV6_PEERROUTES=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=ens192
UUID=50936212-cb5e-41ff-bec8-45b72b014c8c
DEVICE=ens192
ONBOOT=yes