代理、閘道とサービスマッシュ:なぜ用語が混亂するのか?

はじめに

現代のクラウドネイティブアーキテクチャでは、プロキシ、ゲートウェイ、サービスマッシュといった技術が密接に関連しています。しかし、これらの用語は機能や役割の重複により、技術者が混亂する原因となっています。本記事では、これらの技術の定義、特徴、そして実際の適用場面を解説し、選定の際のポイントを整理します。

代理(Proxy)の定義と機能

代理の本質

代理は、クライアントとサーバーの間に位置する中間層で、通信のルーティング、変更、セキュリティ制御を行うことができます。代理は、クライアント側(正向代理)またはサーバー側(反向代理)に配置され、通信の流れを制御します。

核心機能

  • 流量ルーティング:リクエストヘッダー、パス、IPなどの條件に基づいて後端に転送します(例:company.com/v1は特定の後端にルーティングされます)。
  • 流量変更:HTTPヘッダーの読み取り・書き込み・変更(例:認証ヘッダーの追加)。
  • セキュリティ制御:認証・認可、レート制限、IPリスト(白リスト/黒リスト)。
  • プロトコルサポート:層4(TCP/UDP)と層7(HTTP/HTTPS/gRPC)の代理があり、層7はSSL終了処理も行います。
  • 拡張性:WASMモジュールなどの機能呼び出しで動的な決定を行うことができます。

正向代理と反向代理

  • 正向代理:クライアント側に配置され、プライバシー保護やアクセス制御、キャッシュなどの用途があります(例:Docker TestContainersツール)。
  • 反向代理:サーバー側に配置され、システムのエントリポイントとして機能し、負荷分散やSSL終了処理、認証処理を行います。DSR(Direct Server Return)では、サーバーが直接クライアントに応答し、代理を迂迴します。

閘道(Gateway)の定位と機能

閘道の本質

閘道は、API管理のエントリポイントとして機能するスマートな代理です。負荷分散、認証、ログなどの機能を統合しています。

核心機能

  • API管理:OpenAPI/ProtobufなどのAPIスキーマ解析を行い、開発者ポータルでAPIエンドポイントを公開します。
  • セキュリティ制御:OAuth2/JWTなどの認証・認可、レート制限、IP制御。
  • プロトコルサポート:HTTP/HTTPS/gRPCをサポートし、APIゲートウェイまたはサービスゲートウェイとして機能します。
  • 拡張性:外部の認証サービス(OAuthプロバイダー)と統合可能で、サービスマッシュと協調運用できます。

Kubernetes Gateway API と Ingress の違い

Ingress API の限界

Kubernetesの初期のAPIで、反向代理(例:Nginx)を設定して流量をルーティングします。しかし、後端サービスが同一の名前空間に限られ、TCP/UDPのルーティングがサポートされていません。

Gateway API の進化

2019年に導入された新しいAPIで、Ingress APIの制限を解決します。主な特徴は以下の通りです:

  • 名前空間の制限なし:後端サービスが異なる名前空間に配置されても動作します。
  • 柔軟な流量制御:TCP/UDPのルーティングや動的な設定が可能です。
  • 代理コンポーネントとの連攜:Envoyなどの代理コンポーネントと連攜し、負荷分散やサービスマッシュ機能を実現します。

現代代理の進化:Envoy の構成方法

Envoy の革新點

  • 動的構成:従來の構成ファイルではなく、gRPC APIを介してリアルタイムで構成を更新します。
  • 雙方向通信:Upstream(外部クライアント)とDownstream(後端サービス)の通信をサポートし、柔軟な流量制御が可能です。
  • サービスマッシュとの統合:Istioなどのサービスマッシュで、サービス発見、ポリシー実行、流量管理を統合します。

XDS API の構成

  • XDS(eXtensible Data Plane API):gRPCインターフェースを通じて、リアルタイムでルーティング、TLS設定、フェールオーバーなどのポリシーを更新します。
  • コントロールプレーン:複數のEnvoy代理の構成を管理し、サービス中斷なしで構成を更新します。
  • TLS設定例:コントロールプレーンが自動的に証明書を生成・更新し、手動管理の手間を省きます。

サービスマッシュ(Service Mesh)の本質

コアコンポーネント

  • コントロールプレーン:サービス間通信のポリシー(ルーティング、セキュリティ、フェールオーバー)を管理します。
  • サイドカープロキシ:各サービスPod內に埋め込まれ、サービス間通信を処理します。

閘道との違い

  • サービスマッシュ:サービス間通信の細粒度管理に特化しています。
  • 閘道:外部からの通信管理に特化しており、サービスマッシュと組み合わせて使用されます。

技術のまとめ

  1. 代理(Proxy):一般的な流量転送ツールで、SSL卸載、ログ、ルーティングなどの機能を提供します。
  2. 閘道(Gateway):外部流量を管理する代理で、認証委譲や動的構成をサポートします。
  3. サービスマッシュ(Service Mesh):コントロールプレーンとサイドカープロキシで構成され、サービス間通信の管理を実現します。
  4. Envoy の XDS API:現代の代理の標準的な構成方法で、リアルタイムのポリシー更新と多様なプロトコル(HTTP/gRPC/TLS)をサポートします。
  5. Gateway API の進化:Ingressの制限を解決し、負荷分散とサービスマッシュ機能を統合したKubernetesの現代的な流量管理ソリューションです。

結論

代理、閘道、サービスマッシュは、中間層の「スマートさ」や「機能範囲」の違いによって區別されます。技術選定では、セキュリティ、拡張性、プロトコルサポートなどの要件に応じて適切なツールを選択することが重要です。