1. CoreDNS
CoreDNS 是一个 DNS 服务器或 DNS 代理服务器,基于 Go 语言开发实现。CoreDNS 是基于链式插件来设计,每个插件执行一个(DNS)功能。
CoreDNS 是一款快速且灵活的 DNS 服务器。这里的关键是灵活: 使用 CoreDNS,你可以通过使用插件来实现你想对 DNS 数据的处理。如果有些功能没有现成提供,你可以通过编写插件来添加。
该项目在 CNCF 托管:
- CNCF 分层:编排和管理
- CNCF 分类:协调和服务发现
- CNCF 成熟度:已毕业
1.1. 产品特性
CoreDNS 可以通过以下几种方式来处理 DNS 请求:
- UDP/TCP (传统的 DNS 请求处理方式)
- TLS (RFC 7858),也称为 DoT
- HTTP/2 (RFC 8484),也称为 DoH
- gRPC (目前还不是一个标准)
目前 CoreDNS 能够:
- 从文件中提供区域数据;DNSSEC (仅 NSEC )和 DNS 都支持(file and auto)。
- 从主服务器检索区域数据,即充当辅助服务器(仅限AXFR)(secondary)
- 动态标记区域数据(dnssec)。
- DNS 请求响应的负载平衡 (loadbalance).
- 允许 zone 区域传输,即充当主服务器(file + transfer)。
- 从磁盘动态加载 zone 文件 (auto).
- 缓存 DNS 响应 (cache).
- 使用 Etcd 作为后端 (replacing SkyDNS) (etcd).
- 使用 k8s (kubernetes) 作为后端 (kubernetes).
- 支持 DNS 充当代理,将查询转发到其他一些(递归) Nameserver 服务器 (forward).
- 提供 Prometheus 采集的 Metrics 指标数据接口 (prometheus).
- 提供查询 (log) 和错误 (errors) 日志.
- 与云厂商平台集成 (route53).
- 支持 CH class: version.bind and friends (chaos).
- 支持 RFC 5001 DNS name server identifier (NSID) option (nsid).
- Profiling 支持 (pprof).
- 重写查询 (qtype, qclass and qname) (rewrite and template).
- Block ANY queries (any).
- 提供 DNS64 IPv6 转换 (dns64)
- 其他更多功能可通过插件支持
1.2. 适用场景
- 作为传统的 DNS Server 提供 DNS 查询服务,或者 DNS 代理服务
- Kubernetes 就在集群中使用 CoreDNS 解决服务发现的问题。