CoreDNS 提示 [FATAL] plugin/loop: Loop (127.0.0.1:38759 -> :53) detected for zone

释放双眼,带上耳机,听听看~!
root@VM-16-2-ubuntu:~/coredns# kubectl logs -f -n kube-system  coredns-6d86b45487-x6b52
[INFO] plugin/ready: Still waiting on: "kubernetes"
.:53
[INFO] plugin/reload: Running configuration MD5 = b0741fcbd8bd79287446297caa87f7a1
CoreDNS-1.8.6
linux/amd64, go1.17.1, 13a9191
[FATAL] plugin/loop: Loop (127.0.0.1:38759 -> :53) detected for zone ".", see https://coredns.io/plugins/loop#troubleshooting. Query: "HINFO 5478322934330421445.382266938519424365."

原因:

当 CoreDNS 日志包含messageLoop ... detected ...时,这意味着loop检测插件在上游 DNS 服务器之一中检测到无限转发循环。这是一个致命错误,因为使用无限循环操作会消耗内存和 CPU,直到主机最终内存不足而死亡。

转发循环通常由以下原因引起:

  • 最常见的是,CoreDNS 将请求直接转发给自己。例如,通过环回地址,例如127.0.0.1,::1或127.0.0.53
  • 不太常见的是,CoreDNS 转发到上游服务器,然后将请求转发回 CoreDNS。

要解决此问题,请在您的Corefile中查找forward检测到循环的区域的任何 s。确保它们没有转发到本地地址或将请求转发回CoreDNS的另一个 DNS 服务器。如果forward正在使用文件(例如/etc/resolv.conf),请确保该文件不包含本地地址。

排查 Kubernetes 集群中的循环

当部署在 Kubernetes 中的 CoreDNS Pod 检测到循环时,CoreDNS Pod 将开始“CrashLoopBackOff”。这是因为每次 CoreDNS 检测到循环并退出时,Kubernetes 都会尝试重启 Pod。

systemd-resolvedKubernetes 集群中转发循环的一个常见原因是与主机节点(例如)上的本地 DNS 缓存的交互。例如,在某些配置中,systemd-resolved会将环回地址127.0.0.53作为名称服务器放入/etc/resolv.conf. 默认情况下, Kubernetes(通过kubelet)将使用 dnsPolicy 将此/etc/resolv.conf文件传递给所有defaultPod,使它们无法进行 DNS 查找(包括 CoreDNS Pod)。CoreDNS 使用它/etc/resolv.conf 作为上游列表来转发请求。由于它包含一个环回地址,CoreDNS 最终会将请求转发给它自己。

有很多方法可以解决这个问题,这里列出了一些:

  • 将以下内容添加到您的kubelet配置 yaml 中:(resolvConf: 或通过--resolv-conf1.10 中已弃用的命令行标志)。您的“真实” resolv.conf是包含您的上游服务器的实际 IP,并且没有本地/环回地址的那个。该标志告诉kubelet将替代传递resolv.conf给 Pod。对于使用 的系统systemd-resolved, /run/systemd/resolve/resolv.conf通常是“真实”的位置resolv.conf,尽管这可能因您的发行版而异。
  • 禁用主机节点上的本地 DNS 缓存,并恢复/etc/resolv.conf到原始状态。
  • 一个快速而肮脏的解决方法是编辑您的 Corefile,替换forward . /etc/resolv.conf为上游 DNS 的 IP 地址,例如forward . 8.8.8.8. 但这仅解决了 CoreDNS 的问题,kubelet 将继续将无效的转发resolv.conf到所有defaultdnsPolicy Pod,使它们无法解析 DNS。

解决方法

检查Node节点的DNS文件

将/etc/resolv.conf中的nameserver修改为114.114.114.114

给TA买糖
共{{data.count}}人
人已赞赏
报错锦集

Error: failed to run Kubelet: failed to create kubelet: get remote runtime typed version failed: rpc error: code = Unimplemented desc = unknown service runtime.v1alpha2.RuntimeService

2022-7-19 10:57:37

报错锦集

K8s CephFS: mount failed: mount failed: fork/exec /usr/bin/systemd-run: invalid argument

2022-7-20 19:47:09

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索