API7 Enterpriseを使用してgRPCサービスをプロキシする方法

January 2, 2024

Products

今日の急速に進化する技術環境において、gRPC (Google Remote Procedure Call)は多くのアプリケーションにおいて不可欠なコンポーネントとなっています。しかし、gRPCの潜在能力を最大限に活用するためには、堅牢なAPIゲートウェイがgRPCサービスの効果的な管理に不可欠であり、プロトコル変換、負荷分散、認証、認可などの重要な機能を提供します。

gRPCに詳しいかどうかに関わらず、この記事を5分ほど読むだけで、API7 Enterpriseを使用してgRPCサービスをプロキシする方法を理解することができます。

API7 EnterpriseとgRPC

前提条件

  1. API7 Enterpriseをインストールします。

  2. grpcurlをインストールして、gRPCクライアントとのやり取りをシミュレートします。

  3. テスト用のgRPCサービスを起動します:

    • API7.aiはテスト用のgRPCサービス例を提供しています。または、以下のdockerコマンドを使用して実行することもできます:
    docker run -d --name grpc-service -p 50051:50051 --restart always api7/grpc-server-example:1.0.0
    
    • 起動後、grpcurlを使用して利用可能なgRPCサービスリストとメソッドを確認します:
    $ grpcurl -plaintext 127.0.0.1:50051 list
    
    grpc.reflection.v1alpha.ServerReflection
    helloworld.Greeter
    helloworld.TestImport
    
    $ grpcurl -plaintext 127.0.0.1:50051 list helloworld.Greeter
    
    helloworld.Greeter.GetErrResp
    helloworld.Greeter.Plus
    helloworld.Greeter.SayHello
    helloworld.Greeter.SayHelloAfterDelay
    helloworld.Greeter.SayHelloBidirectionalStream
    helloworld.Greeter.SayHelloClientStream
    helloworld.Greeter.SayHelloServerStream
    

API7 Enterpriseを使用してgRPCサービスをプロキシする

ゲートウェイインスタンスの設定を更新する

デフォルトでは、API7 Enterpriseインスタンスはポート9443でのTLS暗号化されたHTTP/2のみをサポートしています。テストの便宜上、ゲートウェイインスタンスの設定ファイルのnode_listenセクションを変更し、ポート9081を追加して非暗号化のHTTP/2をサポートします。

apisix:
  node_listen:
    - port: 9080
      enable_http2: false
    - port: 9081
      enable_http2: true

変更後、API7 Enterpriseがインストールされているapi7-eeディレクトリでdocker-compose up -dを再実行します。

サービスとルートを設定する

次に、API7 Enterpriseのダッシュボードで、準備したgRPCサービスをプロキシするための対応するリソースを設定します。

  1. grpc-exampleという名前のサービスを追加し、アップストリームスキームとしてgRPCを選択します。

API7を使用してgrpcをプロキシ-1

  1. grpc-exampleサービス内にルートを追加します

    • ルートパスの形式:/{service}/{method}
    • 例えば、以前に確認したgRPCサービスリストとメソッドに基づいて、パスを/helloworld.Greeter/SayHelloと設定します。

API7を使用してgrpcをプロキシ-2

サービスを公開してテストする

サービスとルートを作成した後、サービスをゲートウェイグループに公開して有効にします。

  1. 「サービスを公開」をクリックし、指定されたゲートウェイグループを選択し、公開するサービスを選択します。

  2. gRPCサービスのノード(IP + ポート)を追加し、「公開」をクリックします。

  3. grpcurlを使用してgRPCサービスをテストします:

    • helloworld.protoファイルを使用して、grpcurlがリクエストとレスポンスの形式をgRPCサービスの定義に合わせるようにします。この例の.protoファイルはこちらから入手できます。
    • 以下のコマンドを実行して、API7 Enterpriseを使用してgRPCサービスが正常にプロキシされていることを確認します。
    $ grpcurl -plaintext -proto helloworld.proto -d '{"name":"apisix"}' 127.0.0.1:9081 helloworld.Greeter.SayHello
    
    {
      "message": "Hello apisix"
    }
    

結論

API7 Enterpriseは100以上の組み込みプラグインを誇り、認証、認可、レート制限、ロギング、監視などの幅広い機能をカバーしています。API7 Enterpriseを使用してgRPCサービスをプロキシすることで、システムの柔軟性、セキュリティ、パフォーマンス、管理性が大幅に向上し、開発者と運用チームに強力なツールと制御メカニズムを提供します。API7 Enterpriseを試して、gRPCアプリケーションを強化しましょう!

Tags: