サービスメッシュ

サービスメッシュ さーびすめっしゅ

マイクロサービスサイドカープロキシIstioEnvoy可観測性トラフィック管理
サービスメッシュについて教えて

簡単に言うとこんな感じ!

たくさんの小さなプログラム(マイクロサービス)がお互いに通信するとき、その通信を一括で管理・監視してくれる「専任の交通整理係」だよ! 各プログラムの横にこっそり専属スタッフを置いて、通信の安全・速度・記録をぜんぶ代わりにやってくれるイメージなんだ!


サービスメッシュとは

サービスメッシュとは、マイクロサービスアーキテクチャ(システムを多数の小さな独立したサービスに分割する設計手法)において、サービス間の通信を一元的に管理するためのインフラストラクチャレイヤー(基盤層)のことです。各サービスが直接通信を管理する代わりに、サービスメッシュがその通信のルーティング・セキュリティ・監視をすべて引き受けます。

システムが数十〜数百のマイクロサービスで構成されるようになると、「どのサービスがどのサービスと通信しているか」「通信が失敗したときにどうリトライするか」「通信を暗号化しているか」といった課題が一気に複雑になります。サービスメッシュはこの複雑さをアプリケーションコードから切り離し、インフラ側で一括管理することで、開発者がビジネスロジックに集中できるようにします。

実務的には、Istio(イスティオ)やLinkerd(リンカード)などのOSSが代表的な実装として使われており、クラウドネイティブな大規模システムを運用する企業で採用が広がっています。


サービスメッシュの仕組み

サービスメッシュは大きく「データプレーン」と「コントロールプレーン」の2層構造で成り立っています。

コンポーネント役割
データプレーン実際の通信を処理するプロキシEnvoy, Linkerd-proxy
コントロールプレーンプロキシ全体を設定・管理する司令塔Istiod, Linkerd Control Plane

サイドカーパターンとは

データプレーンの核心がサイドカープロキシです。各サービスのコンテナの”隣”に、軽量なプロキシコンテナを自動的に注入(インジェクト)し、すべての通信をそのプロキシ経由でやり取りさせます。バイクのサイドカー(横に付いた補助席)のように、本体に手を加えず機能を追加するイメージです。

┌─────────────────────────────────────────┐
│ Pod(サービスAの実行単位)               │
│  ┌──────────────┐  ┌────────────────┐  │
│  │  サービスA   │  │ サイドカー      │  │
│  │  (本体)    │◄─►│ プロキシ       │  │
│  └──────────────┘  │ (Envoy等)      │  │
│                     └────────────────┘  │
└─────────────────────────────────────────┘

                         │ 設定・ポリシー配信

              ┌──────────────────────┐
              │  コントロールプレーン  │
              │   (Istiod 等)        │
              └──────────────────────┘

サービスメッシュが提供する主な機能

機能カテゴリ具体的な内容
トラフィック管理カナリアリリース(新バージョンへ少しずつ流量を移す)、リトライ、タイムアウト
セキュリティmTLS(相互TLS認証)による通信の自動暗号化、認可ポリシー
可観測性通信のメトリクス・ログ・分散トレーシングの自動収集
サービスディスカバリサービスの場所を動的に発見し、ルーティングを自動調整

歴史と背景

  • 2010年代前半:Netflixが大規模マイクロサービス移行を進め、サービス間通信の複雑さが業界共通の課題として認識される
  • 2016年:Lyft(米配車サービス)がEnvoyプロキシをOSSとして公開。高性能なL7プロキシの基盤が整う
  • 2017年:Google・IBM・Lyfが共同でIstioをOSSとして発表。サービスメッシュという概念が広く知られるようになる
  • 2018年:BuoyantがLinkerd 2.0を公開。よりシンプルな設計で採用しやすい選択肢が増える
  • 2018年:CNCFがEnvoyを卒業プロジェクト(成熟プロジェクト)として認定
  • 2020年以降Kubernetes(コンテナ管理基盤)の普及とともにサービスメッシュの採用が加速。クラウド3社(AWS App Mesh、Google Cloud Service Mesh、Azure Service Mesh)がマネージドサービスを提供開始
  • 2022年:次世代アーキテクチャとしてsidecar-lessモデル(Istio Ambient Meshなど)が登場し、プロキシの挿入コストを削減する方向へ進化

代表的な実装の比較

主要なサービスメッシュ実装を比較してみましょう。

製品開発元特徴難易度
IstioGoogle / IBM機能が豊富、大規模向け高め
LinkerdBuoyant軽量・シンプル、学習コスト低低〜中
Consul ConnectHashiCorpマルチクラウド対応が強み
AWS App MeshAWSAWSサービスとの連携が容易低(AWSに限定)
KumaKongマルチクラスター対応

サービスメッシュとAPIゲートウェイの違い

混同しやすいAPIゲートウェイとの違いを整理します。

サービスメッシュ vs APIゲートウェイ APIゲートウェイ 外部 → 内部への「入口」管理 対象: 外部クライアント↔サービス 認証・レート制限・SSL終端 例: Amazon API Gateway, Kong 「北から南」方向のトラフィック サービスメッシュ 内部サービス間の通信を管理 対象: サービス↔サービス mTLS・リトライ・可観測性 例: Istio, Linkerd, Envoy 「東から西」方向のトラフィック ※ 両者は補完関係にあり、多くの場合は併用される

関連する規格・RFC

規格・RFC番号内容
RFC 8446TLS 1.3mTLSの基盤となるトランスポート層セキュリティ)
RFC 7540HTTP/2(Envoy等がサービス間通信に使用するプロトコル)
RFC 9114HTTP/3(次世代サービス間通信プロトコルとして採用が進む)

関連用語

  • マイクロサービス — システムを小さな独立したサービス群に分割する設計アーキテクチャ
  • Kubernetes — コンテナの管理・自動化を担うオーケストレーションプラットフォーム
  • コンテナ — アプリケーションとその実行環境をまとめてパッケージ化する技術
  • APIゲートウェイ — 外部からのAPIリクエストを受け付け、内部サービスへルーティングする入口
  • mTLS(相互TLS) — クライアントとサーバー双方が証明書で認証し合う暗号化通信方式
  • 可観測性(オブザーバビリティ) — システムの内部状態をメトリクス・ログ・トレースで把握する概念
  • カナリアリリース — 新バージョンを少数ユーザーに先行公開してリスクを抑えるデプロイ手法
  • DevOps — 開発と運用を統合し、継続的デリバリーを実現するための文化・プラクティス