Sidecarless Service Mesh on Windows と Istio Ambient モードの実現

はじめに

Istio が Windows でのサポートを正式に開始するにあたり、サービスマッシュの新たな可能性が広がっています。従來の Sidecar アーキテクチャの複雑さを解消し、Windows 環境でのサービスマッシュ統合を実現するため、Istio は Ambient モードを採用しています。この記事では、Istio が Windows で Sidecarless なサービスマッシュを実現する技術的背景、実裝方法、および課題について詳しく解説します。

技術的背景と目的

Istio は 2024 年 5 月に 1.12 バージョンで Windows へのサポートを開始し、6 月に 1.13 バージョンで一般利用を開始します。Windows は企業環境で広く利用されており、Windows コンテナとサービスマッシュの統合が求められています。この実裝は、従來の Envoy Sidecar の複雑さを迴避し、移行コストを削減することを目的としています。

Istio は Ambient モードを採用し、Layer 4 と Layer 7 の分離により、Sidecarless アーキテクチャを実現しています。これにより、Windows 獨自のネットワークアーキテクチャ(Host Network Service、HNS API)を活用し、サービスマッシュの柔軟性と効率性を向上させます。

技術的実裝と課題

Windows コンテナネットワークアーキテクチャ

Windows コンテナは「サービス」を基本単位としており、Linux のファイルシステム抽象とは異なります。以下が主要なコンポーネントです:

  • Host Compute System (HCS):コンテナの起動と Hyper-V バーチャルマシンの管理を擔當し、JSON API を通じて操作が可能です。
  • Host Network Service (HNS):コンテナネットワーク設定を管理し、Linux の Network Namespace に相當する「Network Compartment」を提供します。
  • HNS Diag ツール:コンテナネットワークの狀態を確認するためのツールで、Compartment ID や IP アドレスなどの情報を提供します。

Ambient モードの実裝

Ambient モードでは、Layer 4 と Layer 7 の役割を分離して実裝します:

  • Layer 4 (Zunnel):Rust で構築された軽量プロキシで、TLS 暗號化やネットワークセキュリティを擔當します。Windows 本機で実行可能で、Sidecar が不要です。
  • Layer 7 (Envoy):従來の機能を維持しますが、アプリケーションと同居する必要がなくなりました。

Windows 獨自の API を活用した代替ソリューションも導入されています:

  • Named Pipes:Linux の Unix Domain Sockets に代わる IPC(プロセス間通信)手段。
  • WFP (Windows Filtering Platform):Linux の iptables に相當するネットワークトラフィック制御機能。
  • Second Compartment ID:API を通じてネットワークコンテキストの切り替えを行い、コンテナ間のトラフィック管理を実現します。

技術的課題と解決策

  • Envoy の移植困難性:Envoy は Layer 7 プロキシであり、大量の SIS(System Interface)呼び出しを必要とします。Windows への移植は実用性に欠けるため、代替手段が求められます。
  • Windows ネットワーク隔離:HNS API を利用して Network Compartment を管理し、コンテナ間のネットワーク隔離とトラフィック制御を実現します。
  • 実験的機能の位置付け:Windows でのサポートは現時點では実験的であり、ユーザーからのフィードバックをもとに正式版への進化が検討されています。

実験環境と検証

実験環境の構成

  • Kubernetes クラスター:2 つの Ubuntu ノードと 1 つの Windows Server 2022 ノードを含みます。
  • 部署サービス:
    • Linux コンテナ:curlhttpbin サービス。
    • Windows コンテナ:PowerShell スクリプトで実裝された Web サーバー。

Ambient モードの操作手順

  1. 名前空間のラベル設定data-plane-mode: ambient を設定し、すべての Pod をサービスマッシュに自動的に追加します。
  2. トラフィック管理
    • Gateway API を使用して Waypoint Proxy を設定し、Linux と Windows サービス間のトラフィックを 50% 分割します。
    • use-waypoint ラベルを設定し、トラフィックルーティング戦略を指定します。
  3. 検証結果
    • Windows サーバーと Linux サービス間のトラフィックが正常に通信し、Sidecar の再起動や設定問題が発生しませんでした。
    • Zunnel のログにより、トラフィックが Ambient モードで処理されていることが確認されました。

限界と今後の方向性

  • 現在の実験的機能として、境界ケースの処理が不完全な點があります。
  • 今後は他のプラットフォーム(macOS など)やプロトコルへの拡張が検討され、Windows のネットワーク統合能力がさらに向上する予定です。

結論

Istio が Windows で Ambient モードを採用し、Sidecarless アーキテクチャを実現することで、従來の Sidecar の複雑さを解消し、サービスマッシュの導入を容易にしています。Windows のネットワークアーキテクチャ(HNS API、Network Compartment)の違いは技術的な課題となりましたが、API 代替ソリューションを活用することで機能の同等性を確保しています。実験的サポートは企業が段階的に検証・移行を行うための重要なステップであり、今後のユーザーからのフィードバックに応じて正式版への進化が期待されます。