CoreDNS篇2-编译安装External Plugins
本文最后更新于:May 16, 2021 am
本文主要对coredns的源码进行编译安装,以及在编译安装的过程中加入一些External Plugins的方法。
1、编译安装coredns
1.1 golang环境准备
官方的github页面上提供了编译安装的相关指引,需要的可以点击这里跳转。
First, make sure your golang version is 1.12 or higher as
go modsupport is needed. See here forgo moddetails.
由于coredns是使用golang编写,因此对其进行编译安装之前需要先配置go环境。而在centos中使用yum安装的go版本较旧,我们直接去官网下载最新的版本进行解压即可。
1 | |
接下来的go环境变量同学们可以根据自己的实际需求进行配置。对于我个人而言,我直接在/etc/profile中添加下面的配置然后source生效即可。
1 | |
go环境配置完成之后,我们还需要根据coredns的提示检查gomod是否正常,从go的GitHub文档中我们可以得知在1.16版本开始是默认启用并支持gomod的,所以这里我们无需额外配置。
Go 1.16
See the Go 1.16 release notes for details.
- Module mode (
GO111MODULE=on) is the default in all cases- Commands no longer modify
go.mod/go.sumby default (-mod=readonly)go install pkg@versionis the recommended way to globally install packages / executablesretractis available ingo.mod
1.2 编译coredns
接下来我们直接开始进行编译,(在编译过程中会访问google.com,k8s.io等域名,需要注意保证网络正常)
1 | |
编译完成之后我们就会在当前目录下得到一个二进制文件
1 | |
2、编译External Plugins
2.1 什么是External Plugins
coredns官方对于插件的分类基本可以分为三种:Plugins、External Plugins和其他。其中Plugins一般都会被默认编译到coredns的预编译版本中,而External Plugins则不会。官方的文档对外部插件的定义有着明确的解释,主要要求大概是有用、高效、符合标准、文档齐全、通过测试等。
2.2 如何编译插件
官方给出了一个详细的文档说明,编译插件基本可以分为修改源码和修改编译的配置文件这两种方式,这里我们采用简单高效的修改配置文件的方式进行测试。

在我们前面下载的官方源码中,有一个plugin的目录,里面是各种插件的安装包,同时还有一个plugin.cfg的文件,里面列出了会编译到coredns中的插件,
1 | |
例如这里我们需要额外多添加一个dump插件到coredns中,只需要在plugin.cfg中加入插件的名称和地址
1 | |
对于在plugin目录下已经存在的插件,则可以直接写成plugin中的目录名:
1 | |
然后我们开始编译
1 | |
2.3 验证插件
接下来只要检验生成的coredns二进制文件中是否包含dump插件即可确认是否顺利编译完成:

最后我们在配置文件中启动dump模块并进行测试,可以看到一条查询会出现两条日志,分别对应的是dump插件生成的日志和log插件生成的日志(带INFO)
