
coredns/coredns-buildtestCoreDNS 是一个用 Go 编写的灵活、高性能 DNS 服务器,基于插件链架构实现各类 DNS 功能。作为 Cloud Native Computing Foundation (CNCF) 孵化级项目,其核心优势在于灵活性:通过组合不同插件,可按需定制 DNS 数据处理逻辑,支持从简单的本地 DNS 服务到复杂的云原生环境 DNS 解析。
主要用途:
CoreDNS 通过插件链实现功能,支持以下核心能力(完整插件列表见 官方插件文档):
| 功能类别 | 关键插件及说明 |
|---|---|
| 后端存储 | - file:从文件加载区域数据(支持 DNSSEC、AXFR 主服务器功能)- kubernetes:以 Kubernetes 集群为后端(支持 Service/Endpoint 解析)- etcd:使用 etcd 存储 DNS 记录(替代 SkyDNS)- auto:自动从磁盘加载区域文件 |
| 数据处理 | - dnssec:实时签名区域数据- rewrite/template:重写查询(类型、类别、名称)- loadbalance:响应负载均衡 |
| 缓存与转发 | - cache:DNS 缓存- forward/proxy:转发查询至其他递归 DNS 服务器 |
| 监控与日志 | - metrics:暴露 Prometheus 指标- log:查询日志- errors:错误日志 |
| 辅助功能 | - cache:DNS 缓存- chaos:支持 CH 类查询(如 version.bind)- nsid:支持 RFC 5001 NSID 选项- pprof:性能分析 |
作为 Kubernetes 集群默认 DNS 服务(替代 kube-dns),通过 kubernetes 插件动态解析 Service 和 Pod 域名,支持 Headless Service、StatefulSet 等场景。
在 Docker 或其他容器平台中,作为自定义 DNS 服务器,通过 file 或 auto 插件提供静态 DNS 记录,或通过 forward 插件转发至外部 DNS。
通过 cache 插件缓存 DNS 响应,减少重复查询,提升解析效率,适用于对 DNS 性能敏感的应用。
通过 rewrite 或 template 插件修改查询参数(如重写域名、类型),实现复杂路由逻辑;通过 file 插件管理自定义区域文件(支持 DNSSEC)。
结合 metrics 插件暴露 Prometheus 指标(如查询延迟、成功率),通过 log 插件记录查询日志,满足可观测性需求。
Corefile)若无需自定义配置,可直接运行镜像(默认可能使用极简 Corefile,仅启用 whoami 插件用于测试):
bashdocker run -d --name coredns -p 53:53/udp -p 53:53/tcp coredns/coredns
CoreDNS 核心配置通过 Corefile 定义,需将本地配置文件挂载至容器内默认路径(通常为 /etc/coredns/Corefile):
本地 Corefile 示例(转发至 8.8.8.8 并启用日志):
corefile.:53 { forward . 8.8.8.8:53 # 转发所有查询至 8.8.8.8 log # 记录查询日志 errors # 记录错误日志 }
启动命令:
bashdocker run -d --name coredns \ -p 53:53/udp -p 53:53/tcp \ -v $(pwd)/Corefile:/etc/coredns/Corefile \ coredns/coredns
创建 docker-compose.yml:
yamlversion: '3' services: coredns: image: coredns/coredns container_name: coredns ports: - "53:53/udp" - "53:53/tcp" volumes: - ./Corefile:/etc/coredns/Corefile - ./zones:/var/lib/coredns # 挂载区域文件(若使用 file 插件) restart: unless-stopped networks: - dns-net networks: dns-net: driver: bridge
启动:
bashdocker-compose up -d
Corefile 是 CoreDNS 的核心配置文件,采用“服务器块 + 插件配置”结构,格式如下:
corefile[监听地址:]端口 { 插件1 [参数...] 插件2 [参数...] ... }
1. 转发至外部 DNS(forward 插件)
将所有查询转发至 8.8.8.8 和 1.1.1.1:
corefile.:53 { forward . 8.8.8.8:53 1.1.1.1:53 # "." 表示匹配所有域名 log # 记录查询日志到 stdout errors # 记录错误日志到 stdout cache 300 # 缓存 300 秒(5 分钟) }
2. Kubernetes 集群 DNS(kubernetes 插件)
为 Kubernetes 集群提供 DNS 服务(需在集群内运行,或配置 kubeconfig):
corefile.:53 { kubernetes cluster.local in-addr.arpa ip6.arpa { # 集群域名和反向区域 pods insecure # 允许解析 Pod IP(非安全模式) fallthrough in-addr.arpa ip6.arpa # 未匹配的反向查询继续处理 } forward . /etc/resolv.conf # 非集群域名转发至宿主机 DNS cache 30 log }
3. 文件服务静态 DNS 记录(file 插件)
从本地文件加载 example.org 区域数据:
corefileexample.org:53 { file /var/lib/coredns/example.org.zone # 区域文件路径 transfer to * # 允许所有 IP 进行区域传输(AXFR) dnssec # 启用 DNSSEC 签名 log }
4. 启用 TLS 监听(TLS 插件)
通过 TLS 协议(DNS over TLS)提供服务:
corefiletls://.:853 { # 监听 853 端口(标准 DoT 端口) tls /etc/coredns/tls/cert.pem /etc/coredns/tls/key.pem # 证书和密钥路径 forward . 8.8.8.8:53 log }
| 参数/文件 | 说明 |
|---|---|
Corefile | 核心配置文件,定义监听地址、端口及插件链,默认路径通常为 /etc/coredns/Corefile |
| 监听地址:端口 | 格式为 [协议://]地址:端口,支持 dns://(默认,UDP/TCP)、tls://、grpc:// |
| 插件参数 | 不同插件参数不同,详见 官方插件文档 |
CoreDNS 镜像可能支持以下环境变量(具体以镜像版本为准):
| 环境变量 | 说明 | 默认值示例 |
|---|---|---|
COREDNS_CONFIG | Corefile 内容(替代文件挂载) | 无 |
LOG_LEVEL | 日志级别(debug/info/warn/error) | info |
POD_IP | Kubernetes 环境中 Pod IP(用于自动配置) | 容器 IP |
***,详情参见 安全发布流程




manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务