コンテンツにスキップ

Consul

サービス検出、設定管理、サービスメッシュのための包括的な HashiCorp Consul コマンドとワークフロー。

インストールとセットアップ

コマンド説明
consul versionConsul のバージョンを表示
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 node1Nodeヘルスステータス

DNSインターフェース

コマンド説明
dig @127.0.0.1 -p 8600 web.service.consulDNS を介してクエリサービスを実行
dig @127.0.0.1 -p 8600 web.service.dc1.consul特定のデータセンターを照会
dig @127.0.0.1 -p 8600 node1.node.consulDNS を介してクエリノードを検索

キー・バリュー ストア

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 bootstrapBootstrap 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-configCA設定の取得
consul connect ca set-config -config-file ca.jsonCAの設定を構成する
consul connect proxy -service webStart Connect プロキシ

インテンション

コマンド説明
consul intention create web dbWebがdbに接続することを許可する
consul intention create -deny web cacheWebのキャッシュを拒否
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-peersRaftピアをリスト

パフォーマンス

コマンド説明
consul operator autopilot get-configautopilot設定を取得
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.10WANに参加
consul members -wanWANメンバーのリスト
consul catalog datacentersデータセンターをリスト

クロスDCクエリ

コマンド説明
consul catalog service web -datacenter dc2DC2 におけるクエリサービス
dig @127.0.0.1 -p 8600 web.service.dc2.consulDC2へのDNSクエリ

トラブルシューティング

一般的な問題

コマンド説明
consul operator raft list-peersRaftクラスターの状態を確認
consul debug -duration=30sデバッグ情報を収集
consul validate /etc/consul.d設定を検証
consul members -detailedメンバーの詳細情報

ログ分析

コマンド説明
consul monitor -log-level=TRACEトレースレベルのロギング
journalctl -u consul -fsystemdログを追跡する

ベストプラクティス

セキュリティ