需修改coredns corefile配置,将forward . /etc/resolv.conf替换为forward . 1.1.1.1 8.8.8.8等明确上游dns,删除原行后保存,coredns会在10秒内热重载生效。

在Kubernetes集群中让CoreDNS将非集群域名的解析请求转发到指定的公共DNS服务器(如1.1.1.1或8.8.8.8),而非继承节点的/etc/resolv.conf,需直接修改CoreDNS的Corefile配置,避开默认的forward . /etc/resolv.conf行为。
确认当前CoreDNS ConfigMap内容
执行kubectl get cm -n kube-system coredns -o yaml,检查data.Corefile中是否已存在forward指令。若存在形如forward . /etc/resolv.conf的行,说明当前走的是节点DNS,必须替换。
如果ConfigMap不存在或为空,说明CoreDNS可能未通过ConfigMap管理配置——此时需先确保其部署方式支持热更新,即Deployment中挂载了ConfigMap作为/etc/coredns/卷,且args含-conf /etc/coredns/Corefile。
修改Corefile启用自定义upstream
编辑ConfigMap:kubectl edit cm -n kube-system coredns。
定位到forward .所在区块,将其替换为明确的目标DNS地址,例如:
forward . 1.1.1.1 8.8.8.8 9.9.9.9
注意:多个上游DNS之间用空格分隔,不支持逗号;顺序决定优先级,CoreDNS按序尝试,超时后轮到下一个。若只写一个IP,失败后无备选,解析将直接返回NXDOMAIN或超时。
【必须删除原forward . /etc/resolv.conf这一整行,否则新配置不生效】
验证配置生效并触发重载
保存退出后,CoreDNS容器会在10秒内自动检测Corefile变更并热重载——前提是ConfigMap中启用了reload插件(默认Corefile已包含)。
检查重载日志:kubectl logs -n kube-system deploy/coredns --since=30s | grep "reloading",看到reloaded from disk即表示成功。
若未出现该日志,说明reload插件未启用或Corefile语法错误。此时可手动删Pod触发重建:kubectl delete pod -n kube-system -l k8s-app=kube-dns。











