すべてのプロダクト
Search
ドキュメントセンター

Container Service for Kubernetes:Inference Extension を使用した Gateway によるサービスへのアクセス

最終更新日:Mar 18, 2026

Gateway API は Kubernetes 向けの次世代ルーティングおよび負荷分散 API です。本トピックでは、ACK Edge クラスター内で Inference Extension を備えた Gateway コンポーネントを使用して、HTTP ルートの構成、リクエストヘッダーの変更、重み付けによるリクエストの分散を行う方法について説明します。

仕組み

Inference Extension を備えた Gateway コンポーネントは Envoy Gateway プロジェクトに基づいており、Gateway API および Envoy Gateway 拡張リソースのすべての基本機能をサポートしています。

Envoy Gateway のアーキテクチャは以下のとおりです。

  • コントロールプレーン:コントロールプレーンは Envoy Gateway コンポーネントで構成されます。クラスター内のトラフィックルールを監視し、Envoy プロキシインスタンスを動的に作成・管理するとともに、転送ルールをリアルタイムで更新します。コントロールプレーンはサービストラフィックを直接転送しません。

  • データプレーン:データプレーンは Envoy プロキシインスタンスで構成されます。サービストラフィックを処理および転送します。

ACK Edge クラスターでは、Envoy Gateway のデプロイ方法が標準的な ACK クラスターとは異なります。

相違点

標準 ACK

ACK Edge

サービス公開方法

LoadBalancer

NodePort

コントロールプレーンのデプロイ

クラスターレベル

ノードプールごとに 1 セットをデプロイ

データプレーンのデプロイ

クラスターレベル

ノードプール単位でデプロイ

複数のノードプール

1 つのゲートウェイを共有

各ノードプールごとに個別のゲートウェイを作成する必要があります

サービストポロジー

構成不要

openyurt.io/topologyKeys アノテーションが必要

現在のデプロイはノードプールディストリビューションポリシーで構成されています。コンポーネント管理でレプリカ数を調整し、各ノードプールに少なくとも 1 つのコントロールプレーンレプリカが実行されるようにしてください。

ACK Edge 中 Envoy Gateway 部署架构

適用範囲

事前準備

ステップ 1:テストアプリケーションの作成

次の例を backend.yaml として保存し、kubectl apply -f backend.yaml コマンドを実行して、backend および backend-2 のテストアプリケーションを作成します。

ACK Edge シナリオでは、サービストポロジーを構成する必要があります。openyurt.io/topologyKeys: openyurt.io/nodepool アノテーションを Service に追加し、トラフィックが同じノードプール内の Pod にのみ転送されるようにしてください。詳細については、「ノードプールサービストポロジー管理」をご参照ください。
apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend
---
apiVersion: v1
kind: Service
metadata:
  name: backend
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool # ノードプールトポロジーを構成
  labels:
    app: backend
    service: backend
spec:
  ports:
    - name: http
      port: 3000
      targetPort: 3000
  selector:
    app: backend
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend
      version: v1
  template:
    metadata:
      labels:
        app: backend
        version: v1
    spec:
      serviceAccountName: backend
      containers:
        - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/envoygateway-echo-basic:v20231214-v1.0.0-140-gf544a46e
          imagePullPolicy: IfNotPresent
          name: backend
          ports:
            - containerPort: 3000
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
---
apiVersion: v1
kind: ServiceAccount
metadata:
  name: backend-2
---
apiVersion: v1
kind: Service
metadata:
  name: backend-2
  annotations:
    openyurt.io/topologyKeys: openyurt.io/nodepool # ノードプールトポロジーを構成
  labels:
    app: backend-2
    service: backend-2
spec:
  ports:
    - name: http
      port: 3000
      targetPort: 3000
  selector:
    app: backend-2
---
apiVersion: apps/v1
kind: Deployment
metadata:
  name: backend-2
spec:
  replicas: 1
  selector:
    matchLabels:
      app: backend-2
      version: v1
  template:
    metadata:
      labels:
        app: backend-2
        version: v1
    spec:
      serviceAccountName: backend-2
      containers:
        - image: registry-cn-hangzhou.ack.aliyuncs.com/ack-demo/envoygateway-echo-basic:v20231214-v1.0.0-140-gf544a46e
          imagePullPolicy: IfNotPresent
          name: backend-2
          ports:
            - containerPort: 3000
          env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace

ステップ 2:GatewayClass の確認

Inference Extension を備えた Gateway コンポーネントをインストールすると、デフォルトで GatewayClass が作成されます。次のコマンドを実行して確認します。

kubectl get gatewayclass

期待される出力:

NAME          CONTROLLER                                      ACCEPTED   AGE
ack-gateway   gateway.envoyproxy.io/gatewayclass-controller   True       2m31s

GatewayClass リソースが見つからない場合は、手動で作成できます。次の例を gatewayclass.yaml として保存し、kubectl apply -f gatewayclass.yaml コマンドを実行して作成します。

apiVersion: gateway.networking.k8s.io/v1
kind: GatewayClass
metadata:
  name: ack-gateway
spec:
  controllerName: gateway.envoyproxy.io/gatewayclass-controller

ステップ 3:カスタム EnvoyProxy 構成の作成

ACK Edge クラスターでは、各ノードプールごとにカスタム EnvoyProxy 構成を作成し、データプレーン Pod のスケジューリング先ノードプールおよびサービス公開方法を指定できます。

次の例の NPXXX を実際のノードプール ID に置き換えます。その後、構成を gateway-config.yaml として保存し、kubectl apply -f gateway-config.yaml コマンドを実行します。

ノードプール ID は、ACK コンソールの ノード管理 > ノードプール ページで確認できます。
apiVersion: gateway.envoyproxy.io/v1alpha1
kind: EnvoyProxy
metadata:
  name: custom-proxy-config
spec:
  provider:
    type: Kubernetes
    kubernetes:
      envoyDeployment:
        pod:
          nodeSelector:
            alibabacloud.com/nodepool-id: NPXXX  # 実際のノードプール ID に置き換えてください
      envoyService:
        annotations:
          openyurt.io/topologyKeys: openyurt.io/nodepool  # サービストポロジーを構成
        type: NodePort  # ACK Edge では NodePort を使用してサービスを公開

この構成には、ACK Edge シナリオ向けの以下の 3 つの重要な設定が含まれています。

構成項目

説明

nodeSelector

ゲートウェイデータプレーン Pod を指定されたノードプールにスケジューリング

openyurt.io/topologyKeys アノテーション

サービストポロジーを構成し、トラフィックがノードプール内に留まるように保証

type: NodePort

NodePort を使用してサービスを公開。エッジシナリオでは LoadBalancer は使用しません。

ステップ 4:Gateway リソースの作成

次の例を gateway.yaml として保存し、kubectl apply -f gateway.yaml コマンドを実行します。

コンポーネントのコントロールプレーンは、Gateway リソースに基づいて自動的に EnvoyProxy Deployment および NodePort サービスを作成します。また、ノード上の指定されたポートでリスナーを起動します。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
  name: ack-gateway
spec:
  gatewayClassName: ack-gateway
  listeners:
    - name: http
      protocol: HTTP
      port: 80
  infrastructure:
    parametersRef:
      group: gateway.envoyproxy.io
      kind: EnvoyProxy
      name: custom-proxy-config  # ステップ 3 で作成したカスタム構成に関連付け

ステップ 5:ゲートウェイエンドポイントの取得

ゲートウェイサービスは NodePort として公開されます。対応するサービスエンドポイントは、ノードプール内の任意のノードの IP アドレスとそのサービスポートです。

  1. サービスポートを照会します。

    kubectl get service -n kube-system -l gateway.envoyproxy.io/owning-gateway-name=ack-gateway

    期待される出力:

    NAME                                 TYPE       CLUSTER-IP       EXTERNAL-IP   PORT(S)        AGE
    envoy-default-ack-gateway-7452df7d   NodePort   192.168.86.174   <none>        80:30364/TCP   19m
  2. ゲートウェイホスト環境変数を設定できます。NODEIP をノードプール内の任意のノードの IP アドレスに、NODEPORT を前のステップで取得したポート番号に置き換えます。

    export GATEWAY_HOST=NODEIP:NODEPORT

参照