コンテンツにスキップ

リバースプロキシとSSL証明書

AegisMesh の全通信(Web UI、REST API、gRPCシグナリング)を外部ポート 443 のみに一本化するためのリバースプロキシ設定です。標準ではモダンで設定がシンプルな Caddy を推奨しています。


Caddyfile 設定例(推奨)

# ダッシュボード (Web UI)
app.aegismesh.example.com {
reverse_proxy dashboard:80
}
# 管理サーバー (REST API & gRPC Management)
api.aegismesh.example.com {
reverse_proxy management:33073 {
transport http {
versions h2c
}
}
}
# シグナルサーバー (gRPC Signal)
signal.aegismesh.example.com {
reverse_proxy signal:10000 {
transport http {
versions h2c
}
}
}
  • 自動SSL: Caddy が自動でドメインのLet’s Encrypt / ZeroSSL証明書を取得・更新(90日周期)するため、手動での証明書管理(certbot等)が不要です。
  • h2c (HTTP/2 Cleartext): gRPC通信をリバースプロキシとバックエンドコンテナ間で高速プロキシするために versions h2c を指定します。

コントロールプレーンのTLS証明書 (TLS Certificates for Control Plane)

AegisMesh のコントロールプレーン(Management および Signal サーバー)は、内部・外部通信の暗号化と認証のために TLS 証明書(tls.crt)および秘密鍵(tls.key)を使用します。

自動キーライフサイクル (Automatic Key Lifecycle)

AegisMesh の起動スクリプト(build-and-run.sh)は、証明書のライフサイクルを自動検知して制御します。

  • 初回起動時 (First Execution): build-and-run.sh は certs/tls.key および certs/tls.crt が存在しないことを検知すると、環境変数 $AEGISMESH_DOMAIN に適合した自己署名証明書(有効期間: 10年間 / 3,650日)を自動生成します。
  • 2回目以降の起動 (Subsequent Runs): 既存の証明書と秘密鍵を自動検知し、変更せずそのまま維持します。サーバー再起動をまたいでも鍵ペアや証明書のフィンガープリントが自動変更されないため、ユーザーのオンボーディング時やピア接続時における鍵不一致(Key Mismatch)エラーの発生を確実に防止します。
flowchart TD
    Start["build-and-run.sh 実行"] --> Check{"certs/tls.key & tls.crt が<br/>存在するか?"}
    Check -- "No (初回起動)" --> Gen["自己署名証明書を自動生成<br/>(有効期間: 10年 / $AEGISMESH_DOMAIN)"]
    Check -- "Yes (2回目以降)" --> Keep["既存の証明書・秘密鍵をそのまま保持<br/>(フィンガープリント不変で接続エラー防止)"]
    Gen --> Launch["コントロールプレーン起動"]
    Keep --> Launch

手動証明書生成手順 (Manual Certificate Generation)

初回起動前に事前に証明書を手動生成したい場合や、カスタムSAN(Subject Alternative Name)を指定したい場合は、以下の openssl コマンドを実行します。

Terminal window
# 証明書格納ディレクトリの作成
mkdir -p infrastructure_files/certs
# 4096bit RSA秘密鍵と自己署名証明書の生成 (有効期間10年)
openssl req -x509 -newkey rsa:4096 \
-keyout infrastructure_files/certs/tls.key \
-out infrastructure_files/certs/tls.crt \
-sha256 -days 3650 -nodes \
-subj "/CN=aegismesh.local" \
-addext "subjectAltName = DNS:localhost,DNS:aegismesh.local,DNS:management"
# 秘密鍵のパーミッション設定
chmod 644 infrastructure_files/certs/tls.key

本番環境での運用ガイドライン (Production Deployment Guidance)

商用本番環境(Production)においては、自己署名証明書ではなく、信頼された認証局(CA)が発行した正式な証明書の使用を推奨します。

  • Let’s Encrypt / ACME: パブリックドメインで運用する場合は、Certbot や Caddy 等で自動取得した公式証明書と秘密鍵をそれぞれ tls.crt および tls.key として配置してください。
  • 企業内認証局 (Enterprise CA / プライベートPKI): 社内ルートCA配下で発行されたサーバー証明書(中間証明書を含むフルチェーン)を tls.crt に、対応する秘密鍵を tls.key に配置してください。