クラウド・インフラ

Istio・Envoy いすてぃお・えんぼい

サービスメッシュプロキシKubernetesトラフィック管理mTLSオブザーバビリティ
IstioとEnvoyって何が違うの?

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

EnvoyKubernetesの各サービス横に置く「優秀な交通整理員」で、Istioはその交通整理員たちに「このルールで動いてね」と指示を出す「司令塔」なんだ。二つ合わせてサービスメッシュのコンビを組んでいるよ!


Istio・Envoyとは

Envoyは、Lyftが2016年にOSS公開した高性能なL7プロキシです。サービスメッシュのデータプレーンとして各サービスのサイドカー(隣接コンテナ)として動作し、受信・送信の全通信をインターセプトします。HTTP/2・gRPCTCPに対応し、タイムアウト・リトライ・サーキットブレーカー・ロードバランシングを組み込みで備えています。また、統計情報やトレース情報を自動で収集します。

Istioは、GoogleとIBMとLyftが2017年に共同でOSS公開したサービスメッシュのコントロールプレーンです。Kubernetesクラスター上で動作し、Envoyを自動でサイドカー注入したうえで、ポリシーや証明書・ルーティングルールをEnvoyに配布・管理します。管理者はVirtualServiceDestinationRuleなどのKubernetesカスタムリソース(CRD)でトラフィックポリシーを宣言的に定義できます。

2022年にはIstiodと呼ばれる単一バイナリへの統合と、サイドカー不要のAmbient Meshモードが発表されました。Ambient Meshではノードレベルのプロキシ(ztunnel)で基本的なmTLSとルーティングを担い、L7ポリシーが必要なサービスにのみウェイポイントプロキシを追加する軽量な構成が可能です。


IstioとEnvoyの役割分担

項目EnvoyIstio
役割データプレーン(通信の実行)コントロールプレーン(設定の管理)
動作場所各サービスのサイドカー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 APIEnvoyがコントロールプレーンから設定を動的取得するためのAPI仕様
SPIFFEサービス間のアイデンティティ証明の標準仕様。Istioのmtlsに利用
SMI(Service Mesh Interface)KubernetesでのサービスメッシュAPIを標準化するCNCFプロジェクト

関連用語