サービス検出、設定管理、サービスメッシュのための包括的な HashiCorp Consul コマンドとワークフロー。
インストールとセットアップ
| コマンド | 説明 |
|---|
consul version | Consul のバージョンを表示 |
consul agent -dev | 開発エージェントを開始 |
consul agent -config-dir=/etc/consul.d | 設定から始める |
consul members | クラスターメンバーをリスト |
consul info | エージェント情報を表示 |
エージェント管理
基本的なエージェント操作
| コマンド | 説明 |
|---|
consul agent -server -bootstrap-expect=3 | サーバーエージェントを起動 |
consul agent -client=0.0.0.0 | クライアントエージェントを開始 |
consul join 192.168.1.100 | クラスターに参加 |
consul leave | クラスタから優雅に離脱する |
consul reload | 設定をリロード |
エージェント設定
| コマンド | 説明 |
|---|
consul validate /etc/consul.d | 設定を検証 |
consul configtest | テスト設定 |
サービス検出
サービス登録
| コマンド | 説明 |
|---|
consul services register service.json | ファイルからサービスを登録 |
consul services deregister service-id | サービスの登録解除 |
consul catalog services | すべてのサービスを一覧表示 |
consul catalog nodes | すべてのノードをリスト |
サービスクエリ
| コマンド | 説明 |
|---|
consul catalog service web | サービスのインスタンスを一覧表示 |
consul catalog service web -tag production | タグでフィルター |
consul health service web | ヘルスチェックステータス |
consul health node node1 | Nodeヘルスステータス |
DNSインターフェース
| コマンド | 説明 |
|---|
dig @127.0.0.1 -p 8600 web.service.consul | DNS を介してクエリサービスを実行 |
dig @127.0.0.1 -p 8600 web.service.dc1.consul | 特定のデータセンターを照会 |
dig @127.0.0.1 -p 8600 node1.node.consul | DNS を介してクエリノードを検索 |
キー・バリュー ストア
KV操作
| コマンド | 説明 |
|---|
consul kv put config/database/url "postgresql://..." | キーバリューを保存 |
consul kv get config/database/url | 値を取得する |
consul kv get -recurse config/ | プレフィックス下のすべてのキーを取得 |
consul kv delete config/database/url | デリートキー |
consul kv delete -recurse config/ | プレフィックス配下のすべてのキーを削除 |
KV高度な操作
| コマンド | 説明 |
|---|
consul kv put -cas -modify-index=123 config/app/version "2.0" | 条件付き更新 |
consul kv get -detailed config/app/version | メタデータを取得する |
consul kv export config/ | キーをエクスポート |
consul kv import @backup.json | キーをインポート |
ヘルスチェック
ヘルスチェック管理
| コマンド | 説明 |
|---|
consul health checks | すべての健康診断を一覧表示 |
consul health checks web | サービスのチェックリスト |
consul health state critical | 重要なチェックリスト |
consul health state passing | 合格したチェックのリスト |
アクセス制御リスト(ACL)
ACL管理
| コマンド | 説明 |
|---|
consul acl bootstrap | Bootstrap ACLシステム |
consul acl token create -description="Web service token" | トークンを作成 |
consul acl token list | トークンをリスト |
consul acl token delete TOKEN_ID | トークンを削除 |
ACLポリシー
| コマンド | 説明 |
|---|
consul acl policy create -name web-policy -rules @policy.hcl | ポリシーを作成 |
consul acl policy list | ポリシーの一覧 |
consul acl policy read web-policy | ポリシーを読む |
consul acl policy update -id POLICY_ID -rules @new-policy.hcl | ポリシーの更新 |
Connect(サービスメッシュ)
Connect設定
| コマンド | 説明 |
|---|
consul connect ca get-config | CA設定の取得 |
consul connect ca set-config -config-file ca.json | CAの設定を構成する |
consul connect proxy -service web | Start Connect プロキシ |
インテンション
| コマンド | 説明 |
|---|
consul intention create web db | Webがdbに接続することを許可する |
consul intention create -deny web cache | Webのキャッシュを拒否 |
consul intention list | すべての意図をリスト化する |
consul intention delete web db | 削除の意図 |
設定エントリ
サービス設定
| コマンド | 説明 |
|---|
consul config write service-defaults.hcl | サービスのデフォルトを書く |
consul config write proxy-defaults.hcl | プロキシのデフォルトを書く |
consul config list -kind service-defaults | リスト設定 |
consul config read -kind service-defaults -name web | 設定を読み取る |
consul config delete -kind service-defaults -name web | 設定を削除 |
スナップショットとバックアップ
スナップショット操作
| コマンド | 説明 |
|---|
consul snapshot save backup.snap | スナップショットを作成 |
consul snapshot restore backup.snap | スナップショットを復元 |
consul snapshot inspect backup.snap | スナップショットを検査 |
モニタリングとデバッグ
モニタリングコマンド
| コマンド | 説明 |
|---|
consul monitor | ストリームログ |
consul monitor -log-level=DEBUG | デバッグレベルのログ |
consul debug | デバッグ情報を収集 |
consul operator raft list-peers | Raftピアをリスト |
パフォーマンス
| コマンド | 説明 |
|---|
consul operator autopilot get-config | autopilot設定を取得 |
consul operator autopilot set-config -cleanup-dead-servers=true | オートパイロット設定を構成 |
設定例
サーバー設定
datacenter = "dc1"
data_dir = "/opt/consul"
log_level = "INFO"
node_name = "consul-server-1"
server = true
bootstrap_expect = 3
retry_join = ["10.0.1.10", "10.0.1.11"]
bind_addr = "10.0.1.10"
client_addr = "0.0.0.0"
ui_config \\\\{
enabled = true
\\\\}
connect \\\\{
enabled = true
\\\\}
acl = \\\\{
enabled = true
default_policy = "deny"
enable_token_persistence = true
\\\\}
クライアント設定```hcl
datacenter = “dc1”
data_dir = “/opt/consul”
log_level = “INFO”
node_name = “consul-client-1”
retry_join = [“10.0.1.10”, “10.0.1.11”, “10.0.1.12”]
bind_addr = “10.0.1.20”
client_addr = “127.0.0.1”
services \\{
name = “web”
port = 80
tags = [“production”, “v1.0”]
check \\{
http = “http://localhost:80/health”
interval = ”10s”
\\}
\\}
### サービス定義
```json
\\\\{
"service": \\\\{
"name": "web",
"port": 80,
"tags": ["production"],
"check": \\\\{
"http": "http://localhost:80/health",
"interval": "10s"
\\\\},
"connect": \\\\{
"sidecar_service": \\\\{\\\\}
\\\\}
\\\\}
\\\\}
ACLポリシー
node_prefix "" \\\\{
policy = "read"
\\\\}
service_prefix "" \\\\{
policy = "read"
\\\\}
service "web" \\\\{
policy = "write"
\\\\}
key_prefix "config/web/" \\\\{
policy = "write"
\\\\}
session_prefix "" \\\\{
policy = "read"
\\\\}
サービスメッシュ設定
プロキシデフォルト
Kind = "proxy-defaults"
Name = "global"
Config \\\\{
protocol = "http"
\\\\}
MeshGateway \\\\{
Mode = "local"
\\\\}
サービスデフォルト
Kind = "service-defaults"
Name = "web"
Protocol = "http"
MeshGateway \\\\{
Mode = "local"
\\\\}
Expose \\\\{
Checks = true
Paths = [
\\\\{
Path = "/health"
LocalPathPort = 8080
ListenerPort = 21500
\\\\}
]
\\\\}
マルチデータセンター設定
WANフェデレーション
| コマンド | 説明 |
|---|
consul join -wan 192.168.2.10 | WANに参加 |
consul members -wan | WANメンバーのリスト |
consul catalog datacenters | データセンターをリスト |
クロスDCクエリ
| コマンド | 説明 |
|---|
consul catalog service web -datacenter dc2 | DC2 におけるクエリサービス |
dig @127.0.0.1 -p 8600 web.service.dc2.consul | DC2へのDNSクエリ |
トラブルシューティング
一般的な問題
| コマンド | 説明 |
|---|
consul operator raft list-peers | Raftクラスターの状態を確認 |
consul debug -duration=30s | デバッグ情報を収集 |
consul validate /etc/consul.d | 設定を検証 |
consul members -detailed | メンバーの詳細情報 |
ログ分析
| コマンド | 説明 |
|---|
consul monitor -log-level=TRACE | トレースレベルのロギング |
journalctl -u consul -f | systemdログを追跡する |
ベストプラクティス
セキュリティ