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

:gRPC サーバーへのトラフィックシェーピング

最終更新日:Nov 06, 2025

この Topic では、Service Mesh (ASM) コンソールで gRPC バージョンと gRPC API に基づいて gRPC サーバーへのトラフィックをシェーピングする方法について説明します。

gRPC バージョンに基づく gRPC サーバーへのトラフィックシェーピング

gRPC サービスは、Java、Go、Node.js、および Python の各 gRPC サーバーにデプロイされます。 次の例では、gRPC クライアントからのリクエストを、Java gRPC サーバーにデプロイされている gRPC サービスにルーティングする方法を示します。Version

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

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

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

  4. [コントロールプレーン] セクションで、[DestinationRule] タブをクリックし、[作成] をクリックします。

  5. [作成] パネルで、[名前空間] ドロップダウンリストから目的の名前空間を選択します。 次のコンテンツをコードエディタにコピーします。 次に、[OK] をクリックします。

    apiVersion: networking.istio.io/v1alpha3
    kind: DestinationRule
    metadata:
      namespace: grpc-best
      name: grpc-server-dr
    spec:
      host: grpc-server-svc
      subsets:
        - name: v1
          labels:
            version: v1
        - name: v2
          labels:
            version: v2
        - name: v3
          labels:
            version: v3
        - name: v4
          labels:
            version: v4
  6. [コントロールプレーン] セクションで、[VirtualService] タブをクリックし、[作成] をクリックします。

  7. [作成] パネルで、[名前空間] ドロップダウンリストから目的の名前空間を選択します。 次のコンテンツをコードエディタにコピーします。 次に、[OK] をクリックします。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      namespace: grpc-best
      name: grpc-server-vs
    spec:
      hosts:
        - "*"
      gateways:
        - grpc-gateway
      http:
        - match:
            - port: 9996
          route:
            - destination:
                host: grpc-server-svc
                subset: v1
              weight: 100

    次のコマンドを実行して、すべてのリクエストが Java gRPC サービスにルーティングされているかどうかを確認します。

    for i in {1..100}; do
      docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
    done
    sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

    期待される出力:

     100 TalkOneAnswerMore:JAVA
     100 TalkMoreAnswerOne:JAVA
     100 TalkBidirectional:JAVA
     100 Talk:JAVA

gRPC API 操作を使用した gRPC サーバーへのトラフィックシェーピング

gRPC API 操作を使用して、gRPC サーバーへのトラフィックを詳細にシェーピングできます。 gRPC API 操作は、通信モデル用に構築できます。 詳細については、「gRPC の通信モデルを実装する」をご参照ください。 Java、Go、Node.js、Python のプログラミング言語で、4 つの gRPC API 操作と 4 つの gRPC サービスが利用可能です。 次の例では、gRPC API 操作のリクエストを、その操作と同じ言語を使用する gRPC サーバーにルーティングするルーティングルールを設定する方法を示します。API

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

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

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

  4. [コントロールプレーン] セクションで、[VirtualService] タブをクリックし、[作成] をクリックします。

  5. [作成] パネルで、[名前空間] ドロップダウンリストから目的の名前空間を選択します。 次のコンテンツをコードエディタにコピーします。 次に、[OK] をクリックします。

    apiVersion: networking.istio.io/v1alpha3
    kind: VirtualService
    metadata:
      namespace: grpc-best
      name: grpc-server-vs
    spec:
      hosts:
        - "*"
      gateways:
        - grpc-gateway
      http:
        - match:
            - port: 9996
            - uri:
                exact: /org.feuyeux.grpc.LandingService/talk
          route:
            - destination:
                host: grpc-server-svc
                subset: v1
              weight: 100
        - match:
            - port: 9996
            - uri:
                exact: /org.feuyeux.grpc.LandingService/talkOneAnswerMore
          route:
            - destination:
                host: grpc-server-svc
                subset: v2
              weight: 100
        - match:
            - port: 9996
            - uri:
                exact: /org.feuyeux.grpc.LandingService/talkMoreAnswerOne
          route:
            - destination:
                host: grpc-server-svc
                subset: v3
              weight: 100
        - match:
            - port: 9996
            - uri:
                exact: /org.feuyeux.grpc.LandingService/talkBidirectional
          route:
            - destination:
                host: grpc-server-svc
                subset: v4
              weight: 100

    次のコマンドを実行して、各 gRPC API 操作のリクエストが、その操作と同じ言語を使用する gRPC サーバーに送信されているかどうかを確認します。

    for i in {1..100}; do
      docker exec -e GRPC_SERVER="${INGRESS_IP}" -it "$client_node_container" node mesh_client.js >> mesh_result
    done
    sort mesh_result | grep -v "^[[:space:]]*$"| uniq -c | sort -nrk1

    期待される出力:

     100 TalkOneAnswerMore:GOLANG
     100 TalkMoreAnswerOne:NODEJS
     100 TalkBidirectional:PYTHON
     100 Talk:JAVA