Consul-bootstrapping-dns
Consul-ブートストラップとDNS
この章では、Consulで次のコンポーネントがどのように使用されるかについて説明します。
- 自動ブートストラップ
- 手動ブートストラップ
- DNS転送を使用する
- DNSキャッシング
次に、これらのそれぞれについて詳しく説明します。
自動ブートストラップ
ブートストラップは、Consulのコア機能の1つです。 consulを初めてインストールすると、consulは、遭遇したノードを検出、識別、および参加するように自動的に構成されます。 クラスタの形成中、自動ブートストラップはConsulの組み込み機能です。 領事に関する詳細情報を得るための最良の方法は、以下のコマンドを使用することです-
$ sudo consul info
出力は、次のスクリーンショットのようになります。
このコマンドは、*実際の作業シナリオ*でのconsulの実際の作業を表示します。 Consulで動作するRaft Algorithmが表示されます。 自動ブートストラップコマンドは、次のコマンドを使用して表示することができます-
$ consul agent -server -data-dir = ”/tmp/consul” -bootstrap-expect 3
- -devモードでは自動ブートストラップは実行できません。*
このオプションは、予想されるサーバーノードの数をConsulに通知し、サーバーが利用可能になると自動的にブートストラップします。
手動ブートストラップ
手動ブートストラップは、Consulの古くて便利な機能です。 実際、Consulの以前のバージョンでは、初めてconsulをインストールして使用するときにブートストラップを手動で行う必要があります。 後に、このコマンドライン操作を異なる時間に実行することは不可能であることがわかりました。 したがって、自動ブートストラップが導入されました。 次のコマンドを使用して、手動でブートストラップをいつでも使用できます。
この場合、3ノードのconsulクラスターが構築されると仮定します。
手動ブートストラップを行うには2つのオプションがあります
- 2つのノードでコマンドを実行する:ノードBとノードCでは、次のことができます-
$ consul join <Node A Address>
- 1ノードでコマンドを実行する-
$ consul join <Node B Address> <Node C Address>
DNS転送を使用する
DNSは*ポート53 から提供されます。 DNS転送は、 *BIND、dnsmasq 、および iptables を使用して実行できます。 デフォルトでは、Consulエージェントはポート8600でリッスンするDNSサーバーを実行します。 ConsulエージェントのDNSサーバーにDNS要求を送信することにより、関心のあるサービスを実行しているノードのIPアドレスを取得できます。
Consul DNSインターフェイスは、* SRVレコード*を介してサービスのポート情報を利用できるようにします。 コードに手動でロジックを追加しなくても、通常はIPアドレス情報のみに制限されます(つまり、 クエリするサービスのレコード)。
最良のオプションは、それぞれがConsulエージェントをローカルで実行する複数のBINDサーバーを持つことです。 BINDサーバーが受信したクエリは、ローカルのConsul Agent DNSサーバーに転送されます。
バインドの使用
バインド機能を使用してDNS転送を使用できます。 次のコマンドを使用して実行できます。
$ sudo apt-get install bind9 bind9utils bind9-doc
出力は、次のスクリーンショットのようになります。
次のコマンドで/etc/bind/named.confファイルを編集してみましょう。
$ sudo vim/etc/bind/named.conf
ファイルでは、コードの最後の行の下に次の行を追加してください。
options {
directory "/var/cache/bind";
recursion yes;
allow-query { localhost; };
forwarders {
8.8.8.8;
8.8.4.4;
};
dnssec-enable no;
dnssec-validation no;
auth-nxdomain no; # conform to RFC1035
listen-on-v6 { any; };
};
include "/etc/bind/consul.conf";
出力は、次のスクリーンショットのようになります。
次のBindコマンドを使用して、Consulを構成できます。
$ sudo vim/etc/bind/consul.conf
ファイルを作成するときに次の行を追加します-
zone "consul" IN {
type forward;
forward only;
forwarders { 127.0.0.1 port 8600; };
};
これで、次のコマンドを使用して、consulエージェントの実行を開始できます。 (bind9サービスも再起動することを忘れないでください。)
$ sudo service bind9 restart
$ consul agent -server -bootstrap-expect 1 -data-dir =/tmp/consul -configdir = [Path]
ローカルConsulエージェントのDNSサーバーにクエリを送信するようにシステムを構成する必要があります。 これは、システム上の resolv.conf ファイルを更新して127.0.0.1を指すようにすることで実行されます。 ほとんどの場合、ポート53で実行するようにConsulを構成する必要があります。
次の情報を/etc/resolv.confに追加できます。
nameserver 127.0.0.1
DNSキャッシング
Consulは、すべてのDNS結果を「0 TTL」(Time to Live)値で提供します。 これにより、キャッシングが防止されます。 ただし、TTL値により、ConsulのダウンストリームでDNS結果をキャッシュできるように設定できます。 TTL値を高くすると、Consulサーバーでのルックアップの数が減り、クライアントのルックアップが高速になりますが、結果は古くなっています。
この目的のために、以下の方法を使用してDNSキャッシングを使用します-
$ sudo apt-get install dnsmasq
出力は、次のスクリーンショットのようになります。
今、私たちは非常に簡単な構成を行うことができます-
$ echo "server =/consul/127.0.0.1#8600" >/etc/dnsmasq.d/10-consul
ここで行っているのは、ポート8600で127.0.0.1のDNSサーバーが処理する領事サービスのDNS要求を指定することだけです。 consulのデフォルトを変更しない限り、これは機能するはずです。
通常は、次のコマンドを使用する必要があります。
$ dig @127.0.0.1 -p 8600 web.service.consul
*Dnsmasq* では、次のコマンドを使用する必要があります。
$ dig web.service.consul
出力は、次のスクリーンショットのようになります。