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

Container Service for Kubernetes:Knative での gRPC サービスのデプロイ

最終更新日:Mar 26, 2026

Knative サービスで分散システムまたはマイクロサービスモデルを使用している場合、gRPC プロトコルを使用してクライアントとサーバー間の通信効率を向上させることができます。ACK Knative は、gRPC を含む HTTP および HTTP/2 アクセスプロトコルをサポートしています。Knative Service YAML ファイルを使用して gRPC サービスをデプロイできます。Knative ゲートウェイは、gRPC プロトコルのルーティングを自動的に処理します。

前提条件

ステップ 1:gRPC サービスのデプロイ

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

  2. クラスターリスト ページで、対象クラスターの名前をクリックします。左側のナビゲーションウィンドウで、アプリケーション > Knative を選択します。

  3. Knative ページの サービス管理 タブで、名前空間[default] に設定します。テンプレートで作成 をクリックします。サンプルテンプレート の横にあるドロップダウンリストから カスタム を選択します。次のサンプルコードをテンプレートに貼り付け、作成する をクリックして、helloworld-grpc という名前の Knative サービスを作成します。

    apiVersion: serving.knative.dev/v1
    kind: Service
    metadata:
      name: helloworld-grpc
    spec:
      template:
        metadata:
          annotations:
            autoscaling.knative.dev/class: mpa.autoscaling.knative.dev
        spec:
          containers:
          - image: docker.io/moul/grpcbin # このイメージは gRPC をテストするためのツールです。gRPC サービスを提供することでリクエストに応答します。
            env:
            - name: TARGET
              value: "Knative"
            ports:
            - containerPort: 9000
              name: h2c # Knative サービス内の gRPC サービスでは、port 配下の name フィールドを h2c に設定する必要があります。
              protocol: TCP
  4. サービス管理ページから取得できる ゲートウェイ IP アドレスに デフォルトドメイン をバインドするために、Hosts ファイルにマッピングを追加します。

    お使いのコンピューター上の Hosts ファイルを探し、<アクセスゲートウェイ IP> <デフォルトドメイン名> のフォーマットでバインド情報を追加します。これにより、ドメイン名を使用してサービスに直接アクセスできるようになります。例:

    121.xx.xxx.xx helloworld-grpc.default.example.com

ステップ 2:gRPC サービスの可用性の検証

  1. grpcbin にアクセスし、お使いのオペレーティングシステム用の BloomRPC をインストールします。

  2. 次のコードを gRPC.proto という名前のファイルに貼り付け、ローカルに保存します。

    syntax = "proto3";
    
    package grpcbin;
    
    service GRPCBin {
      rpc Index(EmptyMessage) returns (IndexReply) {}
      // パラメーターなしで呼び出されるメソッドです。空の応答を返します。
      rpc Empty(EmptyMessage) returns (EmptyMessage) {}
      // 応答はリクエストパラメーターを返します。
      rpc DummyUnary(DummyMessage) returns (DummyMessage) {}
      // ストリーミング応答の呼び出しです。10 個の応答メッセージを送信します。
      rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {}
      // ストリーミングリクエストの呼び出しです。10 個のリクエストを受け入れ、最後のリクエストの本文を返します。
      rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {}
      // リクエストと応答の両方がストリームであるメソッドです。
      rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {}
      // このメソッドは指定された gRPC エラーを返します。
      rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {}
      // このメソッド呼び出しはランダムなエラーを返します。
      rpc RandomError(EmptyMessage) returns (EmptyMessage) {}
      // このメソッド呼び出しはヘッダーを返します。
      rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {}
      // このメソッド呼び出しは応答を返しません。
      rpc NoResponseUnary(EmptyMessage) returns (EmptyMessage) {}
    }
    
    message HeadersMessage {
      message Values {
        repeated string values = 1;
      }
      map<string, Values> Metadata = 1;
    }
    
    message SpecificErrorRequest {
      uint32 code = 1;
      string reason = 2;
    }
    
    message EmptyMessage {}
    
    message DummyMessage {
      message Sub {
        string f_string = 1;
      }
      enum Enum {
        ENUM_0 = 0;
        ENUM_1 = 1;
        ENUM_2 = 2;
      }
      string f_string = 1;
      repeated string f_strings = 2;
      int32 f_int32 = 3;
      repeated int32 f_int32s = 4;
      Enum f_enum = 5;
      repeated Enum f_enums = 6;
      Sub f_sub = 7;
      repeated Sub f_subs = 8;
      bool f_bool = 9;
      repeated bool f_bools = 10;
      int64 f_int64 = 11;
      repeated int64 f_int64s= 12;
      bytes f_bytes = 13;
      repeated bytes f_bytess = 14;
      float f_float = 15;
      repeated float f_floats = 16;
    }
    
    message IndexReply {
      message Endpoint {
        string path = 1;
        string description = 2;
      }
      string description = 1;
      repeated Endpoint endpoints = 2;
    }

    gRPC サービスは HTTP/2 プロトコル上に構築されています。パスフォーマットは {パッケージ名}.{サービス名}/{メソッド名} です。Knative ゲートウェイはこのパスフォーマットを使用して gRPC トラフィックをルーティングします。たとえば、gRPC を使用して grpcbin の Index メソッドにアクセスする場合、HTTP/2 プロトコルの Path フィールドの値は grpcbin.GRPCBin/Index となります。

  3. BloomRPC を使用して gRPC サービスの可用性をテストします。サーバーが正常な応答を返した場合、サービスは利用可能です。

    1. gRPC.proto ファイルを BloomRPC にインポートします。

    2. 左側のナビゲーションウィンドウで、DummyUnary メソッドをクリックします。ページの上部で、サーバーアドレスを `ドメイン名:ポート` のフォーマットで入力します。例:helloworld-grpc.default.example.com:80。

    3. 緑色の実行ボタンをクリックし、サーバーが正常な応答を返すかどうかを確認します。

参照

カスタムドメインに HTTPS 証明書を設定できます。詳細については、「HTTPS 証明書アクセスの設定」をご参照ください。