Istio・Envoy いすてぃお・えんぼい
サービスメッシュプロキシKubernetesトラフィック管理mTLSオブザーバビリティ
IstioとEnvoyって何が違うの?
簡単に言うとこんな感じ!
EnvoyはKubernetesの各サービス横に置く「優秀な交通整理員」で、Istioはその交通整理員たちに「このルールで動いてね」と指示を出す「司令塔」なんだ。二つ合わせてサービスメッシュのコンビを組んでいるよ!
Istio・Envoyとは
Envoyは、Lyftが2016年にOSS公開した高性能なL7プロキシです。サービスメッシュのデータプレーンとして各サービスのサイドカー(隣接コンテナ)として動作し、受信・送信の全通信をインターセプトします。HTTP/2・gRPC・TCPに対応し、タイムアウト・リトライ・サーキットブレーカー・ロードバランシングを組み込みで備えています。また、統計情報やトレース情報を自動で収集します。
Istioは、GoogleとIBMとLyftが2017年に共同でOSS公開したサービスメッシュのコントロールプレーンです。Kubernetesクラスター上で動作し、Envoyを自動でサイドカー注入したうえで、ポリシーや証明書・ルーティングルールをEnvoyに配布・管理します。管理者はVirtualServiceやDestinationRuleなどのKubernetesカスタムリソース(CRD)でトラフィックポリシーを宣言的に定義できます。
2022年にはIstiodと呼ばれる単一バイナリへの統合と、サイドカー不要のAmbient Meshモードが発表されました。Ambient Meshではノードレベルのプロキシ(ztunnel)で基本的なmTLSとルーティングを担い、L7ポリシーが必要なサービスにのみウェイポイントプロキシを追加する軽量な構成が可能です。
IstioとEnvoyの役割分担
| 項目 | Envoy | Istio |
|---|---|---|
| 役割 | データプレーン(通信の実行) | コントロールプレーン(設定の管理) |
| 動作場所 | 各サービスのサイドカー | Kubernetesクラスター内(Istiod Pod) |
| 担う機能 | 通信制御・暗号化・メトリクス収集 | ポリシー配布・証明書管理・サービスディスカバリ |
| 設定方法 | xDS APIでIstiodから動的受信 | YAMLのカスタムリソース(VirtualService等)で宣言 |
| 単独利用 | 可能(APIゲートウェイ等にも使われる) | Envoyなしでは機能しない |
歴史と背景
- 2016年:LyftがEnvoyをOSS公開。社内で数百のマイクロサービス間通信を管理するために開発された
- 2017年5月:IstioをGoogle・IBM・Lyftが共同発表。Envoyをデータプレーンに採用
- 2018年:EnvoyがCNCF(Cloud Native Computing Foundation)に寄贈、Graduated projectに昇格
- 2019年:IstioもCNCFへの寄贈が進み、大手クラウドベンダーが本格サポート
- 2022年:Istio 1.15でAmbient Meshをアルファ発表。サイドカー不要の新アーキテクチャへの移行が始まる
- 2023年:IstioがCNCF Graduated projectに正式昇格
Istioの主要リソース(Kubernetes CRD)
# VirtualService: トラフィックのルーティングルールを定義
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: reviews
spec:
hosts:
- reviews
http:
- match:
- headers:
end-user:
exact: "tester"
route:
- destination:
host: reviews
subset: v3 # テスター → v3(新バージョン)へ
- route:
- destination:
host: reviews
subset: v1 # 一般ユーザー → v1(安定版)へ
weight: 100
---
# DestinationRule: サブセット定義・ロードバランシング設定
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: reviews
spec:
host: reviews
subsets:
- name: v1
labels:
version: v1
- name: v3
labels:
version: v3
関連する規格・RFC
| 規格・RFC番号 | 内容 |
|---|---|
| xDS v3 API | Envoyがコントロールプレーンから設定を動的取得するためのAPI仕様 |
| SPIFFE | サービス間のアイデンティティ証明の標準仕様。Istioのmtlsに利用 |
| SMI(Service Mesh Interface) | KubernetesでのサービスメッシュAPIを標準化するCNCFプロジェクト |
関連用語
- サービスメッシュ — マイクロサービス間の通信を管理する専用インフラ層
- Kubernetes — IstioとEnvoyが動作するコンテナオーケストレーション基盤
- サーキットブレーカー — 障害の連鎖を止めるパターン。Envoyが組み込みで実装
- 分散トレーシング — サービス間通信の経路を可視化。EnvoyがJaeger等と連携して自動収集
- カナリアリリース — 一部トラフィックのみ新バージョンに流す手法。IstioのVirtualServiceで実現
- オブザーバビリティ — システム内部状態の可観測性。Istio/Envoyがメトリクス・トレースを自動提供
- BFF(Backend for Frontend) — クライアント種別ごとに専用バックエンドを置くパターン