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

Alibaba Cloud Service Mesh:ASM インスタンスの WebSocket サービスにイングレスゲートウェイを使用してアクセスする

最終更新日:Mar 15, 2025

WebSocket は、単一の伝送制御プロトコル ( TCP ) 接続を介して全二重通信チャネルを提供するコンピューター通信プロトコルです。 WebSocket は、オープンシステム相互接続 ( OSI ) モデルのアプリケーション層にあります。 WebSocket を使用すると、サーバーはクライアントにデータをプッシュできます。 WebSocket に準拠するサービスは、WebSocket サービスです。このトピックでは、イングレスゲートウェイを使用してサービスメッシュ ( ASM ) インスタンスの WebSocket サービスにアクセスする方法を示します。

前提条件

手順 1:サンプルアプリケーションをデプロイする

  1. kubectl を使用して Container Service for Kubernetes ( ACK ) クラスタに接続します。詳細については、「クラスタの kubeconfig ファイルを取得し、kubectl を使用してクラスタに接続する」をご参照ください。

  2. 次の内容を使用して、tornado という名前の YAML ファイルを作成します。

    apiVersion: v1
    kind: Service
    metadata:
      name: tornado
      labels:
        app: tornado
        service: tornado
    spec:
      ports:
      - port: 8888
        name: http
      selector:
        app: tornado
    ---
    apiVersion: apps/v1
    kind: Deployment
    metadata:
      name: tornado
    spec:
      replicas: 1
      selector:
        matchLabels:
          app: tornado
          version: v1
      template:
        metadata:
          labels:
            app: tornado
            version: v1
        spec:
          containers:
          - name: tornado
            image: registry.cn-beijing.aliyuncs.com/aliacs-app-catalog/tornado:lastest
            imagePullPolicy: Always
            ports:
            - containerPort: 8888
    ---
  3. 次のコマンドを実行して、tornado アプリケーションを作成します。

    kubectl apply -f tornado.yaml

手順 2:ルーティングルールを設定する

  1. ASM コンソール にログインします。

  2. 左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  3. [メッシュ管理] ページで、設定する ASM インスタンスを見つけます。 ASM インスタンスの名前をクリックするか、管理[アクション] 列の をクリックします。

  4. Istio ゲートウェイを作成します。

    1. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの [ASM ゲートウェイ] > [ゲートウェイ] を選択します。表示されるページで、[YAML から作成] をクリックします。

    2. 作成ページで、既定[名前空間] ドロップダウンリストから [作成] を選択し、次の内容をコードエディタにコピーします。次に、 をクリックします。

      apiVersion: networking.istio.io/v1alpha3
      kind: Gateway
      metadata:
        name: tornado-gateway
      spec:
        selector:
          istio: ingressgateway
        servers:
        - port:
            number: 80
            name: http
            protocol: HTTP
          hosts:
          - "*"

      number パラメーターを 80 に設定します。これにより、WebSocket サービスはポート 80 経由で受信または送信 HTTP および TCP トラフィックを受信できます。

  5. 仮想サービスを作成します。

    1. ASM インスタンスの詳細ページで、左側のナビゲーションウィンドウの [トラフィック管理センター] > [virtualservice] を選択します。表示されるページで、[YAML から作成] をクリックします。

    2. 作成ページで、デフォルト[名前空間] ドロップダウンリストから [作成] を選択し、次の内容をコードエディタにコピーします。次に、 をクリックします。

      apiVersion: networking.istio.io/v1alpha3
      kind: VirtualService
      metadata:
        name: tornado
      spec:
        hosts:
        - "*"
        gateways:
        - tornado-gateway
        http:
        - match:
          - uri:
              prefix: /
          route:
          - destination:
              host: tornado
            weight: 100

      hosts パラメーターを * に設定します。 これにより、すべてのリクエストが WebSocket サービスにアクセスできます。

手順 3:イングレスゲートウェイの IP アドレスを照会する

方法 1:ASM コンソールを使用する

  1. ASM コンソール にログインします。左側のナビゲーションウィンドウで、[サービスメッシュ] > [メッシュ管理] を選択します。

  2. [メッシュ管理] ページで、ASM インスタンスの名前をクリックします。左側のナビゲーションウィンドウで、[ASM ゲートウェイ] > [イングレスゲートウェイ] を選択します。

  3. [イングレスゲートウェイ] ページで、[サービスアドレス] を取得します。

方法 2:ACK コンソールを使用する

  1. ACK コンソール にログインします。左側のナビゲーションウィンドウで、[クラスタ] をクリックします。

  2. [クラスタ] ページで、管理するクラスタを見つけて、その名前をクリックします。左側のウィンドウで、[ネットワーク] > [サービス] を選択します。

  3. [サービス] ページで、istio-system[名前空間] ドロップダウンリストから 外部 IPistio-ingressgateway を選択します。 列で、 のポート 80 の IP アドレスを表示します。

手順 4:イングレスゲートウェイを使用して WebSocket サービスにアクセスする

  1. 4 つの異なるブラウザのアドレスバーに http://<イングレスゲートウェイの IP アドレス> と入力します。

    服务

  2. 次のコマンドを実行して、WebSocket サービスにアクセスします。

    curl "http://<イングレスゲートウェイの IP アドレス>/api?id=8&value=300"
    curl "http://<イングレスゲートウェイの IP アドレス>/api?id=5&value=600"
    curl "http://<イングレスゲートウェイの IP アドレス>/api?id=1&value=200"
    curl "http://<イングレスゲートウェイの IP アドレス>/api?id=3&value=290"

    4 つのブラウザで WebSocket サービスのデータを表示します。 4 つのブラウザの WebSocket サービスのデータは同時に更新され、同じデータが表示されます。

手順 5:WebSocket Secure ( wss ) プロトコルに切り替える

  1. イングレスゲートウェイのサーバー証明書と秘密鍵を作成します。詳細については、「手順 1:複数のサーバーのサーバー証明書と秘密鍵を準備する」をご参照ください。

    サーバー証明書と秘密鍵を含むシークレットが ACK クラスタの istio-system 名前空間に作成され、シークレットの名前が myexample-credential であることを確認します。

  2. 手順 2:ルーティングルールを設定する で作成したルーティングルールを変更します。

    YAML ファイルの例:

    apiVersion: networking.istio.io/v1alpha3
    kind: Gateway
    metadata:
      name: tornado-gateway
    spec:
      selector:
        istio: ingressgateway
      servers:
      - port:
          number: 80
          name: http
          protocol: HTTP
        hosts:
        - "*"
      - hosts:
        - "*"
        port:
          name: https
          number: 443
          protocol: HTTPS
        tls:
          credentialName: myexample-credential
          mode: SIMPLE

手順 6:wss プロトコルを使用して WebSocket サービスにアクセスする

  1. コンピューターの hosts ファイルを変更して、a.aliyun.com ドメイン名をイングレスゲートウェイの IP アドレスに解決します。手順 5 のサブステップ 1 で作成した証明書のドメイン名を使用してイングレスゲートウェイにアクセスできることを確認します。

  2. 4 つの異なるブラウザのアドレスバーに https://a.aliyun.com と入力します。

    服务

  3. 次のコマンドを実行して、WebSocket サービスにアクセスします。

    curl -k "https://<イングレスゲートウェイの IP アドレス>/api?id=8&value=300"
    curl -k "https://<イングレスゲートウェイの IP アドレス>/api?id=5&value=600"
    curl -k "https://<イングレスゲートウェイの IP アドレス>/api?id=1&value=200"
    curl -k "https://<イングレスゲートウェイの IP アドレス>/api?id=3&value=290"

    4 つのブラウザで WebSocket サービスのデータを表示します。 4 つのブラウザの WebSocket サービスのデータは同時に更新され、同じデータが表示されます。