コンテンツにスキップ

Envoy Gateway で実現する開発者主導の Gateway 管理

Envoy の基本概念

Envoy は、マイクロサービスアーキテクチャにおける通信管理と可観測性のためのミドルウェアです。以下の機能を提供します:

  • リクエストのトレーシング
  • 高度な負荷分散
  • 認証・認可

Envoy は主に次の 2 つのパターンで利用されます:

  1. Side Car パターン - 各サービスの横に配置
  2. Gateway パターン - エントリーポイントとして配置

Envoy Gateway の概要

Envoy Gateway は、Kubernetes の Gateway API 仕様を実装したプロキシサーバーです。Kubernetes 環境で Envoy の能力を最大限に活用するための 3rd パーティ実装として機能します。

主な機能

Envoy Gateway は以下の強力な機能を提供します:

  1. トラフィック管理

    • 高度なリクエストルーティング
    • インテリジェントな負荷分散
    • リトライ機構とタイムアウト制御
  2. セキュリティ

    • 多様な認証方式(API Key、Basic 認証、OIDC、JWT)
    • TLS 通信の管理
  3. メトリクス

    • 詳細なリクエストトラッキング
    • 包括的なモニタリング

💡 ヒント: Envoy Gateway は頻繁にアップデートされています。最新の機能については公式ドキュメントを参照してください。

Gateway API の概念

Gateway API は Kubernetes のリソースタイプの一つで、外部からのリクエストを受け付けるためのインターフェースを定義します。

Ingress との違い

機能 Gateway API Ingress
プロトコルサポート L4-L7(TCP/UDP/HTTP など) 主に L7(HTTP/HTTPS)
ロール指向
カスタマイズ性 高い 限定的

Gateway API のロール指向設計により、インフラ開発者アプリケーション開発者が管理するリソースを明確に分離できます。

Gateway のロールベースアーキテクチャ

Gateway API はロールに基づいたリソース管理モデルを採用しています。

リソースとロールの関係図

Gateway API リソースモデル

クラウドプロバイダーの実装比較

AWS Gateway コントローラー

AWS の実装では、Gateway リソースが VPC Lattice と紐づけられます:

AWS Gateway Controller

GKE Gateway コントローラー

Google Cloud の実装では、Gateway リソースが Google Cloud ロードバランサーと紐づけられます:

GKE Gateway Controller

クラウドプロバイダーでのロール分担の必要性:

AWS や GKE の Gateway 実装では、Gateway リソースの作成・管理時にクラウド固有のリソース(VPC Lattice、ロードバランサーなど)が自動生成され、クラウドの IAM 権限管理やネットワーク構成が必要になります。そのため、クラウドインフラストラクチャに精通したインフラ担当者のロールが不可欠です。この担当者は以下を管理します:

  • クラウドリソースのプロビジョニングと構成管理
  • IAM ポリシーとセキュリティグループの設定
  • ネットワークトポロジーと VPC 設定
  • コスト最適化

Envoy Gateway の特徴的なポジション

クラウドプロバイダーの実装との主な違い:

  • AWS/GKE: Gateway 作成時にクラウド固有のリソース(VPC Lattice、Google Loadbalancer)が自動生成される
  • Envoy Gateway: クラウドプロバイダーに依存せず、Kubernetes クラスタ内で完結

開発チームへの影響:

Envoy Gateway はインフラ面での管理対象が少なく、クラウドリソースや IAM 権限との連携が不要なため、アプリケーション開発者自身が Gateway リソースを管理できる可能性があります。これにより、DevOps の効率化と開発サイクルの短縮が期待できます。また、インフラチームへの依存度が低減し、開発者の自律性が高まります。

まとめ

Envoy Gateway は、Kubernetes 環境におけるトラフィック管理と可観測性を提供する強力なツールです。Envoy Gateway の導入により、アプリケーション開発者は自らのリソースを管理し、迅速なデプロイと運用が可能になります。これにより、DevOps の効率化と開発サイクルの短縮が期待できます。