CoreDNS 开发系列-3:开发自定义插件

本文是CoreDNS 开发系列第3章 CoreDNS 开发系列-1:CoreDNS核心概念和安装配置说明 CoreDNS 开发系列-2:CoreDNS插件详解 CoreDNS 开发系列-3:开发自定义插件 CoreDNS 开发系列-4:高并发域名平台架构设计 CoreDNS 开发系列-5:高性能域名平台项目开发 在上一篇文章中,我们了解了 CoreDNS 的基本概念、安装和配置文件的说明,与 CoreDNS 中的插件,本文将从零开始,深入学习 CoreDNS 插件开发的完整流程,让您能够开发出满足特定业务需求的高质量插件。在最后我们学习一下 CoreDNS 中的外部插件用以引入开发思路,来解决我们平台中的一些难点。 代码构成 在学习开发插件之前,我们先需要了解下 CoreDNS 的代码目录构成。 text 1 2 3 4 5 6 7 8 9 10 11 coredns/ ├── core/ # 核心组件 │ ├── dnsserver/ # DNS 服务器实现 │ └── plugin/ # 插件管理框架 ├── plugin/ # 内置插件目录 │ ├── cache/ # 缓存插件 │ ├── forward/ # 转发插件 │ ├── kubernetes/ # Kubernetes插件 │ └── ....

 ·  · 

CoreDNS 开发系列-2:CoreDNS插件详解

本文是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 版本使用。...

 ·  · 

CoreDNS开发系列-1:CoreDNS核心概念和安装配置说明

本文是CoreDNS 开发系列第1章 CoreDNS 开发系列-1:CoreDNS核心概念和安装配置说明 CoreDNS 开发系列-2:CoreDNS插件详解 CoreDNS 开发系列-3:开发自定义插件 CoreDNS 开发系列-4:高并发域名平台架构设计 CoreDNS 开发系列-5:高性能域名平台项目开发 CoreDNS 概述 什么是CoreDNS CoreDNS 是一个由 Go 编写的灵活、可扩展的 DNS 服务器。他非常灵活,几乎全部功能都由 plugin 来实现,CoreDNS 官网也有说 “CoreDNS is powered by plugins.” 。Plugins 能够作为 “独立” 或和 CoreDNS “共同” 来执行 “DNS Function” 在 CoreDNS 中被设计为是一个由 “软件实现的 CoreDNS Plugin API”,例如 Kubernetes Provider 可以提供在 k8s 集群里的服务发现。再例如 file 可以提供作为一个 DB 来使用。 CoreDNS 的设计与 与 Caddy 一样也是通过 “插件” 进行扩展,并原生支持 Prometheus 也是 CoreDNS 的一大优势,这意味着我们可以将其连接到现有的 Prometheus 基础架构中进行监控、警报和仪表板管理。 CoreDNS 核心架构 Server:负责监听 DNS 查询请求 Plugins Chain:按照配置顺序串联起来的插件序列 Handler:每个插件实现的请求处理器 Middleware:在请求处理过程中的中间件 DNS 请求在 CoreDNS 中的处理流程如下:...

 ·  ·