Contents
Gateway APIとの連携
Envoy Gatewayは、Gateway API CRDと密接に連携して動作します。このAPIにより、Kubernetesクラスター内でのHTTPルーティングや負荷分散を柔軟に制御できます。現在の最新バージョン(v1.2.5以降)では、CRDの定義が強化され、複雑なネットワーク構成もサポートしています。
注意: 本記事の記載は2024年3月時点の情報に基づいています。技術仕様は随時更新されるため、公式ドキュメントを常に確認してください。
AIモデルルーティングの意義
AIサービスと連携する際、LLM(大規模言語モデル)の切り替えは重要な課題です。Envoy Gatewayには、HTTPヘッダを基に異なるモデルを動的に選択する機能が備わっており、開発者は効率的なロードバランシングやA/Bテストを実現できます。
以下に技術的詳細を解説します。
- ルーティングメカニズム: Gateway APIの
HTTPRouteリソース内でヘッダマッチ条件を設定することで、LLMモデルの切り替えが可能になります。 - 動的振り分け:
X-Model-Versionヘッダの値に応じて、Envoy Gatewayは対応するサービスバージョンへのルーティングを行います。 - 実装例:
yaml
spec:
rules:- matches:
- headers:
- name: X-Model-Version
value: v2.0
backendRefs:
- name: X-Model-Version
- name: llm-v2-service
port: 80
- headers:
- matches:
Gateway API CRDのインストール手順
KubernetesクラスターへGateway API CRDを導入するには、kubectl applyコマンドを使用します。このステップが正しく行われることで、Envoy Gatewayと連携したネットワーク設定が可能になります。
kubectl applyでのCRD適用
- 事前にKubernetes v1.26以降を確認してください。
- GitHubからGateway APIのYAMLファイルを取得します。
kubectl apply -f gateway-api.yamlでCRDを適用します。
重要: CRDとEnvoy Gatewayのバージョンが互換性を持つことを必ず確認してください。最新版に対応していないと機能が動作しない場合があります。
バージョン確認方法
| 確認項目 | コマンド | 補足 |
|---|---|---|
| CRDバージョン | kubectl get crd gatewayclasses.gateway.networking.k8s.io |
CRDが正しく適用されているか確認 |
| Kubernetesバージョン | kubectl version --short |
v1.26以降が推奨 |
Envoy GatewayのHelmによるインストール
Envoy GatewayをKubernetesにインストールする際、Helmチャートを使用すると効率的です。カスタムパラメータを活用することで、運用環境に応じた柔軟な設定が可能です。
Helmリポジトリ追加手順
-
Helmリポジトリを追加します。
bash
helm repo add envoy-gateway https://envoyproxy.github.io/gateway -
リポジトリの更新を行います。
bash
helm repo update
カスタム設定パラメータ一覧
以下は、Envoy Gatewayをインストールする際によく使われるカスタムパラメータです。
replicaCount: レプリカ数(デフォルト: 2)image.tag: 使用するイメージバージョンmetrics.enabled: メトリクスの有効化
ヒント: パラメータは
helm show values envoy-gateway/envoy-gatewayで確認可能です。
HTTPルーティング設定ファイルの作成
Envoy Gatewayは、YAML形式で定義されたGatewayとRouteリソースを使ってルーティングを制御します。以下の手順で設定ファイルを作成し、実装してください。
Gatewayリソース定義例
以下は、シンプルなHTTP Gatewayの定義です。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
apiVersion: gateway.networking.k8s.io/v1beta1 kind: Gateway metadata: name: example-gateway spec: className: envoy listeners: - name: http protocol: HTTP port: 80 allowedRoutes: namespaces: from: All |
Routeリソースの詳細設定
Routeリソースは、具体的なルーティングルールを定義します。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
apiVersion: gateway.networking.k8s.io/v1beta1 kind: HTTPRoute metadata: name: example-route spec: parentRefs: - name: example-gateway rules: - matches: - path: type: PathPrefix value: /hello backendRefs: - name: hello-service port: 80 |
LLMモデル切り替え用ヘッダ指定方法
AIサービスとの連携において、HTTPヘッダーを介したLLMモデルの動的切り替えは効率的な運用が可能です。Envoy Gatewayでは、この機能をシンプルな設定で実装できます。
モデル選択用HTTPヘッダー仕様
- ヘッダ名:
X-Model-Version - 値の例:
"v1.0","v2.0" - 動作: 異なるモデルをロードバランシングで振り分け
OCI Network Load Balancerとの統合構成
クラウドプロバイダのOCI(Oracle Cloud Infrastructure)Network Load BalancerとEnvoy Gatewayを連携させることで、高可用性とセキュリティを両立できます。以下に設定手順を紹介します。
NLBのリスナーコンフィグ
- OCIコンソールからNLBを作成し、Listenerを設定します。
- Protocol:
TCPorHTTP - Backend Set: Envoy Gatewayが動いているPodに接続する設定を行います。
例: Listener設定パラメータ
| 項目 | 値 | 補足 |
|---|---|---|
| プロトコル | TCP | HTTPも選択可能 |
| ポート | 80/443 | サービスの要件に応じて設定 |
| Backend IP | Envoy Gateway PodのIP | Kubernetesサービスのエンドポイントを指定 |
証明書設定手順
SSL証明書のインストールには、以下のようにcert-managerを使用できます。
cert-managerをクラスターにデプロイします。- Issuerリソースを作成し、Let's Encryptなどから証明書を取得します。
- NLBに証明書をアップロードし、Listenerで有効化します。
参考: OCIでは、NLBの「SSL終端」機能を使用して証明書を直接設定可能です。
まとめ
本記事では、Kubernetes環境でのEnvoy Gatewayの導入手順を具体的に解説しました。
- Gateway API CRDのインストール方法
- HelmによるEnvoy Gatewayのデプロイ
- HTTPルーティング設定ファイルの作成
- LLMモデル切り替え用ヘッダー指定と動的ルーティング実装
- OCI Network Load Balancerとの統合構成
これらのステップを踏むことで、Kubernetes環境でのネットワーク制御を効率的に実現できます。実際にローカル環境で検証しながら導入を体験してみてください。