はじめに
現代のクラウドネイティブアーキテクチャでは、プロキシ、ゲートウェイ、サービスマッシュといった技術が密接に関連しています。しかし、これらの用語は機能や役割の重複により、技術者が混亂する原因となっています。本記事では、これらの技術の定義、特徴、そして実際の適用場面を解説し、選定の際のポイントを整理します。
代理(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內に埋め込まれ、サービス間通信を処理します。
閘道との違い
- サービスマッシュ:サービス間通信の細粒度管理に特化しています。
- 閘道:外部からの通信管理に特化しており、サービスマッシュと組み合わせて使用されます。
技術のまとめ
- 代理(Proxy):一般的な流量転送ツールで、SSL卸載、ログ、ルーティングなどの機能を提供します。
- 閘道(Gateway):外部流量を管理する代理で、認証委譲や動的構成をサポートします。
- サービスマッシュ(Service Mesh):コントロールプレーンとサイドカープロキシで構成され、サービス間通信の管理を実現します。
- Envoy の XDS API:現代の代理の標準的な構成方法で、リアルタイムのポリシー更新と多様なプロトコル(HTTP/gRPC/TLS)をサポートします。
- Gateway API の進化:Ingressの制限を解決し、負荷分散とサービスマッシュ機能を統合したKubernetesの現代的な流量管理ソリューションです。
結論
代理、閘道、サービスマッシュは、中間層の「スマートさ」や「機能範囲」の違いによって區別されます。技術選定では、セキュリティ、拡張性、プロトコルサポートなどの要件に応じて適切なツールを選択することが重要です。