はじめに
リリース
v1.14.4基準。ソースからのビルドは Go 1.25.0 以上の動くツールチェインを前提とする。
前提
- Go 1.25.0 以上。
src/go.mod:5がこの最低要件を pin している (src/README.md:60)。 makeとgit。- bind するポート。CoreDNS はデフォルトでポート 53 を listen するが、通常は特権が要る。以下の例ではそれを避けるため高めのポートを使う。
インストール
ソースからバイナリをビルドする (src/README.md:62-68):
bash
git clone https://github.com/coredns/coredns
cd coredns
makeこれでリポジトリ直下に coredns バイナリができる。
最初の動く構成
目標は、すべてのクエリを公開上流に転送し、何をしたかをログに出すリゾルバ。
Corefile を書く。
.:1053ブロックは root zone をポート 1053 で提供し、8.8.8.8に転送し、ログとエラー報告を有効にする。text.:1053 { forward . 8.8.8.8 log errors }その Corefile で CoreDNS を起動する。
bash./coredns -conf Corefile別のターミナルから問い合わせる。任意の DNS クライアントで良い。ここでは
digを使う。bashdig @127.0.0.1 -p 1053 example.com
example.com の answer セクションが返り、CoreDNS のターミナルに そのクエリの log 行が出るはずだ。
動作確認
logプラグインはクエリ 1 件ごとに 1 行出すので、digが成功すると CoreDNS の出力に対応するログが現れる。- ブロックに
prometheusプラグインを足すとメトリクスを公開できる。メトリクスエンドポイントが応答するか確認する。アドレスは Corefile で設定する (デフォルトはlocalhost:9153)。 - 起動時に非ゼロ終了する場合は、たいてい Corefile の parse エラーか、ポートがすでに使われているかだ。
次に読むもの
- プラグインリファレンスと設定構文: coredns.io/plugins。
- out-of-tree プラグイン: coredns.io/explugins。
- Kubernetes では CoreDNS はクラスタ DNS add-on として (Helm またはクラスタ manifest で) デプロイされ、
kubernetesプラグインがcluster.localを解決する。スケーリング・autoscaling・セキュリティ強化など本番運用は Kubernetes と CoreDNS の公式ドキュメントを参照。