CoreDNS pod CrashLoopBackOff 显示 "plugin/forward: no healthy upstream"

云宇小哥_2322

云宇小哥_2322

2026-01-18

1017人浏览

原创

CoreDNS因无法连接上游DNS服务器导致“no healthy upstream”错误,常见原因包括节点/etc/resolv.conf配置不可达、ConfigMap配置错误、网络策略拦截、本地DNS服务干扰或资源不足。

coredns pod crashloopbackoff 显示 \

这是 CoreDNS 无法连接到上游 DNS 服务器(比如 kube-dns 的默认上游,通常是宿主机的 /etc/resolv.conf 中配置的 nameserver)导致的典型错误。Pod 启动后 forward 插件找不到可用的上游,健康检查失败,反复重启。

检查 CoreDNS 配置中的 upstream 是否可达

CoreDNS 默认使用 forward . /etc/resolv.conf(或类似),实际会读取该文件内容作为上游。但容器内挂载的 /etc/resolv.conf 往往继承自节点——如果节点本身 DNS 不通(比如防火墙拦截、上游 nameserver 不响应、或配置了不可达 IP 如 169.254.20.10),CoreDNS 就会报 “no healthy upstream”。

  • 进一个正常运行的 Pod(如 busybox),执行 nslookup kubernetes.default 或 dig @10.96.0.10 google.com(假设 CoreDNS ClusterIP 是 10.96.0.10),确认集群 DNS 是否能解析外部域名
  • 在节点上运行 cat /etc/resolv.conf,看 nameserver 是否合理(避免出现 127.0.0.53 或已下线的内部 DNS 地址)
  • 在节点上用 dig @ google.com 测试该 upstream 是否真实可达

确认 CoreDNS ConfigMap 是否被意外修改

CoreDNS 的行为由 coredns ConfigMap 控制(通常在 kube-system 命名空间)。常见问题包括:

  • 手动编辑时误删或写错 forward 行,例如写成 forward . 8.8.8.8 但没加端口,或用了不支持的语法
  • 把 forward . /etc/resolv.conf 改成了指向一个未监听 UDP 53 的服务(如只开了 TCP,或端口不对)
  • 启用了 health 插件但未正确配置健康检查路径,导致 readiness probe 失败连带影响 forward 判定

建议恢复为标准配置(Kubernetes 官方推荐):

小雫DNS 控制台
小雫DNS 控制台

基于 DNSHE Free Domain API 的第三方子域名管理控制台,提供 Web UI + Python CLI + Node.js CLI + REST/RPC/GraphQL API。从注册 DNSHE 到管理子域名和 DNS 记录的完整教程。

下载
forward . /etc/resolv.conf

排查网络插件或节点级 DNS 策略干扰

某些 CNI 插件(如 Calico、Cilium)或安全策略(NetworkPolicy、ebpf 规则、iptables DNAT)可能拦截或重定向 DNS 请求,尤其是目标端口 53 的 UDP 流量。

  • 检查节点是否运行了本地 DNS 缓存(如 systemd-resolved、dnsmasq),并确认其监听地址是否被 CoreDNS 容器正确继承
  • 临时关闭节点防火墙(systemctl stop firewalld 或 ufw disable)测试是否缓解
  • 在 CoreDNS 容器中执行 nc -zv 53(UDP 不支持 nc 检测,改用 timeout 2 dig @ google.com +short)验证连通性

验证 CoreDNS 是否因资源不足或启动顺序异常失败

虽不直接触发该报错,但低内存限制(memory: 170Mi 是底线)、或 initContainer 抢占 DNS 解析时机,也可能导致 forward 初始化失败。

  • 查看 Pod 事件:kubectl -n kube-system describe pod ,关注 Warning 级事件(如 FailedCreatePodSandBox、OOMKilled)
  • 检查资源请求是否过低:kubectl -n kube-system get deploy coredns -o yaml | grep -A 5 resources
  • 确认 coredns Deployment 的 dnsPolicy 是 Default(非 ClusterFirst),否则它会试图用自己解析自己,形成死锁

相关专题

更多
default gateway怎么配置
default gateway怎么配置

配置default gateway的步骤:1、了解网络环境;2、获取路由器IP地址;3、登录路由器管理界面;4、找到并配置WAN口设置;5、配置默认网关;6、保存设置并退出;7、检查网络连接是否正常。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.12.07

377

5

Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务
Golang云原生微服务Kubernetes_Golang怎么集成Kubernetes开发云原生服务

Golang云原生微服务Kubernetes (K8s) 是指 使用 Go 语言(Golang)编写的云原生微服务,并利用 Kubernetes 平台进行容器化部署、自动化管理、弹性伸缩和高效编排的一整套现代应用架构方案。

2025.12.22

116

5

Go云原生应用与Kubernetes服务部署实战
Go云原生应用与Kubernetes服务部署实战

本专题围绕 Go 语言在云原生环境中的应用展开,讲解容器化部署、Kubernetes 编排、服务发现、健康检查与弹性扩缩容机制。通过真实云端案例,帮助开发者构建可扩展的云原生微服务架构。

2026.06.29

228

19

tcp和udp的区别
tcp和udp的区别

TCP和UDP的区别,在连接性、可靠性、速度和效率、数据报大小以及适用场景等方面。本专题为大家提供tcp和udp的区别的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.25

603

5

udp是什么协议
udp是什么协议

UDP是OSI参考模型中一种无连接的传输层协议。本专题为大家带来udp是什么协议的相关文章,免费提供给大家。

2023.08.08

3471

5

tcp和udp有什么区别
tcp和udp有什么区别

tcp和udp的区别有:1、udp是无连接的,tcp是面向连接的;2、udp是不可靠传输,tcp是可靠传输;3、udp是面向报文传输,tcp是面向字节流传输。想了解更多tcp相关的内容,可阅读本专题下面的相关文章。

2024.11.14

4149

8

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

2026.11.12

40

15

Go-Zero安装与goctl环境配置教程
Go-Zero安装与goctl环境配置教程

本专题围绕Go-Zero的安装与工具链配置展开,讲清Go版本要求、goctl安装方式、代理镜像、protoc依赖与环境变量设置,说明多版本共存、升级回退与CI流水线安装的做法,并整理安装阶段的常见报错与验证步骤。

2026.11.12

40

15

Go-Zero零基础入门教程
Go-Zero零基础入门教程

本专题整理Go-Zero的入门知识,从框架定位、环境准备到跑通第一个API服务,讲清目录分层、配置加载、日志与中间件的基本用法,并对比Gin、Kratos的差异,帮助Go开发者建立整体认知,判断它是否适合当前项目。

2026.11.12

20

15

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Go-Zero HTTP服务开发指南
Go-Zero HTTP服务开发指南

共0课时 | 0人学习

Go-Zero goctl安装与使用手册
Go-Zero goctl安装与使用手册

共0课时 | 0人学习

Go-Zero框架快速开始指南
Go-Zero框架快速开始指南

共0课时 | 0人学习