<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>ConfigMap on Zero Day Notes</title>
        <link>https://blog.5772447.xyz/tags/configmap/</link>
        <description>Recent content in ConfigMap on Zero Day Notes</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>zh</language>
        <lastBuildDate>Thu, 10 Sep 2026 07:00:00 +0800</lastBuildDate><atom:link href="https://blog.5772447.xyz/tags/configmap/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>记一次 Kubernetes 集群因 CoreDNS 配置漂移导致服务发现间歇性失败的排查实录</title>
            <link>https://blog.5772447.xyz/posts/425c7ac4/</link>
            <pubDate>Thu, 10 Sep 2026 07:00:00 +0800</pubDate>
            <guid>https://blog.5772447.xyz/posts/425c7ac4/</guid>
            <description>&lt;h2 id=&#34;问题背景&#34;&gt;&lt;a href=&#34;#%e9%97%ae%e9%a2%98%e8%83%8c%e6%99%af&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;问题背景&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;生产 K8s 集群（v1.28）自 8 月底节点滚动升级后，部分服务间调用开始出现间歇性超时与 5xx。监控显示 API 层延时正常，Pod 间网络连通性也无异常，但业务日志中「name resolution failed」「no such host」偶发出现。初步判断疑似 DNS 解析问题，但 CoreDNS Pod 本身健康检查与日志均无明显异常。&lt;/p&gt;&#xA;&lt;p&gt;本次故障发生在业务高峰（09:30-11:30），平均每 15 分钟出现一次解析失败，持续约 2-3 分钟后自动恢复，属于典型的「间歇性、服务发现类」故障，对长连接与重试机制敏感的服务影响尤为明显。&lt;/p&gt;&#xA;&lt;h2 id=&#34;故障现象&#34;&gt;&lt;a href=&#34;#%e6%95%85%e9%9a%9c%e7%8e%b0%e8%b1%a1&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;故障现象&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;间歇性解析失败&lt;/strong&gt;：业务 Pod 日志中出现 &lt;code&gt;lookup xxx.svc.cluster.local: no such host&lt;/code&gt; 或 &lt;code&gt;i/o timeout&lt;/code&gt;，频率约每 15 分钟一次，每次持续 2-3 分钟。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;CoreDNS 日志无明显异常&lt;/strong&gt;：&lt;code&gt;coredns&lt;/code&gt; Pod 的 &lt;code&gt;INFO&lt;/code&gt; 级别日志仅偶见 &lt;code&gt;plugin/errors&lt;/code&gt; 记录，&lt;code&gt;ERROR&lt;/code&gt; 级别日志为空。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;dig 测试结果不稳定&lt;/strong&gt;：在故障窗口内，从业务 Pod 执行 &lt;code&gt;dig +short xxx.svc.cluster.local @10.96.0.10&lt;/code&gt; 有时返回空，有时返回正确 IP，成功率约 60-70%。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;缓存污染迹象&lt;/strong&gt;：部分节点上 &lt;code&gt;nslookup&lt;/code&gt; 结果与实际 Service Endpoint 不一致，怀疑存在缓存不一致或配置漂移。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;无节点级网络故障&lt;/strong&gt;：&lt;code&gt;ping&lt;/code&gt;、&lt;code&gt;traceroute&lt;/code&gt;、&lt;code&gt;tcpdump&lt;/code&gt; 显示跨节点连通性正常，&lt;code&gt;conntrack&lt;/code&gt; 表项也无异常。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;排查过程&#34;&gt;&lt;a href=&#34;#%e6%8e%92%e6%9f%a5%e8%bf%87%e7%a8%8b&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;排查过程&#xD;&#xA;&lt;/h2&gt;&lt;h3 id=&#34;步骤-1确认故障范围与时间窗口&#34;&gt;&lt;a href=&#34;#%e6%ad%a5%e9%aa%a4-1%e7%a1%ae%e8%ae%a4%e6%95%85%e9%9a%9c%e8%8c%83%e5%9b%b4%e4%b8%8e%e6%97%b6%e9%97%b4%e7%aa%97%e5%8f%a3&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;步骤 1：确认故障范围与时间窗口&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;首先通过 Prometheus 查询 &lt;code&gt;coredns_dns_request_duration_seconds&lt;/code&gt; 与 &lt;code&gt;coredns_dns_responses_total&lt;/code&gt; 指标，发现故障窗口内 &lt;code&gt;SERVFAIL&lt;/code&gt; 与 &lt;code&gt;NXDOMAIN&lt;/code&gt; 响应比例显著上升（从常态 &amp;lt;0.1% 升至 3-5%），确认是 DNS 层问题而非业务层重试策略。&lt;/p&gt;&#xA;&lt;p&gt;同时检查了节点级 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;，发现所有节点均指向 &lt;code&gt;10.96.0.10&lt;/code&gt;（CoreDNS ClusterIP），无配置漂移。&lt;/p&gt;&#xA;&lt;h3 id=&#34;步骤-2检查-coredns-配置与版本&#34;&gt;&lt;a href=&#34;#%e6%ad%a5%e9%aa%a4-2%e6%a3%80%e6%9f%a5-coredns-%e9%85%8d%e7%bd%ae%e4%b8%8e%e7%89%88%e6%9c%ac&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;步骤 2：检查 CoreDNS 配置与版本&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;执行 &lt;code&gt;kubectl -n kube-system get cm coredns -o yaml&lt;/code&gt; 发现配置与预期一致：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 5&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 6&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 7&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 8&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt; 9&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;10&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;11&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;12&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;13&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;14&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;15&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;16&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;17&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;18&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;19&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;20&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;.:53 {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;errors&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;health {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;lameduck 5s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;ready&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;kubernetes cluster.local in-addr.arpa ip6.arpa {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;pods insecure&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;fallthrough in-addr.arpa ip6.arpa&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;ttl 30&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;prometheus :9153&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;forward . /etc/resolv.conf {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#ae81ff&#34;&gt;max_concurrent 1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;cache 30&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;loop&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;reload&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;loadbalance&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;但进一步检查发现，&lt;code&gt;forward&lt;/code&gt; 插件指向 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;，而宿主机 &lt;code&gt;/etc/resolv.conf&lt;/code&gt; 内容为：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-fallback&#34; data-lang=&#34;fallback&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;nameserver 172.16.1.1&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;search company.local&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;options ndots:5&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;p&gt;这意味着 CoreDNS 在无法解析 &lt;code&gt;cluster.local&lt;/code&gt; 域时，会将请求转发到公司内网 DNS（172.16.1.1），而该 DNS 服务器对 &lt;code&gt;cluster.local&lt;/code&gt; 无感知，会返回 &lt;code&gt;NXDOMAIN&lt;/code&gt; 或超时。&lt;/p&gt;&#xA;&lt;h3 id=&#34;步骤-3定位配置漂移根源&#34;&gt;&lt;a href=&#34;#%e6%ad%a5%e9%aa%a4-3%e5%ae%9a%e4%bd%8d%e9%85%8d%e7%bd%ae%e6%bc%82%e7%a7%bb%e6%a0%b9%e6%ba%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;步骤 3：定位配置漂移根源&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;进一步检查发现，CoreDNS Deployment 的 &lt;code&gt;spec.template.spec.dnsPolicy&lt;/code&gt; 为 &lt;code&gt;Default&lt;/code&gt;，而非推荐的 &lt;code&gt;ClusterFirst&lt;/code&gt;。这导致 CoreDNS Pod 自身继承宿主机的 DNS 配置，而非使用 Kubernetes 内置 DNS。&lt;/p&gt;&#xA;&lt;p&gt;同时发现，近期节点升级时，某批次节点 &lt;code&gt;/etc/resolv.conf&lt;/code&gt; 被云平台初始化脚本覆盖，&lt;code&gt;search&lt;/code&gt; 与 &lt;code&gt;options&lt;/code&gt; 参数与集群不一致，导致部分 CoreDNS Pod 在启动时读取到「污染」的上游 DNS 配置。&lt;/p&gt;&#xA;&lt;h3 id=&#34;步骤-4验证缓存与-ttl-不一致&#34;&gt;&lt;a href=&#34;#%e6%ad%a5%e9%aa%a4-4%e9%aa%8c%e8%af%81%e7%bc%93%e5%ad%98%e4%b8%8e-ttl-%e4%b8%8d%e4%b8%80%e8%87%b4&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;步骤 4：验证缓存与 TTL 不一致&#xD;&#xA;&lt;/h3&gt;&lt;p&gt;通过 &lt;code&gt;kubectl exec -it coredns-xxxx -- /bin/sh&lt;/code&gt; 进入 CoreDNS Pod，执行 &lt;code&gt;dig +short xxx.svc.cluster.local @127.0.0.1&lt;/code&gt; 与从业务 Pod 执行的 &lt;code&gt;dig&lt;/code&gt; 结果对比，发现：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;CoreDNS 缓存 TTL 为 30 秒（配置中 &lt;code&gt;cache 30&lt;/code&gt;），但上游公司 DNS 返回的 &lt;code&gt;NXDOMAIN&lt;/code&gt; 被缓存，导致后续请求在缓存过期前持续返回错误。&lt;/li&gt;&#xA;&lt;li&gt;部分节点上 &lt;code&gt;kubelet&lt;/code&gt; 的 &lt;code&gt;--cluster-dns&lt;/code&gt; 与 &lt;code&gt;--cluster-domain&lt;/code&gt; 参数与实际 CoreDNS Service 不一致，存在历史遗留配置。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;解决方案&#34;&gt;&lt;a href=&#34;#%e8%a7%a3%e5%86%b3%e6%96%b9%e6%a1%88&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;解决方案&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;修复 CoreDNS Deployment 配置&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;将 &lt;code&gt;dnsPolicy&lt;/code&gt; 改为 &lt;code&gt;ClusterFirst&lt;/code&gt;，确保 CoreDNS 自身使用 Kubernetes DNS 解析。&lt;/p&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;在 &lt;code&gt;forward&lt;/code&gt; 插件中明确指定上游 DNS，并添加 &lt;code&gt;policy sequential&lt;/code&gt; 与 &lt;code&gt;health_check&lt;/code&gt;：&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;div style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&#xA;&lt;table style=&#34;border-spacing:0;padding:0;margin:0;border:0;&#34;&gt;&lt;tr&gt;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;1&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;2&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;3&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;4&#xA;&lt;/span&gt;&lt;span style=&#34;white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f&#34;&gt;5&#xA;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&#xA;&lt;td style=&#34;vertical-align:top;padding:0;margin:0;border:0;;width:100%&#34;&gt;&#xA;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;forward . 172.16.1.1 172.16.1.2 {&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;max_concurrent 1000&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;policy sequential&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#ae81ff&#34;&gt;health_check 5s&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&#xA;&lt;/div&gt;&#xA;&lt;/div&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;清理与统一节点 DNS 配置&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;通过 DaemonSet 在所有节点上统一 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;（使用 &lt;code&gt;search cluster.local&lt;/code&gt; + &lt;code&gt;options ndots:2&lt;/code&gt;），并通过 &lt;code&gt;systemd-resolved&lt;/code&gt; 或 &lt;code&gt;NetworkManager&lt;/code&gt; 锁定配置，防止云平台初始化脚本覆盖。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;调整 CoreDNS 缓存策略&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;将 &lt;code&gt;cache 30&lt;/code&gt; 改为 &lt;code&gt;cache 15&lt;/code&gt;，降低 NXDOMAIN 污染窗口。&lt;/li&gt;&#xA;&lt;li&gt;启用 &lt;code&gt;cache prefetch&lt;/code&gt; 机制，提前预热热点域名缓存。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;增加健康检查与告警&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;在 Prometheus 中增加 &lt;code&gt;coredns_dns_responses_total{rcode=&amp;quot;NXDOMAIN&amp;quot;}&lt;/code&gt; 与 &lt;code&gt;SERVFAIL&lt;/code&gt; 的告警规则，阈值设为 &amp;gt;1% 触发。&lt;/li&gt;&#xA;&lt;li&gt;部署 &lt;code&gt;dnsutils&lt;/code&gt; Pod 作为「金丝雀」，每分钟执行一次 &lt;code&gt;dig&lt;/code&gt; 测试并上报结果。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;&#xA;&lt;p&gt;&lt;strong&gt;回滚与验证&lt;/strong&gt;：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;先在 3 个节点的小范围灰度集群上验证修复效果，确认解析成功率恢复至 99.9% 以上后，全量滚动更新 CoreDNS Deployment。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;根因分析&#34;&gt;&lt;a href=&#34;#%e6%a0%b9%e5%9b%a0%e5%88%86%e6%9e%90&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;根因分析&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;根本原因在于 &lt;strong&gt;CoreDNS &lt;code&gt;dnsPolicy&lt;/code&gt; 配置为 &lt;code&gt;Default&lt;/code&gt; 导致继承宿主机 DNS 配置&lt;/strong&gt;，叠加节点升级时 &lt;code&gt;/etc/resolv.conf&lt;/code&gt; 被云平台脚本覆盖，引入了公司内网 DNS（对 &lt;code&gt;cluster.local&lt;/code&gt; 无感知）作为上游。CoreDNS 在无法解析 &lt;code&gt;cluster.local&lt;/code&gt; 域时转发至该上游，收到 &lt;code&gt;NXDOMAIN&lt;/code&gt; 后缓存 30 秒，导致后续请求在缓存窗口内持续失败。&lt;/p&gt;&#xA;&lt;p&gt;次要原因包括：&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;forward&lt;/code&gt; 插件缺少 &lt;code&gt;health_check&lt;/code&gt; 与 &lt;code&gt;policy&lt;/code&gt; 配置，无法快速剔除故障上游。&lt;/li&gt;&#xA;&lt;li&gt;节点 DNS 配置缺乏统一管理与锁定机制，存在配置漂移风险。&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;预防措施&#34;&gt;&lt;a href=&#34;#%e9%a2%84%e9%98%b2%e6%8e%aa%e6%96%bd&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;预防措施&#xD;&#xA;&lt;/h2&gt;&lt;ol&gt;&#xA;&lt;li&gt;&lt;strong&gt;配置即代码&lt;/strong&gt;：将 CoreDNS 配置纳入 GitOps 仓库，通过 CI 校验 &lt;code&gt;dnsPolicy&lt;/code&gt; 必须为 &lt;code&gt;ClusterFirst&lt;/code&gt;，&lt;code&gt;forward&lt;/code&gt; 必须显式指定上游并启用健康检查。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;节点 DNS 基线化&lt;/strong&gt;：使用 DaemonSet + &lt;code&gt;systemd-resolved&lt;/code&gt; 统一管理所有节点 &lt;code&gt;/etc/resolv.conf&lt;/code&gt;，并通过 &lt;code&gt;immutable&lt;/code&gt; 属性或 &lt;code&gt;chattr +i&lt;/code&gt; 锁定关键配置。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;监控全链路&lt;/strong&gt;：在 &lt;code&gt;kube-dns&lt;/code&gt;、&lt;code&gt;coredns&lt;/code&gt;、&lt;code&gt;node-dns&lt;/code&gt; 各层增加 &lt;code&gt;NXDOMAIN&lt;/code&gt;、&lt;code&gt;SERVFAIL&lt;/code&gt;、&lt;code&gt;timeout&lt;/code&gt; 指标告警，并部署「金丝雀」测试 Pod 实时验证解析可用性。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;变更门禁&lt;/strong&gt;：节点系统升级、云平台初始化脚本变更前，必须执行 DNS 解析回归测试（覆盖 &lt;code&gt;cluster.local&lt;/code&gt; 与公司内网域名），并纳入变更结单证据包。&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;定期演练&lt;/strong&gt;：每季度执行一次「DNS 配置漂移」应急演练，模拟上游 DNS 故障与缓存污染场景，验证回滚与修复流程。&lt;/li&gt;&#xA;&lt;/ol&gt;&#xA;&lt;h2 id=&#34;总结&#34;&gt;&lt;a href=&#34;#%e6%80%bb%e7%bb%93&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;总结&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;本次故障是典型的「配置漂移 + 缓存污染」复合场景：CoreDNS 因 &lt;code&gt;dnsPolicy&lt;/code&gt; 配置不当继承了宿主机 DNS，节点升级时 &lt;code&gt;/etc/resolv.conf&lt;/code&gt; 被覆盖引入公司内网 DNS，导致 &lt;code&gt;cluster.local&lt;/code&gt; 解析间歇性失败。排查过程通过指标分析、配置比对、缓存验证三步定位根因，修复方案聚焦配置收口、缓存策略优化与监控告警三层面。&lt;/p&gt;&#xA;&lt;p&gt;DNS 是 K8s 集群的「神经系统」，任何配置漂移都可能引发连锁反应。未来需将 DNS 配置纳入基线管理与变更门禁，避免「看似小问题、实则大故障」的复现。&lt;/p&gt;&#xA;&lt;hr&gt;&#xA;&lt;h2 id=&#34;延伸阅读&#34;&gt;&lt;a href=&#34;#%e5%bb%b6%e4%bc%b8%e9%98%85%e8%af%bb&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;延伸阅读&#xD;&#xA;&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;DNS 解析链路&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/38f14096/&#34; &gt;公网 DNS 解析超时，CDN 回源为何大面积失败？&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/fb53e550/&#34; &gt;一次内网 DNS 转发链路异常导致核心业务系统间歇解析超时与偶发 504 的排查记录&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/66557bdd/&#34; &gt;FortiGate 策略配错，内网 DNS 为何解析失败？&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a class=&#34;link&#34; href=&#34;https://blog.5772447.xyz/posts/5ce994e9/&#34; &gt;记一次内网 DNS 递归超时导致的网页间歇卡顿&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;</description>
        </item></channel>
</rss>
