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

Microservices Engine:クラウドネイティブゲートウェイによる WebSocket トラフィックのルーティング

最終更新日:Jun 23, 2026

WebSocket プロトコルは、クライアントとサーバー間の永続的で低レイテンシーな双方向通信を可能にします。 Kubernetes クラスターの外部から WebSocket サービスにアクセスすると、MSE クラウドネイティブゲートウェイは、定義されたルーティングルールに基づいてリクエストを受信し、適切なバックエンドサービスに転送します。 このチュートリアルでは、Container Service for Kubernetes (ACK) クラスターに WebSocket アプリケーションをデプロイし、トラフィック転送に MSE クラウドネイティブゲートウェイを使用する方法を説明します。

前提条件

ステップ1:WebSocket アプリケーションのデプロイ

詳細な手順については、「Deployment を使用したステートレスワークロードの作成」をご参照ください。

このチュートリアルでは、Kubernetes ネイティブのサービスディスカバリー方式を使用します。宣言型 Service API リソースによってバックエンドサービスを CoreDNS に登録します。サンプルのバックエンドサービスは、複数の WebSocket エンドポイントを提供します。ACK クラスターで以下の YAML 設定を適用します。

apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: sockbin
  name: sockbin-app
  namespace: default
spec:
  progressDeadlineSeconds: 600
  replicas: 2
  revisionHistoryLimit: 10
  selector:
    matchLabels:
      app: sockbin
  strategy:
    rollingUpdate:
      maxSurge: 25%
      maxUnavailable: 25%
    type: RollingUpdate
  template:
    metadata:
      labels:
        app: sockbin
    spec:
      containers:
        - image: therebelrobot/sockbin
          imagePullPolicy: Always
          name: sockbin
          ports:
            - containerPort: 4080
              protocol: TCP
          resources:
            limits:
              cpu: 500m
          terminationMessagePath: /dev/termination-log
          terminationMessagePolicy: File
      dnsPolicy: ClusterFirst
      restartPolicy: Always
      schedulerName: default-scheduler
      securityContext: {}
      terminationGracePeriodSeconds: 30
---
apiVersion: v1
kind: Service
metadata:
  labels:
    app: sockbin
  name: sockbin-service
  namespace: default
spec:
  ports:
    - name: http
      port: 4080
      protocol: TCP
      targetPort: 4080
  selector:
    app: sockbin
  sessionAffinity: None
  type: NodePort

ステップ2:WebSocket トラフィックのルーティング

ACK クラスターをゲートウェイのサービスソースとして追加し、Sockbin サービスを追加します。

サービスソースの追加

  1. MSE コンソールにログオンし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、Routes をクリックします。表示されるページで、[ソース] タブをクリックします。

  4. Add Source をクリックし、次のパラメーターを設定して、OK をクリックします。

    パラメーター

    説明

    Source Type

    Container Service を選択します。

    ACK/ACK Serverless クラスター

    バックエンドサービスがデプロイされているクラスターを選択します。

    [Listen to Kubernetes Ingress]

    このオプションを有効にすると、MSE クラウドネイティブゲートウェイは Ingress リソースの変更を自動的にリッスンし、それらのリソースで定義されたドメイン名とルート設定を適用します。

    このオプションを無効にすると、ゲートウェイは Ingress リソースのリッスンを停止し、それらのリソースから以前に適用された設定は無効になります。

    説明

    MSE コンソールで手動で設定したドメイン名とルートは、Ingress リソースによる設定よりも優先されます。

サービスの追加

  1. MSE コンソールにログオンし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、Routes をクリックします。表示されるページで、[サービス] タブをクリックします。

  4. Create Service をクリックして次のパラメーターを設定し、OK をクリックします。

    パラメーター

    説明

    [Service Sources]

    Container Service を選択します。

    [Namespaces]

    対象クラスターのネームスペースを選択します。

    [Services]

    リストからサービスを選択します。

Sockbin ルートの追加

  1. MSE コンソールにログオンし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

  3. 左側のナビゲーションウィンドウで、Routes をクリックし、[ルート] タブをクリックします。

  4. Add Route をクリックし、以下のパラメーターを設定してから、Save and Advertise をクリックします。

    パラメーター

    説明

    Route Name

    sockbin-route と入力します。

    Domain Name

    デフォルトのドメイン名 * を選択します。

    Path

    マッチ条件には、Prefix を選択します。パス値には、/ を入力します。

    Scenario

    Single Service を選択します。

    Backend Service

    対象のServiceService Portを選択します。

結果の検証

次のいずれかの方法で、WebSocket サービスが利用可能であることを検証できます。

方法1:Sockbin UI でのテスト

  1. MSE コンソールにログオンし、上部のナビゲーションバーでリージョンを選択します。

  2. 左側のナビゲーション ウィンドウで、Cloud-Native Gateway > ゲートウェイリスト を選択します。 [ゲートウェイ] ページで、ゲートウェイの名前をクリックします。

  3. ゲートウェイのOverviewページのGateway Ingressタブに移動し、関連付けられた Server Load Balancer (SLB) インスタンスのパブリックエンドポイントを見つけてブラウザで開きます。

    ゲートウェイは、WebSocket ハンドシェイクのドメイン名とパスに基づいて、リクエストを Sockbin サービス UI にルーティングします。

    Output:
    CONNECTING to / ...
    CONNECTED to /
    SENT: Hello Sockbin!
    RESPONSE: { "timestamp": "Tue May 31 2022 07:49:41 GMT+0000 (UTC)", "url": "http://sockb.in/", "reqData": "Hello Sockbin!" }

方法2:WebSocket クライアントでのテスト

たとえば、Python WebSocket クライアントを使用して、1 秒遅延でサーバーからのレスポンスを受信できます。

#!/usr/bin/env python
import asyncio
import websockets
async def hello():
    async with websockets.connect("ws://ip_addr/delay/1000") as websocket:
        await websocket.send("Hello Test")
        text = await websocket.recv()
        print(text)
asyncio.run(hello())