本日は、OpenResty Edge で gRPC リバースプロキシとロードバランサーを設定する方法をご紹介いたします。

Embeded image

gRPC サンプルサーバーとサンプルサービス

gRPC サンプルサーバーを用意しました。このサーバーの IP アドレスは .166 で終わります。リッスンポートは 8080 です。

以下は、サンプル gRPC サービスの protobuf 定義ファイルです。

cat hello_world.proto

Screenshot

このサービスは、name パラメータに基づいて歓迎メッセージを返します。

Screenshot

grpcurl コマンドラインツールを使用して、このサービスの出力を確認できます。このツールは gRPC リクエストを送信し、受信したレスポンスを JSON 形式で表示します。gRPC サーバーが TLS 暗号化をサポートしていないため、ここでは “-plaintext” オプションを使用します。 name パラメータの値として “world” を使用します。上記で言及した gRPC サーバーのアドレスを入力します。最後に、gRPC サービスの名前を入力します。

Screenshot

リクエストを送信します。予想通り、“hello world” が返されました。

Screenshot

gRPC サーバーをアップストリームとして使用

次に、OpenResty Edge の背後にあるこの gRPC サーバーをアップストリームとして使用します。

スクリーンショット

いつものように、OpenResty Edge の Admin Web コンソールにアクセスしましょう。これは私たちのコンソールのサンプルデプロイメントです。各ユーザーは独自のローカルデプロイメントを持っています。

スクリーンショット

以前の例で使用した test-edge.com アプリケーションを引き続き使用できます。

スクリーンショット

そのアプリケーションに入ります。

Screenshot

アプリケーションで HTTP 2 を有効にする

gRPC は HTTP 2 を転送に使用します。HTTP 2 は OpenResty Edge ではデフォルトで有効になっています。

スクリーンショット

ここでは、Edge のアプリケーション設定で HTTP 2 を有効にする方法をお示しします。

スクリーンショット

「Enabled」オプションを選択します。

スクリーンショット

変更を保存します。

Screenshot

次に SSL ページに移動し、SSL 証明書が適切に設定されていることを確認します。

スクリーンショット

以前のチュートリアルで設定した証明書が表示されています。

スクリーンショット

gRPC サーバー用のアップストリームを作成する

「Upstreams」ページに移動します。

スクリーンショット

バックエンドサーバー用の新しいアップストリームを作成します。

スクリーンショット

このアップストリームに「grpc backend」という名前を付けます。

Screenshot

gRPC バックエンドサーバーが TLS 暗号化機能を有効にしている場合、ここで HTTPS を選択できます。

スクリーンショット

gRPC バックエンドサーバーのホストフィールドに、前述の IP アドレスを入力します。

スクリーンショット

ポート番号 8080 を入力します。

スクリーンショット

このアップストリームを保存します。

スクリーンショット

新しい「grpc backend」アップストリームが正常に作成されたことが確認できます。

スクリーンショット

gRPC プロキシを有効にする

では、このアップストリームを実際に使用するための新しいページルールを作成しましょう。

Screenshot

新しいページルールを作成します。

スクリーンショット

URI プレフィックスに一致するルール条件を追加します。

スクリーンショット

スクリーンショット

「grpcurl」で使用されるこれらのリクエスト URI プレフィックスを入力します。

スクリーンショット

ここでプロキシを追加します。

スクリーンショット

このスイッチをオンにして、gRPC プロキシを有効にします。

スクリーンショット

先ほど作成した gRPC アップストリームを選択します。

スクリーンショット

スクリーンショット

このページルールを既存の他のルールの前に挿入します。

スクリーンショット

このページルールを保存します。

Screenshot

追加したルールがページルールリストに表示されていることが確認できます。

スクリーンショット

いつものように、先ほどの変更をプッシュするために新しいバージョンをリリースする必要があります。

スクリーンショット

このボタンをクリックします。

スクリーンショット

リリースします!

スクリーンショット

新しいバージョンがすべてのゲートウェイサーバーに同期されました。

スクリーンショット

これで、新しいページルールがすべてのゲートウェイクラスターとサーバーにプッシュされました。

埋め込み動画

これらの設定変更にはサーバーのリロード、再起動、またはバイナリアップグレードは必要ありません。そのため、非常に効率的でスケーラブルです。

Embeded image

gRPC サービスのテスト

ここで、ゲートウェイを通じて gRPC サービスをテストします。

埋め込み画像

引き続き grpcurl ツールを使用して gRPC サービスにアクセスします。

ドメイン名 test-edge.com とポート 443 を使用します。これにより OpenResty Edge ゲートウェイにヒットします。今回は Edge ゲートウェイが TLS 暗号化をサポートしているため、plaintext オプションは指定しません。

スクリーンショット

リクエストを送信します。

予想通り、“hello world” というメッセージが返されました。

スクリーンショット

ご覧のように、ソースサーバーがサポートしていなくても、gRPC サービスは完全に TLS 暗号化を使用してアクセスできるようになりました。

OpenResty Edge について

OpenResty Edge は、マイクロサービスと分散トラフィックアーキテクチャ向けに設計された多機能ゲートウェイソフトウェアで、当社が独自に開発しました。トラフィック管理、プライベート CDN 構築、API ゲートウェイ、セキュリティ保護などの機能を統合し、現代のアプリケーションの構築、管理、保護を容易にします。OpenResty Edge は業界をリードする性能と拡張性を持ち、高並発・高負荷シナリオの厳しい要求を満たすことができます。K8s などのコンテナアプリケーショントラフィックのスケジューリングをサポートし、大量のドメイン名を管理できるため、大規模ウェブサイトや複雑なアプリケーションのニーズを容易に満たすことができます。

著者について

章亦春(Zhang Yichun)は、オープンソースの OpenResty® プロジェクトの創始者であり、OpenResty Inc. の CEO および創業者です。

章亦春(GitHub ID: agentzh)は中国江蘇省生まれで、現在は米国ベイエリアに在住しております。彼は中国における初期のオープンソース技術と文化の提唱者およびリーダーの一人であり、Cloudflare、Yahoo!、Alibaba など、国際的に有名なハイテク企業に勤務した経験があります。「エッジコンピューティング」、「動的トレーシング」、「機械プログラミング」 の先駆者であり、22 年以上のプログラミング経験と 16 年以上のオープンソース経験を持っております。世界中で 4000 万以上のドメイン名を持つユーザーを抱えるオープンソースプロジェクトのリーダーとして、彼は OpenResty® オープンソースプロジェクトをベースに、米国シリコンバレーの中心部にハイテク企業 OpenResty Inc. を設立いたしました。同社の主力製品である OpenResty XRay動的トレーシング技術を利用した非侵襲的な障害分析および排除ツール)と OpenResty Edge(マイクロサービスおよび分散トラフィックに最適化された多機能ゲートウェイソフトウェア)は、世界中の多くの上場企業および大企業から高い評価を得ております。OpenResty 以外にも、章亦春は Linux カーネル、Nginx、LuaJITGDBSystemTapLLVM、Perl など、複数のオープンソースプロジェクトに累計 100 万行以上のコードを寄与し、60 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

英文版の原文と日本語訳版(本文)をご用意しております。読者の皆様による他の言語への翻訳版も歓迎いたします。全文翻訳で省略がなければ、採用を検討させていただきます。心より感謝申し上げます!