CoreDNS 配置放在哪
集群内部的服务发现由 CoreDNS 提供,解析行为完全由 kube-system 命名空间里 coredns ConfigMap 中的 Corefile 决定。该文件由若干插件块组成:kubernetes 插件负责响应集群内部域名,forward 插件把外部域名交给上游解析,cache 插件缓存结果。自定义解析行为,就是从改这份配置开始。
基本信息
| 配置位置 | kube-system 命名空间下的 coredns ConfigMap |
|---|---|
| 配置语言 | Corefile,按插件块书写 |
| 监听端口 | 53(TCP 与 UDP) |
| 生效方式 | reload 插件自动感知,必要时滚动重启 |
| 上游来源 | forward 指向的文件或指定解析服务器 |
典型使用场景
- 为内部系统添加静态解析记录,避免逐个改业务侧 hosts
- 外部域名要走指定的内部解析服务器,需要改 forward 目标
- 排查解析超时或结果异常,临时打开日志插件观察查询
- 调整缓存时长,在减轻上游压力与加快变更生效之间取舍
- 核对集群内部域名后缀与业务配置是否一致,排除拼写错误
查看与默认内容
查看与默认内容
kubectl -n kube-system get cm coredns -o yaml # 查看完整 Corefile
# 典型 Corefile 片段:
# .:53 {
# errors # 输出解析错误
# health # 健康检查端点
# ready # 就绪状态
# kubernetes cluster.local in-addr.arpa ip6.arpa # 集群内部域名
# forward . /etc/resolv.conf # 外部域名转发
# cache 30 # 缓存 30 秒
# loop # 检测转发环路
# reload # 自动加载配置
# }生效与验证
生效与验证
kubectl -n kube-system rollout restart deploy/coredns # 手动滚动重启
kubectl -n kube-system rollout status deploy/coredns # 确认副本就绪
kubectl -n kube-system logs -l k8s-app=kube-dns --tail=50 # 看启动与解析错误
kubectl run dns-test --rm -it --image=busybox -- nslookup kubernetes.default # 集群内验证常用插件读法
| 插件 | 作用 | 使用提示 |
|---|---|---|
| kubernetes | 响应集群内部域名 | 默认服务域名为 cluster.local |
| forward | 转发外部查询 | 可指向内部解析服务器或上级服务器 |
| cache | 缓存解析结果 | 时长越长,变更生效越慢 |
| hosts | 静态解析记录 | 适合少量固定域名,注意与上游优先级 |
| log 与 errors | 输出查询日志和错误 | 排查时临时开启,长期开启日志量很大 |
Corefile 语法错误会让 CoreDNS 无法启动,集群内所有服务解析随之失败。修改前备份原内容,改完立即检查 Pod 日志与就绪状态。
多数情况下 reload 插件会让改动自动生效,无需手动重启;若观察不到变化,再滚动重启部署,并用一次集群内解析测试确认结果。