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 mod
support is needed. See here forgo mod
details.
由于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.sum
by default (-mod=readonly
)go install pkg@version
is the recommended way to globally install packages / executablesretract
is 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)