nginx-ingress 控制器抛出这个 DNS 解析错误。上下文:ngx.timer

nginx-ingress controller throws this DNS resolution error. context: ngx.timer

我们的 nginx-ingress 日志不断充满此错误消息:

 dns.lua:61: resolve(): server returned error code: 3: name error, context: ngx.timer

我们使用默认使用 CoreDNS 的 Kubeadm 创建了 Kubernetes 集群。

/data # kubectl get pods -n kube-system
NAME                                                                    READY   STATUS             RESTARTS   AGE
calico-node-8jr7t                                                       2/2     Running            2          4d22h
calico-node-cl5f6                                                       2/2     Running            4          4d22h
calico-node-rzt28                                                       2/2     Running            2          4d22h
coredns-fb8b8dccf-n68x9                                                 1/1     Running            3          3d23h
coredns-fb8b8dccf-x9wr4                                                 1/1     Running            1          3d23h

它还有一个指向 core-dns 的 kube-dns 服务 pods。

kube-system   kube-dns                                           ClusterIP      10.96.0.10       <none>                                                     53/UDP,53/TCP                 7m29s

我在日志中找不到任何其他可以帮助我解决此问题的内容。

更新:

我们按照此处的建议使用了 externalName 的服务 > https://github.com/coredns/coredns/issues/2324#issuecomment-484005202

正如此评论中所建议的,我们有一个类型为 "ExternalName" 的服务。 https://github.com/coredns/coredns/issues/2324#issuecomment-484005202

一旦我们删除了这个服务,我们就不再收到这个错误。使用 IP 地址而不是 DNS 名称应该也可以,但我从未尝试过。

根据 Venkatesh 的建议,我还可以通过将 ExternalName 从 IP 地址更新为主机名来解决问题。在我的情况下,一些服务包含 IP 地址而不是主机名,更新到主机名解决了我的问题。

注意: 当任何 ExternalName 是一个 IP 时,它会尝试以该 IP 作为 A 记录查询名称服务器.因此,您需要做的就是将 IP 转换为主机名来解决此问题。