アンビエントメッシュ(サイドカーレスサービスメッシュ)
ポッド数×Envoyでメモリと再起動コストが膨らむサイドカー方式に代え、L4はノード共有のztunnel、L7が要る通信だけwaypointへ——負荷とコストを引き離す設計を原理から読み解きます。
- 1.アンビエントメッシュはデータプレーンをztunnel(ノード単位、L4のmTLS/認可)とwaypoint(必要な場合のみ、L7のリトライ/ルーティング)に分離し、ポッドにサイドカーを注入しない。
- 2.ポッド追加は既存ztunnelへの登録で済むため、サイドカー方式のようにポッド数に比例してプロキシプロセスとメモリが増えない。再起動やインジェクション漏れの運用コストも消える。
- 3.代償はホップの増加とL7機能の段階的適用。mTLSはztunnel区間、L7制御はwaypoint経由でのみ効くため、どの通信にwaypointが要るかの設計判断が新たに生じる。
サイドカー方式が抱える「N倍」の問題
サービスメッシュ(/devops/service-mesh-sidecar-internals/)は本来、通信の暗号化・再試行・可視化をアプリから引き剥がすための仕組みでした。従来方式はこれを 各ポッドに Envoy サイドカーを注入する ことで実現します。ポッド数が N なら Envoy プロセスも N 個立ち上がり、各々がメモリ・CPU・起動時間を消費します。
この設計には構造的な欠点があります。プロキシのメモリはワークロード本体の通信量ではなく ポッド数 に比例して増える。ポッドがスケールアウトするたびにサイドカーも複製され、クラスタ全体では「アプリのメモリ + サイドカーのメモリ×N」が積み上がります。さらに init コンテナによるインジェクションはポッド起動順序に依存し、サイドカーの起動・再起動はアプリのライフサイクルに縛られます(sidecar なしでポッドが立ち上がってしまう競合や、メッシュ設定変更のたびに全ポッド分のサイドカーへ配信が要る運用コストも同根です)。
アンビエントメッシュは、この「1ポッド=1プロキシ」という前提そのものを外します。
ztunnel と waypoint:2層のデータプレーン分離
アンビエントメッシュの核心は、サイドカー方式が1つのEnvoyへ集約していた仕事を L4 と L7 で別プロセス・別スケール単位に分ける ことです。
| コンポーネント | 配置単位 | 担う層 | 処理内容 |
|---|---|---|---|
| ztunnel | ノードごとに1つ(DaemonSet) | L4 | mTLS 確立・SPIFFE ID による認証・L4 レベルの認可 |
| waypoint | 必要なワークロード/名前空間ごとに1つ | L7 | リトライ・タイムアウト・重み付きルーティング・HTTP認可 |
ztunnel はノードあたり1つだけ動く軽量プロキシで、同一ノード上の全ポッドの L4 通信を代行します。ポッドが増えても新しい ztunnel は立たず、既存の ztunnel に登録が増えるだけです。ztunnel は Rust で実装され、HTTP パースや L7 のポリシー評価を持たない分だけ薄く、mTLS のハンドシェイクと SPIFFE ID の検証に処理を絞っています。
waypoint はサイドカー方式の Envoy に相当する仕事——L7 のリトライ・タイムアウト・ヘッダベースルーティング・きめ細かい認可——を担いますが、全ポッドに刺さるのではなく、L7 制御が必要な名前空間やサービスアカウント単位でのみ配置 されます。L7 の機能を使わない通信はwaypointを経由せず、ztunnel止まりで完結します。
[サイドカー方式]
Pod-A(App+Envoy) → Pod-B(App+Envoy) ※ Envoy はポッド数と同数
[アンビエントメッシュ]
Pod-A(App) → ztunnel(Node-A) → ztunnel(Node-B) → Pod-B(App) ※ L4のみで完結する場合
Pod-A(App) → ztunnel(Node-A) → waypoint(必要な場合のみ) → ztunnel(Node-B) → Pod-B(App)
サイドカー方式は全通信を一律にL7対応のEnvoyへ通します。アンビエントメッシュはL4(mTLSと基本認可)を常時の最小コストで全通信に適用し、L7制御はそれを必要とするワークロードにだけ追加コストとして乗せます。コストの単位が「ポッド数」から「L7機能を使う経路の数」に変わる、という点が最大の設計転換です。
トラフィック傍受の変化:ポッド単位からノード単位へ
サイドカー方式は iptables や eBPF でポッド内のトラフィックを同一ポッドのサイドカーへ迂回させていました(/devops/service-mesh-sidecar-internals/、/devops/cni-pod-networking/)。アンビエントメッシュでは迂回先がポッド内ではなく ノード上の ztunnel になるため、傍受の実装も変わります。多くの実装は各ポッドのネットワーク名前空間に軽量な転送ルールを敷き、送信パケットをノードの ztunnel(HBONE と呼ばれる mTLS トンネルプロトコルを使うことが多い実装もあります)へ送る形を取ります。ここでも狙いは変わらず「アプリのコードもソケット先も変えずに経路を曲げる」ことですが、曲げた先がポッドごとの専用プロセスではなくノード共有プロセスである 点が構造上の違いです。
サイドカー方式との対比で見るトレードオフ
| 観点 | サイドカー方式 | アンビエントメッシュ |
|---|---|---|
| プロキシ数 | ポッド数に比例(N個) | ノード数+L7が要る箇所のみ |
| メモリ/CPU増分 | ポッド追加ごとに新規Envoy分が加算 | ztunnelへの登録増のみ、waypoint未使用経路はゼロ増分 |
| ポッド起動への影響 | initコンテナ注入の順序・失敗に依存 | アプリ起動はメッシュ側の注入待ちに縛られない |
| L7機能の到達範囲 | 常に全通信で利用可能 | waypointを経由する通信のみ |
| ホップ数 | 送受信ポッドの2つのサイドカー | L4のみ2ホップ、L7利用時はさらにwaypoint経由が加算 |
新たに生じるコストが 段階的なホップ増 です。L4 だけなら送信元ノードの ztunnel と宛先ノードの ztunnel の2ホップで済みますが、L7 制御が必要な経路は waypoint を経由する分、経路が伸びます。全通信を一律に1〜2ホップで扱っていたサイドカー方式に比べ、アンビエントメッシュは 通信ごとにホップ数が変わる非対称な経路 になります。運用者は「どのサービスにL7ポリシーが要るか」を明示的に切り分け、waypointの配置範囲を設計する判断を新たに引き受けることになります。
ztunnel は HTTP ステータスやヘッダを解釈しません。したがって /devops/circuit-breaker-bulkhead/ で扱うような応答コードベースのサーキットブレーカや、/devops/retry-backoff-jitter/ のような条件付きリトライは、waypoint を経由しない通信には効きません。「メッシュを入れたのにL7ポリシーが効かない」という事故は、対象の通信がwaypointを通っていないことが原因である場合が典型です。
まとめ
- サイドカー方式は「1ポッド=1Envoy」でL4/L7を一括処理するためポッド数に比例してリソースが増える。アンビエントメッシュは ztunnel(ノード共有・L4)と waypoint(必要箇所のみ・L7) に分離し、コストの単位をポッド数から「L4は常時最小」「L7は使用箇所のみ」へ変える。
- トラフィック傍受はポッド内サイドカーではなくノード上のztunnelへ向かうよう変わるが、「アプリ無改変で経路を曲げる」という原理自体はサイドカー方式と共通。
- 引き換えに、L7制御はwaypointを経由する通信にしか効かないという 適用範囲の非対称性 が生まれ、どこにwaypointを置くかという新しい設計判断が必要になる。/devops/service-mesh-sidecar-internals/ のmTLS/L7制御の原理はztunnel/waypoint双方の内部でも共通して働いている。
DevOps/インフラ Article
アンビエントメッシュ(サイドカーレスサービスメッシュ)を実務で読む
TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。
解決すること
サービスメッシュ
比較で見る軸
難易度: advanced / カテゴリ: DevOps/インフラ / タグ数: 6
導入後に効く点
ポッド追加は既存ztunnelへの登録で済むため、サイドカー方式のようにポッド数に比例してプロキシプロセスとメモリが増えない。再起動やインジェクション漏れの運用コストも消える。
先に潰すリスク
用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。
- 難易度
- advanced
- カテゴリ
- DevOps/インフラ
- タグ数
- 6
判断チェックリスト
- 自社の用途が「サービスメッシュ / Istio」に近いか確認する。
- 強みである「アンビエントメッシュはデータプレーンをztunnel(ノード単位、L4のmTLS/認可)とwaypoint(必要な場合のみ、L7のリトライ/ルーティング)に分離し、ポッドにサイドカーを注入しない。」が本当に評価軸になるか確認する。
- 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
- 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
- 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。