CoreDNS' の プラグイン (または 外部プラグイン) は、Corefile にそれを指定 (または指定しない) ことによってオンザフライで有効化または無効化できます。ただし、必要な プラグインのみを使用して CoreDNS をコンパイルし、残りを完全に残すこともできます。
それを実現するには2つの方法があります。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 をコンパイルするだけで、選択したプラグインを使用して生成されたバイナリを使用できます。