一个 openshift-origin 工作节点不会解析 cluster.local 记录,导致 Imagepullbackoff

问题描述

我们已经建立了一个具有 100 多个节点的 okd 3.11 集群。一切正常,但随后工作节点停止解析注册表服务内部 url。这会导致调度到该节点的新 Pod 失败,并出现 ImagePullBackoff 错误

Failed to pull image "docker-registry.default.svc:5000/app-name/app-name:latest": rpc error: code = UnkNown desc = Get https://docker-registry.default.svc:5000/v1/_ping: dial tcp: lookup docker-registry.default.svc on 10.*.*.71:53: server misbehaving

我们尝试在工作节点上运行 nslookup,结果如下

虽然这不起作用(但它在其他节点上起作用)

[root@worker22 ~]# nslookup docker-registry.default.svc.cluster.local
Server:         10.*.*.71
Address:        10.*.*.71#53

** server can't find docker-registry.default.svc.cluster.local: SERVFAIL

这很好用。

[root@worker22 ~]# nslookup docker-registry.default.svc.cluster.local 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   docker-registry.default.svc.cluster.local
Address: 172.*.*.212

server=/cluster.local/172.30.0.1 添加到 dnsmasq conf 文件 /etc/dnsmasq.d/origin-upstream-dns.conf 可以作为一种解决方法,但找不到导致此问题的原因。

我尝试将 -q 添加到 dnsmasq 服务的 ExecStart 中,结果表明 dnsmasq 不会查询127.0.0.1:53 本地运行的 openshift dns。

Dnsmasq config/resolv.conf 在节点上是有序的。

我试过重新启动 dnsmasq/NetworkManager/Docker,我试过重新生成 ovs/sdn pod,但仍然没有帮助。

解决方法

发现了一些文件证明 dnsmasq 可以这样做。

一些 RedHat 文章表明,长时间运行的 dnsmasq 服务可能会出现错误行为并停止解析名称。在 openshift 环境中也报告了类似的情况。

以下链接表明重新启动服务可以解决问题一段时间,然后问题可能会再次出现。如前所述,在我的情况下,服务重启并没有帮助,但 IT 中最古老的补救措施起作用了(重新启动节点解决了问题)。

参考:

https://access.redhat.com/solutions/3393141

https://bugzilla.redhat.com/show_bug.cgi?id=1560489