🍔

【入門】Istioをざっくりと理解する

に公開

マイクロサービスの課題

近年マイクロサービス化が進み、様々なサービスを連携させてユーザーに機能を提供している。

その際に以下の課題が挙げられる。

  • 通信制御の複雑さ:サービス間のやり取りを効率よく制御するのが難しい
  • セキュリティ対策:サービス間の認証・認可や暗号化など
  • 可観測性の不足:通信の記録や動作状況を一元的に把握できず、原因調査が困難

サービスメッシュ

サービスメッシュは、こうした課題をアプリケーションではなく専用のインフラ層でまとめて解決を行う。

  • サービス間通信を一元的に制御
  • 認証や暗号化などのセキュリティ機能を共通化
  • ログやメトリクス収集など可観測性を向上

アプリ側は業務ロジックに集中でき、通信やセキュリティの実装を個別に行う必要がなくなる。

Istio

代表的なサービスメッシュの一つで、Envoyプロキシを使ってマイクロサービス間通信を管理。
主な特徴は以下の通り。

  • 高度なトラフィック制御
  • mTLSによる安全な通信
  • 詳細なモニタリングやトレーシング機能
  • Kubernetesとの高い親和性

Istioのアーキテクチャ

現在のIstioのアーキテクチャは以下のようになっている。

データプレーン(Data Plane)とは

Data PlaneにはSidecarモデルとSidecarlessモデルの2つが開発されている。

Sidecar - istio proxy

現在最も利用されているのがSidecarモデル。

SidecarモデルのData PlaneにはEnvoyが利用されている。
Envoyとは、C++で開発された高性能なオープンソースのプロキシ(通信仲介ソフトウェア)
 
以下の特徴を持つ。
サービス間通信の仲介:リクエストを受け取り、適切なサービスへ転送
トラフィック制御:ロードバランシング、リトライ、タイムアウトなどを実現
セキュリティ機能:mTLSによる暗号化や認証をサポート
可観測性:ログ、メトリクス、分散トレーシングを提供

 
IstioはこのEnvoyを拡張したistio-proxyを利用している。
istio-proxyはSidecarコンテナとしてデプロイし、同じPod内のサービスコンテナと並行して動作させる。
また、このistio-proxyはサービスメッシュ内の全てのサービスのInbound/Outboundのトラフィックを仲介する。

Sidecarless - Ambient Mesh

サイドカーを各Podを配置しない新しいアーキテクチャ
通信のセキュリティは、ノードごとに配置されるshared proxy(ztunnel)が担当
Pod自体はEnvoyを持たずに軽量化できる

特徴
導入が簡単:既存のPod定義を変更せずにメッシュに参加可能
軽量:Podごとにサイドカーを置かないため、リソース消費が減る
段階的な導入:サービス単位で機能を有効化できる
※ただし、サイドカーに比べるとまだ提供される機能に制限がある(高度なトラフィック制御など)

コントロールプレーン(Control Plane)

Control PlaneにはIstiodと呼ばれる単一のバイナリが利用されている。
Istiodは、Pilot・Citadel・Galleyの3つのコンポーネントから構成。

🔷 Pilot

役割:トラフィック制御の司令塔
Envoy(サイドカーやプロキシ)に対してルーティングルールやサービスディスカバリ情報を配布
つまり、「Envoyにどのサービスへどう通信させるか」を教える存在

🔷 Citadel

役割:セキュリティ(認証・証明書管理)
各サービスに証明書を発行し、mTLS(相互TLS通信)を実現する
サービス間の安全な通信を担保する基盤

🔷 Galley

役割:設定管理
ユーザーが書いたIstioの設定を検証し、正しい形式に変換して他コンポーネントに渡す
設定の翻訳者 + チェック係」みたいな存在

まとめ

  • Istio はマイクロサービス間通信を制御・管理するサービスメッシュ基盤。
  • セキュリティ・トラフィック制御・観測性をアプリに手を入れずに提供できる。
  • 主要コンポーネントは統合され、現在はistiodが中核を担っている。

Discussion