Contents
Consulを用いたサービスディスカバリの概要
現在の安定バージョンにおける導入意義
Consulは、クラウド環境における動的なサービス管理と高可用性の確保に特化したツールとして広く利用されています。最新の安定バージョンでは、DNSインターフェースの性能向上やセキュリティ設定の強化が行われており、DevOpsエンジニアが運用環境に導入する際の検討点が増えています。本記事では、実装手順とベストプラクティスを解説し、実務で即活用できる知識をお届けします。
Consulエージェントの初期設定手順
クライアント/サーバー構成の選定基準
Consulの導入には、クライアントモードかサーバーモードかを選定する必要があります。運用環境の規模と要求事項によって最適な構成が異なります。
クライアント/サーバー構成の選定基準
サービスの分散性やセキュリティ要件に応じて、モードを決定します。
| モード | 特徴 | 適したケース |
|---|---|---|
| クライアントモード | サービス登録とディスカバリの簡易的な構成。中央管理不要。 | マイクロサービスが分散された構成 |
| サーバーモード | セキュリティ設定やセグメント管理の集中化が可能。高可用性を重視するケース | 大規模なクラスタ運用が必要な場合 |
以下は、エージェント起動コマンドの一例です。
コンフィギュレーションファイルの作成例
|
1 2 3 4 5 6 7 8 9 10 |
# consul-agent.json { "node_name": "app-server-01", "datacenter": "tokyo", "server": false, "bootstrap_expect": 3, "client_addr": "0.0.0.0", "advertise_addr": "192.168.1.10" } |
この設定ファイルを用いて、consul agent -config-file=consul-agent.jsonコマンドでエージェントを起動します。
サービス登録用JSONファイルの作成方法
必要パラメータ一覧
サービスをConsulに登録するには、JSONファイルを作成し、以下の情報を記述します。このファイルはエージェントが読み込み、サービス情報を登録します。
必要パラメータ一覧
サービスの正確な登録には以下のような項目が必要です。
| 項目 | 説明 |
|---|---|
| service.name | 登録するサービス名 |
| service.port | サービスが利用するポート番号 |
| check.http | ヘルスチェック用のHTTPエンドポイント |
動的更新対応構文
動的なサービス登録には、JSONファイルを監視できるように設定します。
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "service": { "name": "user-api", "port": 8080, "check": { "http": "http://127.0.0.1:8080/health", "interval": "10s" } } } |
このJSONファイルをエージェントに読み込ませると、サービス登録が自動で行われます。
DNSベースのサービスディスカバリ構成
クエリ形式と応答例
ConsulはDNSインターフェースを通じてサービスディスカバリを行います。この仕組みにより、アプリケーションから直接DNSクエリを送信して、必要なサービスを発見できます。
クエリ形式と応答例
以下のようにクエリを送信すると、サービスのIPアドレスやポート情報を取得できます。
|
1 2 |
dig @127.0.0.1 user-api.service.consul SRV |
このクエリに対して、ConsulはSRVレコードとして、サービスのIPとポート番号を返します。応答例としては以下のような形になります。
|
1 2 |
user-api.service.consul. 0 IN SRV 1 1 8080 app-server-01.example.com. |
ヘルスチェックの実装と監視設定
HTTP/TCPチェックの選定ガイド
サービスの可用性を維持するために、ヘルスチェックが必須です。Consulでは、HTTPまたはTCPプロトコルを使用してチェックを行うことができます。
HTTP/TCPチェックの選定ガイド
チェック方法はサービスの要件に応じて異なります。
- HTTP: サービスの正常性を確認するには
/healthエンドポイントでステータスコード200を返す設定が適切です。 - TCP: 通信可能性のみを確認したい場合はTCPチェックを採用します。
フェールオーバー時の挙動制御
Consulは、サービスの健康状態が悪化した場合、自動でフェールオーバーを行います。この過程では、失敗したノードからサービス登録情報を削除し、他の正常なノードにリダイレクトします。
セキュリティ設定(Access Control ListやTLS)の基本
トークンベース認証構成
セキュアな運用には、ACL(Access Control List)とTLSを組み合わせた導入が必須です。最新バージョンではこれらの機能が強化されており、セキュリティ体制の強化に貢献します。
トークンベース認証構成
ACLは、サービスやデータへのアクセス制限を管理する仕組みです。以下のように設定ファイルに権限を記述します。
|
1 2 3 4 5 6 7 8 9 10 |
{ "acl": { "enabled": true, "default_policy": "deny", "tokens": { "master": "MASTER_TOKEN_HERE" } } } |
この設定により、サービスの操作にはマスタートークンが必要になり、セキュリティが向上します。
相互TLSの導入手順
相互TLS(mTLS)は、Consulサーバーとクライアント間での信頼性を高める方法です。以下に手順を示します。
- 証明書生成:
opensslコマンドでサーバー用とクライアント用の証明書を作成します。 - 証明書配置: 証明書をConsulサーバーとクライアントにそれぞれ配置します。
- 設定ファイル更新:
consul-server.jsonにTLS設定を追加します。
|
1 2 3 4 5 6 7 8 |
{ "tls": { "ca_file": "/etc/consul/ssl/ca.crt", "cert_file": "/etc/consul/ssl/server.crt", "key_file": "/etc/consul/ssl/server.key" } } |
サービスディスカバリの自動化と最適化
エージェント設定やセキュリティ構成を活用する
本記事で解説した手順を基に、自社環境でのConsul導入を検討してください。