Knative Serviceが分散システムまたはマイクロサービスアーキテクチャを採用している場合、gRPCプロトコルを使用して、クライアントとサーバー間の通信効率を高めることができます。 ACK Knativeは、gRPCを含むHTTPおよびHTTP/2プロトコルをサポートします。 KnativeサービスのYAMLファイルにgRPCサービスをデプロイし、KnativeゲートウェイでgRPCルーティングを自動的に実装できます。
前提条件
Knativeはクラスターにデプロイされています。 詳細については、「」「Knativeのデプロイ」をご参照ください。
ステップ1: gRPCサービスのDepoy
ACKコンソールにログインします。 左側のナビゲーションウィンドウで、[クラスター] をクリックします。
On theクラスターページで、管理するクラスターの名前をクリックし、 左側のナビゲーションウィンドウに表示されます。
[Knative] ページで、[サービス] タブをクリックします。 [名前空間] を [デフォルト] に設定し、[テンプレートから作成] をクリックし、[サンプルテンプレート] ドロップダウンリストから [カスタム] を選択します。 次のコンテンツをテンプレートエディターにコピーし、[作成] をクリックして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 # The image contains a tool that is used to test gRPC by providing a gRPC Service to respond to requests. env: - name: TARGET value: "Knative" ports: - containerPort: 9000 name: h2c # Set the name of the gRPC Service in the Knative port section to h2c. protocol: TCP
Hostsファイルにマッピングを追加します。 [デフォルトドメイン] 列のデフォルトドメイン名を、[サービス] タブの [ゲートウェイ] 列のゲートウェイアドレスにマップします。
マシン上のHostsファイルを見つけ、Hostsファイルにマッピングを追加します。 マッピングは、ゲートウェイアドレス + スペース文字 + デフォルトドメイン名形式である必要があります。 次に、デフォルトのドメイン名を使用してgRPCサービスにアクセスします。
例:
121.xx.xxx.xx helloworld-grpc.default.example.com
ステップ2: gRPCサービスの可用性を確認する
grpcbinにアクセスし、OSに適したBloomRPCをインストールします。
次の内容を
gRPC.proto
ファイルにコピーし、オンプレミスマシンに保存します。syntax = "proto3"; package grpcbin; service GRPCBin { rpc Index(EmptyMessage) returns (IndexReply) {} // Define an RPC method that takes an empty message as the input and returns an empty message as the output. rpc Empty(EmptyMessage) returns (EmptyMessage) {} // Define an RPC method that takes a dummy message as the input and returns a dummy message as the output. rpc DummyUnary(DummyMessage) returns (DummyMessage) {} // Define an RPC method that takes a dummy message as the input and returns a stream of dummy messages (10 messages) as the output. rpc DummyServerStream(DummyMessage) returns (stream DummyMessage) {} // Define an RPC method that takes a stream of dummy messages (10 messages) as the input and returns a dummy message as the output. rpc DummyClientStream(stream DummyMessage) returns (DummyMessage) {} // Define an RPC method that takes a stream of dummy messages as the input and returns a stream of dummy messages as the output. rpc DummyBidirectionalStreamStream(stream DummyMessage) returns (stream DummyMessage) {} // Define an RPC method that returns a message of the specified gRPC error. rpc SpecificError(SpecificErrorRequest) returns (EmptyMessage) {} // Define an RPC method that returns a message of a random error. rpc RandomError(EmptyMessage) returns (EmptyMessage) {} // Define an RPC method that returns a header. rpc HeadersUnary(EmptyMessage) returns (HeadersMessage) {} // Define an RPC method that does not return any messages. 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を使用します。 gRPCサービスのパスは
{パケット名}.{サービス名}/{メソッド名}
です。 Pathフィールドを上記のパスに設定することで、gRPCパケットをルーティングするようにKnativeゲートウェイを設定できます。 たとえば、gRPCを使用してHTTP/2経由でgrpcbin Indexにアクセスする場合、PathフィールドをGRPCBin. GRPCBin/Index
に設定します。BloomRPCを使用して、gRPCサービスの可用性を確認します。 gRPCサービスは、サーバーが通常どおり応答を返す場合に使用できます。
gRPC.proto
ファイルをBloomRPCにインポートします。左側のナビゲーションウィンドウで、DummyUnaryメソッドをクリックし、ページ上部で
[ドメイン名: ポート]
を指定します。 例:helloworld-grpc.default.example.com:80
。緑色のボタンをクリックして、サーバーから返される応答が正常かどうかを確認します。
関連ドキュメント
カスタムドメイン名を使用してHTTPS経由でサービスにアクセスするように証明書を設定できます。 詳細については、「HTTPS経由でサービスにアクセスするための証明書の設定」をご参照ください。