サービスメッシュ

サービス間通信を管理するインフラ層

サービスメッシュは、マイクロサービス間の通信を制御・観測する専用のインフラ層。サイドカープロキシパターンで、アプリケーションコードを変更せずに通信機能を追加。

サイドカーパターン

従来のマイクロサービス

Service A
ビジネスロジック
通信ロジック
リトライ/CB
認証/認可
通信機能がアプリに埋め込まれる

サービスメッシュ

Service A
ビジネスロジック
Proxy
通信
mTLS
Retry
通信機能をサイドカーに分離

サービスメッシュアーキテクチャ

Control Plane
設定管理
証明書発行
サービスディスカバリ
ポリシー配布
↓ 設定・証明書 ↓
Data Plane
App
Proxy
App
Proxy
App
Proxy
Proxy同士が通信(mTLS暗号化)

主な機能

トラフィック管理

  • • ロードバランシング(Round Robin, Least Conn)
  • • リトライ、タイムアウト
  • • Circuit Breaker
  • • カナリアリリース、A/Bテスト

セキュリティ

  • • mTLS(相互TLS認証)
  • • 自動証明書ローテーション
  • • サービス間認可ポリシー
  • • トラフィック暗号化

可観測性

  • • 分散トレーシング自動生成
  • • メトリクス収集(RED metrics)
  • • アクセスログ
  • • サービス依存関係の可視化

信頼性

  • • ヘルスチェック
  • • フェイルオーバー
  • • レート制限
  • • Fault Injection(テスト用)

mTLS(相互TLS認証)

Service A
証明書A
← 証明書交換 →
🔒 暗号化通信
← 相互認証 →
Service B
証明書B
通常のTLS

サーバーのみ認証(クライアント→サーバー)

mTLS

双方が認証(クライアント⇔サーバー)

トラフィック制御

カナリアリリース

Traffic
100%
Mesh Proxy
Weight Based
90%
v1.0 (stable)
10%
v1.1 (canary)
ユースケース: 新バージョンを少数ユーザーにテスト → 問題なければ徐々に増加

主な実装

Istio

  • Proxy: Envoy
  • 特徴: 機能が豊富、業界標準
  • 複雑性: 高(学習コスト大)
  • リソース: やや重い
  • 採用例: Google, eBay, Salesforce

Linkerd

  • Proxy: linkerd2-proxy (Rust製)
  • 特徴: 軽量、シンプル、CNCF graduated
  • 複雑性: 低(すぐ始められる)
  • リソース: 非常に軽量
  • 採用例: Microsoft, HP, Nordstrom

Consul Connect

  • Proxy: Envoy or built-in
  • 特徴: HashiCorp製、マルチプラットフォーム
  • 複雑性: 中程度
  • リソース: 中程度
  • 採用例: AWS上でConsul利用者向け

AWS App Mesh

  • Proxy: Envoy
  • 特徴: AWSマネージド、ECS/EKS統合
  • 複雑性: 低(AWSユーザー向け)
  • リソース: マネージド
  • 採用例: AWSネイティブアプリ

Envoy Proxy

多くのサービスメッシュで使われるデータプレーンプロキシ。 Lyft開発、CNCF graduated。C++製で高性能。

主な機能

L4/L7 Proxy

TCP, HTTP/1.1, HTTP/2, gRPC

Service Discovery

DNS, EDS, 動的設定

Load Balancing

Round Robin, Least Request, Ring Hash

Observability

Stats, Tracing, Logging

Resilience

Retry, Timeout, Circuit Breaker

Security

TLS termination, mTLS

サービスメッシュを導入すべきか

導入を検討すべき場合

  • • サービス数が多い(10以上)
  • • 複数チームがサービスを開発
  • • セキュリティ要件が厳しい(mTLS必須)
  • • 高度なトラフィック制御が必要
  • • 統一的な可観測性が必要

導入を見送るべき場合

  • • サービス数が少ない(5未満)
  • • 運用能力・学習リソースが不足
  • • レイテンシ要件が非常に厳しい
  • • 既存のインフラで十分
  • • Kubernetesを使っていない

段階的導入: 全サービスに一度に導入せず、 重要なサービスから段階的に適用し、運用ノウハウを蓄積する。

SRE/インフラ観点

リソースオーバーヘッド

  • • 各Podにサイドカーが追加(CPU/メモリ消費)
  • • Istio: ~100MB/proxy、Linkerd: ~10-20MB/proxy
  • • Control Planeもリソースが必要

レイテンシ影響

  • • プロキシ経由で+1-5ms程度の遅延
  • • 内部通信が多いとチェーンで増加
  • • Linkerdの方がIstioより低レイテンシ

監視項目

  • • サイドカーのCPU/メモリ使用量
  • • プロキシのリクエスト成功率/レイテンシ
  • • 証明書の有効期限
  • • Control Planeの健全性