確保するこれらの製品を、無料でお試しください。確保するこれらの製品を、無料でお試しください。1.13.10でリリースされたgRPCトラフィックの最初のネイティブサポートについて、ここでご紹介します。1.13.9で導入されたHTTP/2サーバプッシュのサポートが含まれています。TCP接続をプロキシすることができます。この新しい機能を使用して、gRPCメソッドのコールを終了、検査、およびルーティングすることができます。これらの機能は、以下の目的で使用できます。TLS暗号化、レート制限、IPアドレスベースのアクセス制御リスト、およびロギングなどを行うことが可能です。暗号化を行わないHTTP/2(h2cクリアテキスト)や、TLSによる暗号化と認証を使用してサービスの公開をすることもできます。単一のエンドポイントを介して複数のgRPCサービスを公開することができ、NGINXを使用し各内部サービス宛のトラフィックの検査やルーティングが可能です。同じエンドポイントで、WebサイトやRESTベースのAPIなど、他のHTTPSおよびHTTP/2サービス公開することも可能です。Connection、またはその他の方法を使用してgRPCサービスのクラスターに対して負荷分散し、クラスター全体にトラフィックを分散します。このため、追加のキャパシティが必要な場合は、gRPCベースのサービスを追加しスケーリングすることが可能です。2サーバプッシュとgRPC(英語版)もご覧ください。gRPCとは何ですか?gRPCとは、リモートプロシージャコール用のプロトコルであり、クライアントとサーバアプリケーション間の通信に使用されます。コンパクト(リソース効率が良い)で複数の言語に移植できるように設計されており、要求応答とストリーミング対話の両方をサポートしています。このプロトコルは、その広範な言語サポートとシンプルなユーザー向けの設計により、サービスメッシュ実装を含め、人気が高まっています。gRPCベースのシンプルなアプリケーション例gRPCは、クリアテキストまたはTLS暗号化のいずれかで、HTTP/2を介して転送されます。POSTリクエストとして実装されます(プロトコルバッファーは標準のエンコードです)。gRPCの応答は、同様にエンコードされた本文を使用し、HTTPトレーラーを使用して、応答の最後にステータスコードを送信します。設計上、gRPCプロトコルはHTTP/1.xでは転送できません。gRPCプロトコルは、HTTP/2接続の多重化およびストリーミング機能を利用するために、HTTP/2での利用が必須です。Worldクイックスタートチュートリアルの複数例を用いて、シンプルなクライアントおよびサーバプリケーションを作成する例を示しています。NGINXにおける設定の詳細を共有します。ヒントとして参考にしていただければ幸いです。シンプルなgRPCサービスの公開まず、クライアントアプリケーションとサーバプリケーションの間にNGINXを配置します。NGINXは、サーバプリケーションに安定した信頼性の高いゲートウェイを提供します。gRPCトラフィックのNGINXプロキシまず、gRPCを更新しNGINXをデプロイします。ソースからNGINXをビルドする場合は、http_sslおよびhttp_v2モジュールを含めることを忘れないでください。--with-http_v2_moduleNGINXは、gRPCトラフィックをHTTPサーバを使用して待ち受け、grpc_passディレクティブを使用してトラフィックをプロキシします。続くプロキシ設定をNGINXで作成し、ポート80で暗号化されていないgRPCトラフィックをリッスンし、ポート50051でサーバにリクエストを転送します。}}grpc_passディレクティブのアドレスが正しいことを確認してください。クライアントを再コンパイルして、NGINXのIPアドレスと待ち受けるポートを指定します。変更したクライアントを実行すると、以前と同じ応答が表示されますが、トランザクションはNGINXによって終了および転送されます。設定したアクセスログで確認できます。"grpc-go/1.11.0-dev"注:NGINXは、クリアテキスト(非TLS)ポート上でHTTP/1.xとHTTP/2を同時にサポートしません。使用するプロトコルのバージョンに関する事前確認が必要です。両方のプロトコルバージョンをクリアテキストで処理する場合は、それぞれにリッスンポートを作成します。Worldクイックスタートの例では、暗号化されていないHTTP/2(クリアテキスト)を使用して通信します。テスト用のためかなりシンプルデプロイですが、実運用の環境に必要な暗号化は提供されません。NGINXを用いて、この暗号化レイヤーを追加して見ましょう。セットを作成し、NGINXサーバの設定を次のように変更します。#...}TLSを使用するためgRPCクライアントは宛先ポート1443に接続し、証明書チェックを無効にします。(この設定は自己署名証明書または信頼されていない証明書を使用する場合に必要となります)Goを使用している場合は、crypto/tlsとgoogle.golang.org/grpc/credentialsをインポートリストに追加し、grpc.Dial()呼び出しを次のように変更する必要があります。)NGINXでgRPCトラフィックをセキュアに処理するために必要な設定はこれだけです。本番の実行環境では、自己署名証明書を信頼できる認証局(CA)が発行した証明書に置き換える必要があります。次に、そのCAを信頼するようにクライアントを設定する必要があります。暗号化されたgRPCサービスへのプロキシ内部にプロキシするgRPCトラフィックを暗号化する必要が出てくる場合があります。その際には、まず非暗号化(grpc)接続ではなくTLS暗号化(grpcs)接続をリッスンするようにサーバアプリケーションを変更する必要があります。)そして、NGINXの設定で、gRPCトラフィックをアップストリームのサーバにプロキシするために使用するプロトコルを変更します。トラフィックのルーティングおよびSSL終端処理NGINXでは、サービスとメソッドを識別し、locationディレクティブを使用してトラフィックをルーティングすることができます。プロトコルの仕様にあるパッケージ、サービス、およびメソッド名になどを参考に、すでに各gRPCリクエストのURLを導き出すことができるかもしれません。RPCメソッドを呼び出すと、次のログエントリに示すように、/helloworld.Greeter/SayHelloに対するPOSTリクエストが発行されます。"grpc-go/1.11.0-dev"NGINXでのトラフィックのルーティングは非常に簡単です。index.htm;}こちらについて自分で試すことが可能です。Worldパッケージ(helloworld.proto内)を拡張してDispatcherという名前の新しいサービスを追加し、Dispatcherメソッドを実装する新しいサーバアプリケーションを作成しました。クライアントは単一のHTTP/2接続を使用して、GreeterサービスとDispatcherサービスの両方にRPC呼び出しを発行します。NGINXは呼び出しを分離し、それぞれを適切なgRPCサーバにルーティングします。/」の箇所に注意してください。このブロックは、既知のgRPC呼び出しと一致しないリクエストを処理します。このように、locationブロックを使用して、同じTLSの暗号化を行うエンドポイントからWebコンテンツや、その他のgRPC以外のサービスを提供することが可能です。gRPC呼び出しの負荷分散キャパシティを増やして高可用性を実現するためには、gRPCサービスをどのようにスケーリングするのかを見ていく必要があります。grpcs://upstreamsを使用できます。NGINXは、さまざまな負荷分散アルゴリズムを使用して、gRPCの呼び出しをアップストリームのgRPCサーバ全体に分散することができます。NGINXのヘルスチェック機能では、応答していないサーバや、エラーがでているかどうかを検出し、その問題のあるサーバをローテーションから外します。この設定サンプルでは、使用可能なサーバがない場合、「/error502grpc」のロケーションを用いて、gRPC準拠のエラーメッセージを返すよう動作します。本内容に、コメントやフィードバックなどあれば、コミュニティメーリングリストを通じてぜひご意見お聞かせください。確認されたバグのレポートは、Tracバグトラッカーに送信してください。下記、関連ウェビナーもご参照ください。F5.com."卓越したデジタル・エクスペリエンスを安全にお届けします自動化、セキュリティ、パフォーマンス、インサイト能力を有するF5製品ラインナップは、お客様がコスト削減、オペレーションの改善、そしてユーザ保護の強化を実現するアプリケーションを作成・保護・運用することを可能にします。