本文是CoreDNS 开发系列第2章 CoreDNS 开发系列-1:CoreDNS核心概念和安装配置说明 CoreDNS 开发系列-2:CoreDNS插件详解 CoreDNS 开发系列-3:开发自定义插件 CoreDNS 开发系列-4:高并发域名平台架构设计 CoreDNS 开发系列-5:高性能域名平台项目开发 在上一篇文章中,我们了解了 CoreDNS 的基本概念、安装和配置文件的说明。在本文将深入探讨 CoreDNS 的插件 (Plugins),这是 CoreDNS 强大功能的核心所在。通过理解插件机制和核心插件的工作原理,我们将为后续开发自定义插件和构建 DNS 平台奠定坚实基础。
插件系统设计理念 通常情况下,CoreDNS Plugins在设计上围绕下面的原则进行的
单一职责:每个插件只负责自己负责的功能 链式处理:插件按配置顺序执行链处理请求 可插拔性:插件可以灵活组合和替换 扩展性:支持用户自定义插件开发插件来扩展功能 基于这些原则,使得 CoreDNS 非常强大,非常易于扩展性(对比与最流行的两款开源 DNS 产品来说,Bind, PowerDNS)。
CoreDNS与主流DNS服务产品的对比 下表是调研了三款最流行的 DNS 开源产品来对最符合本项目的后端作为对比,CoreDNS的灵活性相对比较适宜
特性 CoreDNS BIND9 PowerDNS 类型 权威/递归 权威/递归 权威/递归 AXFR/IXFR 支持 支持, trasfer 插件 支持 支持 view 支持(geo, view插件) 原生支持(view 指令) 支持(仅仅LMDB后端) 数据库支持 支持(通过自定义插件 mysql, redis) 有限 DLZ模块 (Dynamically Loadable Zones) [1] 原生有限支持 [2] DNSSEC 支持(NSEC) 全面支持(NSEC/NSEC3) 全面支持(NSEC/NSEC3) 扩展性 极佳(插件架构) 有限扩展,支持c语言库作为plugins 良好 易用性 高(简单配置,现代化) 中(配置复杂,需经验) 高(Web 界面、API) 社区与生态 活跃(CNCF 项目,Kubernetes 生态) 非常活跃(ISC 维护) 活跃(商业支持) 与本项目需求契合度 极高(插件化支持View, AXFR/IXFR, GEO) 高(原生支持VIEW, AXFR/IXFR) 高(数据库支持强,API 同步简单) CoreDNS插件的类型 CoreDNS插件分为两种类型插件,“In-tree Plugins” [3] 和 “External Plugins” [4];“In-tree Plugins” 是 CoreDNS 官方在提供 coredns 二进制文件时就内置编译到程序内的插件,用户可以自己去配置使用这些插件;“External Plugins” 是包含 CoreDNS 官方与三方作者维护的插件,用户如果想使用的话,需要自行编译 coredns 版本使用。...