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

Container Service for Kubernetes:ack-agent-gateway を使用した MCP サービスゲートウェイの構築

最終更新日:Jan 06, 2026

Container Service for Kubernetes (ACK) クラスター内の Model Context Protocol (MCP) サービスを外部の大規模言語モデル (LLM) の呼び出しに公開するには、ack-agent-gateway 拡張機能をインストールします。この拡張機能は Gateway API に基づいており、MCP トラフィックを迅速かつ安全にルーティングできます。

シナリオ

  • バージョン 1.32 以降を実行する ACK マネージドクラスター。

  • クラスターにバージョン 1.3.0 以降を実行する Gateway API コンポーネントがインストールされていること。

ack-agent-gateway のインストール

ack-agent-gateway は、Gateway API 標準を実装するゲートウェイコンポーネントです。Gateway API の標準化されたトラフィック管理モデルを使用して、MCP サービストラフィックを簡単に設定および管理するのに役立ちます。

  1. ACK クラスターページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、Applications > [Helm] を選択します。

  2. Helm ページで、作成 をクリックします。[Chart] セクションで、ack-agent-gateway を検索して選択します。デフォルト設定のまま、 をクリックします。

    デフォルトでは、コンポーネントは ack-agent-gateway 名前空間にインストールされます。アプリケーションはコンポーネント名を使用して公開されます。
  3. ページで、最新の Chart バージョンを選択し、OK をクリックします。

  4. インストールが完了したら、Helm ページでコンポーネントを表示できます。コンポーネントのステータスは デプロイ済み です。

ステップ 1: サンプル MCP サービスのデプロイ

このステップでは、公式のサンプル MCP サービスをデプロイします。このサービスは後でゲートウェイの機能を検証するために使用できます。

  1. 次の内容で mcp-server.yaml という名前のファイルを作成します。この YAML ファイルは、default 名前空間にサンプルサービスをデプロイするための DeploymentService を定義します。

    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: demo-mcp
    spec:
      replicas: 1
      selector:
        matchLabels:
          app.kubernetes.io/name: demo-mcp
      template:
        metadata:
          labels:
            app.kubernetes.io/name: demo-mcp
        spec:
          containers:
            - image: registry-cn-hangzhou.ack.aliyuncs.com/dev/sample-mcp-server-fetch:v0.2.0
              imagePullPolicy: IfNotPresent
              name: mcp
              ports:
                - containerPort: 8000
                  name: server
                  protocol: TCP
    ---
    apiVersion: v1
    kind: Service
    metadata:
      name: demo-mcp-server
    spec:
      ports:
        - name: server
          port: 8000
          protocol: TCP
          targetPort: 8000
      selector:
        app.kubernetes.io/name: demo-mcp
      sessionAffinity: None
      type: ClusterIP
  2. サンプル MCP サービスをデプロイします。

    kubectl apply -f mcp-server.yaml
  3. Pod のステータスを確認します。

    kubectl get pod -l app.kubernetes.io/name=demo-mcp

    期待される出力:Pod が Running 状態であることを確認します。

    NAME                        READY   STATUS    RESTARTS   AGE
    demo-mcp-58fddf4cd9-8jvzn   1/1     Running   0          3s

ステップ 2: Gateway とルーティングルールの作成

このステップでは、デプロイされた MCP サービス用のゲートウェイエントリを作成します。これを行うには、GatewayHTTPRoute、および ack-agent-gateway のカスタムリソース定義 (CRD) である Backend を使用します。

  • Backend (CRD):標準の Gateway API バックエンドリファレンス (backendRef) では、ストリーマブル HTTP などの特定の MCP プロトコルプロパティを詳細に記述できません。この問題を解決するために、ack-agent-gateway は `Backend` CRD を導入しています。この CRD は Gateway API の機能を拡張し、バックエンドサービスのプロトコルタイプとアクセスパスをより正確に定義できます。

  • Gateway:トラフィックエントリポイントを定義します。リスナーポートとプロトコルを指定し、その実装として ack-agent-gateway を関連付けます。

  • HTTPRouteGateway からカスタムの Backend リソースにリクエストを転送するトラフィックルーティングルールを定義します。

  1. 次の内容で mcp-gateway.yaml という名前のファイルを作成します。

    # MCP バックエンドサービスの詳細を定義
    apiVersion: agentgateway.alibabacloud.com/v1alpha1
    kind: Backend
    metadata:
      name: test-mcp
    spec:
      type: MCP # バックエンドタイプを MCP として定義
      mcp:
        targets:
          - name: mcp-target # Target の一意の識別子
            static:
              # バックエンド Kubernetes Service の FQDN
              host: demo-mcp-server.default.svc.cluster.local 
              # MCP サービスのプロトコルパス
              path: /mcp 
              port: 8000
              # MCP が使用するトランスポートプロトコルを定義。ここではストリーマブル HTTP
              protocol: StreamableHTTP 
    ---
    # ゲートウェイインスタンスをトラフィックエントリポイントとして定義
    apiVersion: gateway.networking.k8s.io/v1
    kind: Gateway
    metadata:
      name: test-mcp-gateway
    spec:
      gatewayClassName: ack-agent-gateway # ゲートウェイコントローラーとして ack-agent-gateway を指定
      listeners:
        - name: http
          port: 80
          protocol: HTTP
          allowedRoutes:
            namespaces:
              from: Same # 同じ名前空間で作成されたルーティングルールのみをこのゲートウェイに関連付けることを許可
    ---
    # トラフィックを MCP バックエンドに転送するルーティングルールを定義
    apiVersion: gateway.networking.k8s.io/v1
    kind: HTTPRoute
    metadata:
      name: route-for-mcp-backend
    spec:
      parentRefs:
        - group: gateway.networking.k8s.io
          kind: Gateway
          name: test-mcp-gateway # 上記で作成した Gateway に関連付け
      rules:
        - backendRefs:
            # 注意:ここで参照されるバックエンドは、カスタムの Backend CRD
            - group: agentgateway.alibabacloud.com
              kind: Backend
              name: test-mcp
  2. ゲートウェイとルーティングルールをデプロイします。

    kubectl apply -f mcp-gateway.yaml
  3. ゲートウェイのパブリック IP アドレスを取得します。

    kubectl get gateway test-mcp-gateway

    ADDRESS フィールドからゲートウェイの IP アドレスを記録します。このアドレスはテストに使用します。

    NAME               CLASS               ADDRESS        PROGRAMMED   AGE
    test-mcp-gateway   ack-agent-gateway   114.55.xx.xx   True         13m

ステップ 3: サービス接続性のテスト

ローカルマシンに Node.js 環境がインストールされていることを確認してください。このステップでは、MCP Inspector ツールを使用してクライアントをシミュレートし、ゲートウェイ経由で MCP サービスへのアクセスをテストします。

  1. ローカルのコマンドラインターミナルで、次のコマンドを実行して MCP Inspector をインストールし、起動します。

    npx @modelcontextprotocol/inspector@v0.17.5
  2. コマンドが実行されると、ターミナルはローカルエンドポイントを出力します。通常は http://localhost:xxxx の形式です。このエンドポイントをブラウザで開きます。

  3. 開いた MCP Inspector ページで、次の情報を入力します。

    • Transport TypeStreamable HTTP を選択します。

    • URLhttp://<GATEWAY_IP>:80/mcp を入力します。<GATEWAY_IP> を前のステップで取得したゲートウェイアドレス (ADDRESS) に置き換えます。

  4. [Connect] ボタンをクリックします。接続が成功すると、ページに接続済みステータスが表示されます。

  5. (任意) [Tools] > [List Tools] をクリックして、MCP サービスが提供するツールのリストを取得して表示します。このステップで、サービスの可用性をさらに検証します。

ステップ 4: API キー認証の追加 (任意)

このステップでは、アプリケーションコードを一切変更せずに、TrafficPolicy リソースを使用して MCP サービスに API キー認証を追加する方法を示します。

  • TrafficPolicy (CRD):ack-agent-gateway が提供する CRD で、ルーティングルールに高度な機能を追加します。これはポリシーアタッチメントの実装であり、認証やレート制限などのポリシーを HTTPRoute から分離します。

  • Secret:API キーの認証情報を安全に保存するために使用されます。

API キー認証は単純な認証方式です。認証情報が漏洩すると悪用される可能性があります。認証情報は慎重に管理および保護する必要があります。
  1. 次の内容で mcp-api-key.yaml という名前のファイルを作成します。この YAML ファイルは、2 つの API キーを含む Secret と、API キー認証ポリシーを HTTPRoute にアタッチする TrafficPolicy を定義します。

    apiVersion: v1
    kind: Secret
    metadata:
      name: mcp-api-key
    stringData:
      # キー (key1 など) は識別子にすぎません。値 (key-value-foo など) がクライアントが提供する必要のある実際の認証情報です。
      key1: 'key-value-foo'
      key2: 'key-value-bar'
    ---
    apiVersion: agentgateway.alibabacloud.com/v1alpha1
    kind: TrafficPolicy
    metadata:
      name: test-mcp-apikey-auth
    spec:
      targetRefs: # ポリシーをアタッチするターゲット
        - group: gateway.networking.k8s.io
          kind: HTTPRoute
          name: route-for-mcp-backend # 事前に作成した HTTPRoute にアタッチ
      traffic:
        authentication:
          apiKeyAuth:
            secretRef:
              name: mcp-api-key # 認証情報を保存する Secret を参照
  2. API キー認証ポリシーを適用します。

    kubectl apply -f mcp-api-key.yaml
  3. MCP Inspector ページに戻り、認証を検証します。

    1. ページを更新し、再度 [Connect] ボタンをクリックします。

    2. 接続は失敗し、ページに Connection Error が表示されます。MCP Inspector を実行しているコマンドラインターミナルには、api key authentication failure のようなエラーログが出力されます。これは、ゲートウェイの認証ポリシーが有効であることを示しています。

    3. ページ上の [Authentication] ボタンをクリックします。Secret で定義された認証情報の 1 つ、例えば key-value-foo を入力します。その後、[Connect] ボタンをクリックします。接続が成功すると、API キー認証が成功したことを示します。

      MCPInspector

リソースのクリーンアップ

不要な課金を避けるため、実験が終了したら、このチュートリアルで作成したすべての Kubernetes リソースとクラウドリソースを削除してください。

  1. このチュートリアルで作成したすべての Kubernetes リソースを削除します。

    # 任意のステップ 4 を実行した場合は、まず認証関連のリソースを削除します
    kubectl delete -f mcp-api-key.yaml
    
    # ゲートウェイとルーティングルールを削除します
    kubectl delete -f mcp-gateway.yaml
    
    # バックエンドのサンプルサービスを削除します
    kubectl delete -f mcp-server.yaml
  2. Server Load Balancer (SLB) インスタンスがリリースされたことを確認します。Gateway リソースを削除すると、関連付けられた SLB インスタンスが自動的に削除されます。Server Load Balancer コンソールにログインして、インスタンスが削除されたことを確認します。