[ #k8s ][ #DNS ] CoreDNS 1.0.1を触ってみた。

AIX、UNIX、LinuxContainer

Kubernetes(k8s)、触ってます? 私はベアメタル全盛の現場にいるので触ったことすらありません。昔ちょろっとDockerとかやったぐらいで、Container管理とかは全くです。

しかし、実はqiitaを覗いていたところDNSのコンポーネントであるCoreDNSというのを知って、少し興味が出たので触ってみました。

情報について

CNCF(Cloud Native Computing Foundation)のポートフォリオにLinkerd, gRPC, CoreDNSが加わる
2017年の初めから、Cloud Native Computing Foundation(CNCF)は、自らのホスティングおよびスチュワードシップのポートフォリオに新たな3つのプロジェクトを追加した。サービスディスカバリと障害処理と可視性を...

k8sに含まれた的な記事は上記のリンクから。
で、qiitaで確認した記事は下記のリンクから。

CoreDNS入門 – Qiita

使用方法についてはqiitaの記事でも多く書かれているのですが、自分なりに書いておこうと思います。

Webサイトはこちら。ダウンロードやら、ドキュメントやら、後述するプラグインのことなんかも書いてあります。

CoreDNS: DNS and Service Discovery

インストール手順

まずはインストールから。ソースファイルなどはGitHubから。

Releases · coredns/coredns

ありがたいことに、ソースファイル以外にもバイナリ自体も配布されています。しかも対応アーキテクチャとしてx86だけでなく、AArch64や、PowerPC、Power、Windowsとかのバイナリも配布されています。個人的にARMは多用しているのでありがたいですね。

バイナリを使用するときは、そのバイナリに対してPATHを通してあげるだけです。

$ coredns --version 
CoreDNS-1.0.1 linux/arm64, go1.9.2, 99e163c3

お手軽ですね。

起動仕方は以下の通り。基本的には以下の構文でいけるかなと。

$ coredns -conf=/etc/coredns/corefile -dns.port 53 -pidfile=/var/run/corefile.pid

設定について

で、設定ファイルの扱いになるCorefileについては以下のような記述方式になると思います。

.:53 { 
    errors log . 
    { 
       	class denial 
    } 
    health 
    cache 
    whoami 
    root /etc/coredns 
    proxy . 9.9.9.10:53 
    {
      	protocol dns 
    } 
}

CoreDNSの前身となるSkyDNSの記述方式であるCaddyとかいう方式らしいです。

The Corefile is parsed like a Caddyfile. We support everything that is described on that page, for instance the use of environment variables.

https://coredns.io/2017/07/23/corefile-explained/

とりあえずざっくりとした解説になります。詳細については公式ドキュメントを参照してください。

POINT

  • .:53 { :この場合は、ルートゾーンとそれ以下のすべてに対して権限を持つサーバーを定義します。待ち受けるポート番号は53ですね。
  • errors :参照中のエラーについて標準出力する
  • log . { class denial } :すべての要求に対して共通ログ形式でstdoutにクエリログエントリが書き込まれます。幾つかオプションが存在しますが、denialはNXDOMAINまたはNODATAのいずれかのとき出力するようになります。
  • healthCoreDNS自体の死活監視ですね。
  • cache :書いて字のごとく。問い合わせ自体をキャッシュできるようになります。キャッシュ期間も制御できるようになるほか、その時のデータをメトリクスとして取得できるようにもなります。
  • whoamiCoreDNSが起動時にCorefileを見つけることができない場合、ロードされるデフォルトのプラグインです。
  • root  :zoneファイルなんかを置いてあるディレクトリ位置を指定します。
  • proxy . 9.9.9.10:53 { protocol dns }DNSリバースプロキシとロードバランサ機能を提供する。コレの面白いところは、使用できるプロトコルがdns以外にもgRPCdns.google.comに対してhttpsでアクセスするhttps_googleナンていうのもあります。

という感じになるでしょうか。

他にもDNSSECを有効にしたりするプラグインや、dnstapを使用するためのプラグイン、hostsファイルを参照するようにするプラグイン、BIND形式のzoneファイルを読み込むようにも出来たりします。

そういう意味では、内向けのDNSサーバとしてはサクッと作れて便利なんじゃないでしょうか。

用意されているプラグイン

現在用意されているプラグインはこちらから確認することが出来ます。

Plugins

通常のプラグインとしては同梱されていないですが、PowerDNSのSQLを使用してバックエンドを利用するためのプラグインがあったり、デフォルトで用意されているProxyプラグインではなく、forwardするためのプラグインもあったりします。

External Plugins

感想

UnboundやPowerDNSなんかも便利ですが、必要最低限の機能で良い場合なんかはいいかもしれませんね。

あとロードバランサー的なことが出来たりするので、dnsdistの代わりでもいいかもしれません(CoreDNSはクエリを細かく制御は今のところ出来ないようですが)。配分ポリシーもラウンドロビン方式しか無いようなので、このあたりも実装次第なのかなぁと。

あと、IPv6についてもForwardプラグインなどは記事時点では対応しているようですが、本体自体の正式な対応は「K8s v1.9 (GA on 12/23/2017).」なのかな。

plugin/k8s: Support IPv6 · Issue #1236 · coredns/coredns

ちなみに自分は、他のDNSツールとパフォーマンスなどは比較してはいません。そのうちdnsperfとかresperfとかで確認ぐらいはしてみようかと思いますが。

k8sとしてのコンポーネントとして使用するだけでなく、リゾルバーぐらいの機能だけを使用したいなら、十分な選択肢になると思います。

間違い等ありましたらご指摘ください。

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました