CoreDNS 的 插件(或 外部插件)可通过在 Corefile 中指定(或不指定)来动态启用或禁用。但您还可以仅使用您需要的插件来编译 CoreDNS,并将所有其他插件全部排除在外。
有两种方法可以实现此目的。这可以通过使用 CoreDNS 代码库更新的编译时配置文件来完成。也可以在不修改 CoreDNS 代码的情况下实现。
使用编译时配置文件构建
使用编译时配置文件时,您只需要更新 plugin.cfg
。它看起来像这样
...
whoami:whoami
erratic:erratic
example:github.com/coredns/example
...
插件的顺序由它们在此文件中排列的顺序指定。每行包含一个名称和一个代码库。只需在此文件中添加或删除插件即可。
然后执行 go get <插件代码库路径>
,如果您需要获取外部插件的源代码。然后,使用 go generate
和 go build
仅编译 CoreDNS。您然后可以使用 coredns -plugins
检查 CoreDNS 是否具有新插件。
使用外部 golang 源代码构建
或者,您可以通过外部 golang 程序从不同的地方汇编插件。它看起来像这样
package main
import (
_ "github.com/coredns/example"
"github.com/coredns/coredns/coremain"
"github.com/coredns/coredns/core/dnsserver"
)
var directives = []string{
"example",
...
...
"whoami",
"startup",
"shutdown",
}
func init() {
dnsserver.Directives = directives
}
func main() {
coremain.Run()
}
在上述示例代码中,外部插件 example
已导入,方法是
_ "github.com/coredns/example"
还应通过以下方式更新指令
dnsserver.Directives = directives
插件的顺序由它们在切片 directives
中排列的顺序指定。
然后,您可以直接使用 go build
编译 CoreDNS,以使用您选择的插件生成二进制文件。