1 External Plugins概述
coredns官方对于插件的分类基本可以分为三种:Plugins、External Plugins和其他。其中Plugins一般都会被默认编译到coredns的预编译版本中,而External Plugins则不会。官方的文档对外部插件的定义有着明确的解释,主要要求大概是有用、高效、符合标准、文档齐全、通过测试等。
2 编译插件
官方给出了一个详细的文档说明,编译插件基本可以分为修改源码和修改编译的配置文件这两种方式,这里我们采用简单高效的修改配置文件的方式进行测试。
在我们前面下载的官方源码中,有一个plugin
的目录,里面是各种插件的安装包,同时还有一个plugin.cfg
的文件,里面列出了会编译到coredns中的插件,
[/home/coredns]# tail plugin.cfgsecondary:secondaryetcd:etcdloop:loopforward:forwardgrpc:grpcerratic:erraticwhoami:whoamion:github.com/coredns/caddy/oneventsign:signdump:github.com/miekg/dump
例如这里我们需要额外多添加一个dump插件到coredns中,只需要在plugin.cfg中加入插件的名称和地址
dump:github.com/miekg/dump
对于在plugin目录下已经存在的插件,则可以直接写成plugin中的目录名:
sign:sign
然后我们开始编译
[/home/coredns]# go get github.com/miekg/dumpgo: downloading github.com/miekg/dump v0.0.0-20201002053733-d877fdb82251go get: added github.com/miekg/dump v0.0.0-20201002053733-d877fdb82251[/home/coredns]# go generate[/home/coredns]# go build[/home/coredns]# make
3 验证插件
接下来只要检验生成的coredns二进制文件中是否包含dump
插件即可确认是否顺利编译完成:
最后我们在配置文件中启动dump
模块并进行测试,可以看到一条查询会出现两条日志,分别对应的是dump
插件生成的日志和log
插件生成的日志(带INFO)