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

Microservices Engine:クラウドネイティブゲートウェイに基づく WebSocket アプリケーションのリクエストのルーティング

最終更新日:Jan 08, 2025

WebSocket プロトコルは、クライアントとサーバー間の双方向の継続的な通信を可能にします。これにより、永続的な接続と低レイテンシが保証されます。Container Service for Kubernetes(ACK)クラスターが外部 WebSocket サービスにアクセスする場合、クラウドネイティブゲートウェイがリクエストを受信して転送し、事前定義されたルーティングルールに基づいて特定のバックエンドサービスにリクエストを配信します。このトピックでは、Container Service for Kubernetes クラスターに WebSocket アプリケーションをデプロイし、クラウドネイティブゲートウェイを使用してリクエストを転送する方法について説明します。

前提条件

手順 1:ACK クラスターに WebSocket アプリケーションをデプロイする

アプリケーションのデプロイ方法の詳細については、「Deployment を使用してステートレスアプリケーションを作成する」をご参照ください。

この例では、ACK クラスターはサービスディスカバリに使用されます。バックエンドサービスは、アノテーションベースのサービス API を使用して CoreDNS に登録されます。この例のバックエンドサービスは、複数の WebSocket API を提供します。ACK クラスターにデプロイされる WebSocket アプリケーションは、次のリソース構成を使用します。

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. [ソース] タブで、[ソースの追加] をクリックします。[ソースの追加] パネルでパラメーターを設定し、[OK] をクリックします。

    パラメーター

    説明

    ソースタイプ

    [コンテナサービス] を選択します。

    ACK/ACK Serverless クラスターACK Serverless クラスタ

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

    Kubernetes Ingress をリッスンする

    スイッチをオンにすると、クラウドネイティブゲートウェイは Ingress リソースの変更を自動的にリッスンし、Ingress リソースのドメイン名とルートのリッスンされた構成を有効にします。

    スイッチをオフにすると、クラウドネイティブゲートウェイは Ingress リソースの変更をリッスンしなくなり、Ingress リソースのドメイン名とルートのリッスンされた構成は無効になります。

    説明

    MSE コンソールで手動で設定されたドメイン名とルートの優先度は、Ingress リソースのリッスンされたドメイン名とルートの優先度よりも高くなります。

サービスを追加する

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

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

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

  4. [サービス] タブで、[サービスの追加] をクリックします。[サービスの追加] パネルでパラメーターを設定し、[OK] をクリックします。

    パラメーター

    説明

    サービスソース

    [コンテナサービス] を選択します。

    名前空間

    宛先クラスターの名前空間を選択します。

    サービス

    1 つ以上のサービスを選択します。

ゲートウェイから Sockbin サービスへのルートを追加する

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

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

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

  4. [ルート] タブで、[ルートの追加] をクリックします。表示されるページでパラメーターを設定し、[保存してアドバタイズ] をクリックします。

    パラメーター

    説明

    ルーティングルール名

    sockbin-route と入力します。

    ドメイン名

    ドロップダウンリストからデフォルトの関連ドメイン名 * を選択します。

    パス

    一致条件ドロップダウンリストから [プレフィックス] を選択し、フィールドに / と入力します。

    シナリオ

    [単一サービス] を選択します。

    バックエンドサービス

    宛先の [サービス] とサービス [ポート] を選択します。

結果の確認

次のいずれかの方法を使用して、WebSocket サービスの可用性を確認できます。

方法 1:Sockbin サービスページでテストを実施する

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

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

  3. Overview ページの Gateway Ingress タブで、ゲートウェイに関連付けられている Server Load Balancer(SLB)インスタンスのパブリックエンドポイントを見つけます。次に、ブラウザーのアドレスバーにエンドポイントを入力し、Enter キーを押します。

    ゲートウェイは、WebSocket ハンドシェイクリクエストに含まれるドメイン名とパスに基づいてルーティングを実行し、Sockbin サービスページを開きます。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:
        # WebSocket サーバーに接続します。
        await websocket.send("Hello Test")
        # メッセージを送信します。
        text = await websocket.recv()
        # サーバーからのレスポンスを受信します。
        print(text)

asyncio.run(hello())