CoreDNS 的外掛程式(或外部外掛程式)可以透過在Corefile中指定(或不指定)來動態啟用或停用。但您也可以編譯 CoreDNS 時只包含您需要的外掛程式,並完全排除其餘的外掛程式。
有兩種方法可以實現這一點。一種是透過具有 CoreDNS 程式碼庫更新的編譯時組態檔來完成。另一種則可以在不修改 CoreDNS 程式碼的情況下實現。
使用編譯時組態檔進行建置
使用編譯時組態檔時,您只需要更新plugin.cfg
。它看起來像這樣
...
whoami:whoami
erratic:erratic
example:github.com/coredns/example
...
外掛程式的順序由它們在此檔案中的排序方式指定。每一行都包含一個名稱和一個儲存庫。只需在此檔案中新增或移除您的外掛程式即可。
如果您需要取得外部外掛程式的原始碼,請執行 go get <plugin-repo-path>
。然後使用 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,以產生包含您所選外掛程式的二進位檔。