Contents
Consul のダウンロードと基本セットアップ
このセクションでは、公式サイトから最新の Consul バイナリを取得し、最小構成でエージェントを起動できるまでの流れを解説します。バイナリ取得手順と、すぐに動作確認が取れる設定例を示すことで、導入前段階のハードルを下げることが目的です。
ダウンロード方法(公式サイトから取得)
2026 年時点で公開されている安定版は 1.16 系列 ですが、正確なバージョン番号は HashiCorp のダウンロードページで必ず確認してください。以下は Linux x86_64 向けの一般的な手順です。
|
1 2 3 4 5 6 7 |
# 公式サイトから zip を取得 curl -L -o consul.zip https://releases.hashicorp.com/consul/<VERSION>/consul_<VERSION>_linux_amd64.zip # 展開して実行ファイルを配置 unzip consul.zip sudo mv consul /usr/local/bin/ |
<VERSION> の部分は、ダウンロードページに記載された最新のバージョン文字列(例: 1.16.2)に置き換えてください。
初期構成ファイルの作成
最小構成は JSON または HCL のどちらでも記述できますが、ここでは可読性を重視して JSON を採用します。設定項目は データセンター名、データディレクトリ、ログレベル、ACL 有効化 などの基本的なものに絞っています。
|
1 2 3 4 5 6 7 8 9 10 11 |
{ "datacenter": "dc1", "data_dir": "/opt/consul", "log_level": "INFO", "enable_acl": true, "ports": { "http": 8500, "dns": 8600 } } |
datacenterは論理的なデータセンター名で、マルチクラウド構成の場合はリージョンごとに異なる名前を付けます。enable_aclを true にすると、Consul が起動時に ACL 機能を有効化します(トークンの発行は別途必要です)。
作成したファイルは /etc/consul.d/config.json として保存し、所有者と権限を適切に設定してください。
起動確認
以下のコマンドでエージェントを開発モード(-dev)で起動します。-config-dir に先ほど作成したディレクトリを指定するだけで、すぐに UI が利用可能になります。
|
1 2 |
consul agent -config-dir=/etc/consul.d -dev |
ブラウザで http://127.0.0.1:8500/ui にアクセスし、「alive」ステータスのノードが表示されれば、基本的なセットアップは完了です。
ポイント:公式バイナリを取得し、最小構成ファイルだけで起動できることを確認すれば、その後のカスタマイズや本番環境への拡張がスムーズに進みます。
エージェントのローカル起動とサーバー/クライアントモードの概要
この章では、開発者が自分のマシン上で Consul を手軽に試すための Docker 起動例と、実運用で必須となる サーバーモード と クライアントモード の役割・違いを整理します。ローカル検証と本番設計の境界線を明確にすることが目的です。
Docker でローカルエージェントを起動する例
Docker がインストールされている環境(WSL2、macOS、Linux)なら、以下のコマンドだけで Consul エージェントを単体で立ち上げられます。-dev フラグは開発向けにデータ永続化なしの一時サーバーを自動生成し、UI も同時に有効化します。
|
1 2 3 4 5 |
docker run -d --name consul-dev \ -p 8500:8500 -p 8600:8600/udp \ -v $(pwd)/config.json:/consul/config/config.json \ hashicorp/consul:1.16.0 agent -dev -ui -client=0.0.0.0 |
-client=0.0.0.0により、ローカルネットワーク全体から API と DNS が利用できるようになります。- コンテナ起動後は同様に
http://localhost:8500/uiで UI を確認できます。
サーバーモードとクライアントモードの比較
以下の表は、2 つのモードが提供する機能と運用上の要件をまとめたものです。各項目は実際に設計を行う際の判断材料として活用してください。
| 項目 | サーバーモード | クライアントモード |
|---|---|---|
| 主な役割 | Raft コンセンサスで KV ストア・サービスカタログを保持し、データレプリケーションとフェイルオーバーを管理する | ローカルホスト上のサービス登録・ディスカバリのみを担当し、サーバーへ情報を転送 |
| 必要なノード数 | クォーラム確保のため 最低 3 台(奇数)を推奨 | 任意の台数で配置可能。エージェントは軽量なので多数デプロイが一般的 |
| 推奨使用シーン | 本番データセンター、マルチクラウド環境の WAN フォーディング | 各アプリケーションサーバー、開発・テスト環境 |
| TLS 設定 | サーバ間通信は相互 TLS が推奨(公式イメージではオプションで有効化) | クライアント→サーバー間も同様に TLS を設定すべき |
| ACL の影響 | トークンベースのポリシーが直接適用され、全操作を制御できる | クライアント側でもトークンを渡す必要があるが、権限はサーバー側で一元管理 |
結論:ローカル開発では
-devエージェントだけで十分ですが、本格運用時には少なくとも 3 台のサーバーノードと多数のクライアントエージェントを組み合わせ、TLS と ACL を有効化することがベストプラクティスです。
サービス登録と DNS インターフェースの選択肢
Consul が提供する HTTP API と DNS の二つのインターフェイスは、利用シーンに応じて使い分けることでパフォーマンスと運用性を最適化できます。この章ではそれぞれの特徴と、実際の設定例を示します。
HTTP API によるサービス登録
API は柔軟なメタデータ付与やヘルスチェック設定が可能です。以下は最小構成で Spring Boot アプリケーションを登録する curl コマンド例です。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
curl -X PUT http://127.0.0.1:8500/v1/agent/service/register \ -H "Content-Type: application/json" \ -d '{ "Name": "order-service", "ID": "order-01", "Port": 8080, "Check": { "HTTP": "http://127.0.0.1:8080/actuator/health", "Interval": "10s" } }' |
Checkフィールドで HTTP ヘルスチェックを同時に登録できます。- ACL が有効化されている環境では、
X-Consul-Tokenヘッダーに適切なトークンを付与してください。
DNS クエリの活用ポイント
DNS は名前解決だけでなく、SRV レコードを利用したロードバランシングやサービスディスカバリにも使えます。TLS 経由(DoT)での問い合わせが可能なため、内部ネットワークでも暗号化された名前解決が実現できます。
|
1 2 |
dig @127.0.0.1 -p 8600 order-service.service.consul SRV +short |
上記コマンドは order-service のインスタンス情報を取得します。返却されるフィールドは 重み、優先度、ポート、FQDN の順です。
ポイント:設定変更が頻繁に起きるマイクロサービス環境では、API で登録・更新し、ランタイム側は DNS(SRV/A)で参照する構成がシンプルかつ高速です。TLS が必要な場合は
dns+tls://スキームを利用してください。
選択指針表
| シナリオ | 推奨インターフェイス |
|---|---|
| 動的メタデータやヘルスチェックを同時に管理したい | HTTP API |
| 高頻度の名前解決、レイテンシ最小化が重要 | DNS (A / SRV) |
| 内部通信を暗号化したい | DNS over TLS(DoT) |
ヘルスチェック、ACL、TLS の設定例
本章では、サービスの可用性とセキュリティを確保するために必須となる ヘルスチェック、アクセスポリシー (ACL)、そして 相互 TLS の具体的な設定手順を示します。実際の JSON/HCL 例と CLI コマンドを併せて紹介し、すぐに適用できる形にまとめました。
ヘルスチェックの種類と推奨設定
Consul がサポートするヘルスチェックは主に TCP、HTTP、Script の 3 種類です。以下にそれぞれの JSON 設定例と、失敗時の動作をまとめます。
| チェック種別 | 設定例(JSON) | 主な利用シーン |
|---|---|---|
| TCP | "Check": { "TCP": "127.0.0.1:3306", "Interval": "15s" } |
データベースやメッセージブローカーのポート監視 |
| HTTP | "Check": { "HTTP": "http://127.0.0.1:8080/health", "Interval": "10s", "Timeout": "2s" } |
アプリケーションのエンドポイント監視 |
| Script | "Check": { "Args": ["/usr/local/bin/check-db.sh"], "Interval": "30s" } |
カスタムロジックが必要なケース |
ヘルスチェックに DeregisterCriticalServiceAfter を併せて設定すると、一定時間以上復旧しないインスタンスを自動的にカタログから除外できます。
|
1 2 3 4 5 6 7 |
"Check": { "HTTP": "http://127.0.0.1:8080/health", "Interval": "10s", "Timeout": "2s", "DeregisterCriticalServiceAfter": "1m" } |
注意点:
intervalが短すぎると一時的な遅延で誤検知が増えるため、サービスの特性に合わせて調整してください。
ACL ポリシーの基本形
ACL が有効化されている環境では、最小権限のポリシーを作成しトークンに紐付けることが推奨されます。以下は 読み取り専用 と キー書き込み を許可する簡易例です(HCL 形式)。
|
1 2 3 4 5 6 7 8 9 10 11 |
# policies/read-write.hcl node_prefix "" { policy = "read" } service_prefix "" { policy = "read" } key_prefix "" { policy = "write" } |
ポリシーを適用したトークンは CLI で作成できます。
|
1 2 |
consul acl token create -policy-name=read-write -description="Read‑Write token for applications" |
取得したトークンは環境変数 CONSUL_HTTP_TOKEN に設定し、API 呼び出しやエージェント起動時に自動的に利用させます。
相互 TLS の導入フロー
TLS を使用すると、サーバー間およびクライアント‑サーバー間の通信が暗号化され、ゼロトラスト環境を構築できます。以下は自己署名証明書で相互認証を有効にする手順です。
- CA と証明書の生成(OpenSSL 例)
bash
# CA の作成
openssl req -new -x509 -days 3650 -keyout ca.key -out ca.crt -subj "/CN=Consul-CA"
# サーバー証明書
openssl req -newkey rsa:4096 -nodes -keyout consul_server.key -out consul_server.csr \
-subj "/CN=consul-server"
openssl x509 -req -in consul_server.csr -CA ca.crt -CAkey ca.key -CAcreateserial \
-days 365 -out consul_server.crt
# クライアント証明書(同様に作成)
config.json に TLS 設定を追記**
2. **サーバー側
json
{
"verify_incoming": true,
"verify_outgoing": true,
"cert_file": "/etc/consul.d/certs/consul_server.crt",
"key_file": "/etc/consul.d/certs/consul_server.key",
"ca_file": "/etc/consul.d/certs/ca.crt"
}
- クライアントエージェントでも同様に設定し、環境変数で検証を有効化する。
bash
export CONSUL_HTTP_SSL_VERIFY=1
ポイント:CA と証明書は安全な場所に保管し、ローテーション手順も合わせて設計してください。TLS が有効になると、ACL トークンだけでなく通信自体も暗号化されるため、総合的なセキュリティが向上します。
Docker Compose で構築するローカル開発環境と Spring Cloud / Dapr 統合例
この章では、Docker Compose を用いて Consul + Spring Cloud Consul + Dapr の一括起動手順を示します。ローカルの開発マシンだけで本番に近い構成を再現できるため、CI/CD パイプラインやチーム共有が容易になります。
docker‑compose.yml の主要ポイント
以下は docker-compose.yml の抜粋です。各サービスの役割と設定項目について簡潔に解説します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
version: "3.9" services: consul: image: hashicorp/consul:1.16.0 command: agent -server -bootstrap-expect=1 -client=0.0.0.0 -ui -dns-port=8600 ports: - "8500:8500" - "8600:8600/udp" volumes: - ./consul/config:/consul/config environment: CONSUL_LOCAL_CONFIG: | { "datacenter": "dc1", "enable_acl": true, "verify_incoming": true, "verify_outgoing": true, "cert_file": "/etc/consul/certs/consul.crt", "key_file": "/etc/consul/certs/consul.key", "ca_file": "/etc/consul/certs/ca.crt" } order-service: build: ./order-service depends_on: - consul environment: SPRING_CLOUD_CONSUL_HOST: consul SPRING_CLOUD_CONSUL_PORT: 8500 CONSUL_HTTP_TOKEN: ${CONSUL_HTTP_TOKEN} ports: - "8080:8080" dapr-sidecar: image: "daprio/daprd:1.12" command: "./daprd --app-id order-service --components-path /components --config /dapr/config.yaml" depends_on: - consul volumes: - ./dapr/components:/components - ./dapr/config.yaml:/dapr/config.yaml |
- Consul コンテナはサーバーモードで起動し、
CONSUL_LOCAL_CONFIG環境変数に TLS と ACL の設定をインラインで渡しています。 - order-service は Spring Boot アプリケーションです。Spring Cloud Consul が自動的にサービス登録・ディスカバリを行います。トークンは環境変数から注入します。
- dapr-sidecar は Dapr のサイドカーとして起動し、
components/consul.yamlで KV ストアや名前解決コンポーネントと連携します。
Spring Cloud Consul 設定例(application.yml)
Spring Boot アプリ側の設定は application.yml に記述します。以下は最小構成です。
|
1 2 3 4 5 6 7 8 9 10 11 12 |
spring: cloud: consul: host: ${SPRING_CLOUD_CONSUL_HOST} port: ${SPRING_CLOUD_CONSUL_PORT} discovery: health-check-path: /actuator/health health-check-interval: 10s scheme: http config: enabled: false # KV のみ利用する場合は無効化 |
discovery.health-check-pathとhealth-check-intervalにより、Spring が自動的に HTTP ヘルスチェックを Consul に登録します。- ACL トークンは環境変数
CONSUL_HTTP_TOKENで渡すだけなので、コードに機密情報が残りません。
Dapr コンポーネント設定(consul.yaml)
Dapr が Consul の KV ストアを状態管理として利用する例です。TLS と ACL トークンの両方を指定しています。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
apiVersion: dapr.io/v1alpha1 kind: Component metadata: name: consul-kv spec: type: state.consul version: v1 metadata: - name: address value: "http://consul:8500" - name: token secretKeyRef: name: consul-token key: token - name: tlsEnabled value: "true" - name: caCert value: "/components/certs/ca.crt" - name: clientCert value: "/components/certs/consul.crt" - name: clientKey value: "/components/certs/consul.key" |
secretKeyRefは Dapr がシークレットストア(例:Kubernetes Secret)からトークンを取得する仕組みです。- TLS 設定により、ネットワーク上の通信は暗号化されます。
ポイント:Docker Compose 1 ファイルで Consul・Spring Cloud・Dapr を同時起動できるため、ローカル開発から本番デプロイまでの移行がシームレスです。機密情報はすべて環境変数やシークレットで管理し、コードベースに埋め込まないようにしましょう。
マルチデータセンター構成と導入チェックリスト
大規模サービスでは 複数クラウドプロバイダーやリージョン にまたがる Consul クラスタを構築し、可用性と低レイテンシを両立させます。この章では WAN フォーディングの基本手順と、本番運用前に確認すべき項目を一覧化します。
WAN フォーディングの基本手順
以下はデータセンター間で Consul を連携させる際の流れです。各ステップはスクリプト化して自動化すると、環境追加時の作業負荷が大幅に削減できます。
- 各 DC に 3 台以上のサーバーノードを配置(クォーラム確保)。例:
dc-east、dc-west。 - サーバーモードで WAN フォーディングを有効化。起動オプションに
-wan-enableを追加します。
bash
consul agent -server -bootstrap-expect=3 -datacenter=dc-east -wan-enable \
-config-dir=/etc/consul.d &
- 相互接続情報を登録(片方のサーバーからもう一方へ
join-wan実行)。
bash
consul join-wan <dc-west-server-ip>
- 接続確認。各データセンターで次のコマンドを実行し、WAN メンバーが表示されることをチェック。
bash
consul members -wan
- KV や ACL の名前空間分割。重要なシークレットは KV パスプレフィックスごとに専用ポリシーを適用し、最小権限で保護します。
補足:2026 年版では WAN ギャップ削減モードが追加され、レイテンシの改善効果が期待できますが、実際の数値はネットワーク環境に依存するため、導入前にベンチマークを取得してください。
本番運用チェックリスト
| 項目 | 確認ポイント |
|---|---|
| TLS 設定 | すべてのサーバー・クライアントが相互 TLS で通信しているか |
| ACL ポリシー | トークンは最小権限に絞られ、ロールベース制御が適用されているか |
| ヘルスチェック | 各サービスの HTTP/TCP ヘルスチェックが正しく登録・稼働中か |
| WAN フォーディング | consul members -wan で全 DC のノードが表示され、通信に障害がないか |
| バックアップ | KV ストアと ACL 設定のスナップショットが定期的に取得・保管されているか |
| 監視・ロギング | Prometheus 用メトリクスエンドポイントと、ELK などへのログ転送が構成済みか |
| 障害シミュレーション | サーバーダウンやネットワーク分断を意図的に発生させ、フェイルオーバーが期待通り動くか |
上記項目をすべてクリアできれば、マルチクラウド・マルチデータセンター環境でも 高可用性 と 堅牢なセキュリティ が確保された Consul クラスタが構築できます。
まとめ
- 公式サイトで最新バージョンを確認し、最小構成のバイナリ取得と起動確認までを自動化すれば、導入ハードルは低くなります。
- サーバーモードとクライアントモードの役割を正しく理解し、最低 3 台のサーバーでクォーラムを確保することが本番運用の基本です。
- サービス登録 は API、名前解決 は DNS(SRV/A)という使い分けがベストプラクティスです。TLS が必要な場合は DoT を併用してください。
- ヘルスチェック・ACL・相互 TLS の組み合わせで、可用性とセキュリティの両輪を実現します。
- Docker Compose + Spring Cloud Consul + Dapr でローカル開発環境を構築すれば、コード変更からデプロイまでのサイクルが高速化します。
- マルチデータセンター構成では WAN フォーディングと包括的なチェックリストに沿った検証が不可欠です。
この手順書をベースに、組織固有の要件(ネットワークトポロジーや運用ポリシー)に合わせてカスタマイズすれば、2026 年以降も安定したサービスディスカバリ基盤として Consul を活用できます。