何でも屋エンジニアのブログ

ソフトウェア関連技術、コミュニティ、日々の雑貨

Consul DNSとDnsmasqについて調べたメモ

Dnsmasqは.consulへのDnsへの問い合わせ(port 53)をConsul DNS127.0.0.1#8600)に問い合わせるために使っている。

通常、DnsUDPポートの53を使うが、rootアクセスを必要とする。consulを特権ユーザーで動さずに使うために、適切にクエリをconsulにフォワーディングする。 https://www.consul.io/docs/guides/forwarding.html

より詳しくは、

consul は DNS形式でノード情報を提供しますが、この時のアクセスポートが 8600番なのでそのままでは DNSゾルバが行えません。 dnsmasq を利用することで、マシンローカル(127.0.0.1)のリクエストを別ポートにプロキシすることができるので、それで consul の DNS を利用できるようになりますがマシン 1台内で閉じています。

https://qiita.com/rerofumi/items/237c971ed100db6385d2

とのこと。

設定としては、ドキュメントにある通り、

# /etc/resolv.conf
nameserver 127.0.0.1
# /etc/dnsmasq.d/10-consul
server=/consul/127.0.0.1#8600

とすれば良い。これでdns問い合わせを自身の8600番ポートへフォワーディングできる。

基本として/etc/hostsになければresolve.confに記載されている順でnameserverに問い合わせる(strict-orderがtrueなら)ので、このような設定でフォワーディングできる。

ところで、address=の設定値でIPアドレスを直打ちでき、設定されたルール、curl -s localhost:8500/v1/catalog/nodesとかしてゴニョゴニョしてaddressの値に設定すると、nodeの入れ替えが少ないもの(例えば検証環境とか)に関してはdns問い合わせを行わないことも可能。 manページ--address=の項を参照。/etc/dnsmasq.d/に設定ファイルを置く。

他の参考 https://www.infiniteloop.co.jp/blog/2015/04/how_to_use_dnsmasq/ https://server.etutsplus.com/dnsmasq-setup-internal-dns-with-resolver-cache/ https://wiki.archlinux.jp/index.php/Dnsmasq http://www.thekelleys.org.uk/dnsmasq/doc.html

ところで、DNSと関係ないけどleader election時、3台のserverが存在するケースでleaderが落ちserversの台数が2台になった場合はどうなるんだろう。 あと、同様にleaderが落ちて4台になってしまった場合もどうなるんだろう(raftについて調べてないのでこのようなケースに対応できるか知らない)。