OpenResty Edge では、Admin Web コンソールだけでリバースプロキシとロードバランサーを構築できます。サーバーのリロード、再起動、バイナリアップグレードは一切不要です。本チュートリアルでは、アプリケーションの作成、バックエンドを指すアップストリームの定義、ラウンドロビンポリシーを設定したページルールの作成、すべてのゲートウェイノードへの設定リリース、そして curl での検証まで、一連の流れを一通り解説します。

OpenResty Edge のリバースプロキシとロードバランサーの概要

すべてのゲートウェイサーバーノードとその設定を一元的に管理する場所、つまり Edge Admin ウェブコンソールで管理を行います。

ゲートウェイノードと設定を管理する OpenResty Edge Admin コンソール

Edge Admin コンソールでサンプルアプリケーションを作成する

OpenResty Edge のウェブコンソールにアクセスしましょう。これはコンソールのサンプルデプロイメントです。各ユーザーが独自のデプロイメントを持つことができます。

ユーザー名とパスワードでログインします。

OpenResty Edge Admin のログインページ

他の認証方法も設定可能です。 それでは、ログインしましょう。

OpenResty Edge Admin コンソールへのサインイン

アプリケーション一覧ページに到達しました。すでに多くの以前作成したアプリケーションがあります。各アプリケーションは、同じゲートウェイ内の仮想ホストまたは仮想サーバーに対応しています。

ここでは、「新規アプリケーション」ボタンをクリックして新しいアプリケーションを作成します。

Edge Admin コンソールのアプリケーション一覧ページ

HTTP タイプのアプリケーションを作成します。これがデフォルトです。

OpenResty Edge で新しい HTTP アプリケーションを作成する

このアプリケーションに test-edge.com というドメイン名を割り当てます。

新しいアプリケーションに test-edge.com ドメインを割り当てる

ワイルドカードドメインを含む、より多くのドメイン名を追加することもできます。

ワイルドカードを含む追加ドメインをアプリケーションに追加する

この例では、ポート 80 のみを対象とします。

HTTP アプリケーションにポート 80 を設定する

それでは、このアプリケーションを作成しましょう!

新しい HTTP アプリケーションの作成を確定する

新しいアプリケーションに移動しました。現在は空の状態です。

バックエンド用のリバースプロキシアップストリームを追加する

アップストリームページに移動しましょう。

新しい Edge アプリケーション内のアップストリームページ

明らかに、まだアップストリームを定義していません。

「新規アップストリーム」ボタンをクリックして、バックエンドサーバー用の新しいアップストリームを作成します。

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

このアップストリームに名前を付けます。例えば、my_backend とします。

リバースプロキシのアップストリームを my_backend と名付ける

簡単にするため、ここでは HTTP プロトコルのみを使用します。

アップストリームに HTTP プロトコルを選択する

最終的には HTTPS プロトコルも有効にしたいかもしれません。

アップストリームを HTTPS に切り替えるオプション

ここでバックエンドサーバーの IP アドレスが必要です。

アップストリームのバックエンドサーバー IP アドレス欄

この IP アドレス 54.213.103.191 にバックエンドサーバーのサンプルを用意しました。

デフォルトの OpenResty ホームページを返すサンプルバックエンドサーバー

これは単純にオープンソースの OpenResty サーバーソフトウェアのデフォルトホームページを返すだけです。

バックエンドには、HTTP プロトコルで通信可能な任意のソフトウェアを使用できます。

図:OpenResty Edge は任意の HTTP バックエンドにリバースプロキシできる

これでバックエンドサーバーのホストフィールドに入力できます。

アップストリームのフォームにバックエンドサーバーのホストを入力する

ポート 80 はそのままにしておきます。

アップストリームのバックエンドにポート 80 を維持する

今後、「新規アップストリームサーバーの追加」ボタンをクリックして、このアップストリームにさらに多くのサーバーを追加できます。

アップストリームにバックエンドサーバーを追加する

では、このアップストリームを保存しましょう。

my_backend アップストリームを保存する

my_backend アップストリームが作成されたことが確認できます。

アップストリームページに一覧表示された my_backend アップストリーム

アップストリーム用のラウンドロビンページルールを追加する

次に、このアップストリームを実際に利用する新しいページルールを作成しましょう。左側のサイドバーのアップストリームリンクをクリックします。

Edge アプリケーション内のページルールページ

現在、ページルールは定義されていません。

新しいページルールを作成します。「新規ルール」ボタンをクリックします。

新しいページルールを作成する

このページルールでは、条件を指定しません。これにより、すべての受信リクエストに適用されます。

条件のないページルール。すべての受信リクエストに適用される

条件を追加して、特定のリクエストにのみプロキシページルールを制限することもできます。

リバースプロキシのページルールを特定のリクエストに限定する任意の条件

ここでは条件を無効にしておきます。

ページルールの条件を無効にする

ここでプロキシターゲットを追加します。

ページルールにプロキシターゲットを追加する

アップストリームを選択します。

プロキシターゲットとしてアップストリームを選択する

ここに新しく作成したアップストリームがあります。

選択可能な新規作成の my_backend アップストリーム

事前に定義されたグローバルアップストリームもいくつかあります。これらは、このアプリケーションを含むすべてのアプリケーションで再利用できます。

アプリケーション間で再利用できる事前定義のグローバルアップストリーム

ここでは my_backend アップストリームを選択します。

プロキシターゲットとして my_backend アップストリームを選択する

アップストリームにはサーバーが 1 台しかないため、ここでは負荷分散ポリシーは重要ではありません。

アップストリームの負荷分散ポリシー選択(デフォルトはラウンドロビン)

デフォルトのラウンドロビンポリシーのままにしておきます。

レスポンスのキャッシュを有効にしたい場合もあるでしょう。これについては別の動画で説明します。

リバースプロキシのページルールにおける任意のレスポンスキャッシュ

最後に、このルールを作成します。

リバースプロキシのページルールを作成する

プロキシページルールがページルールリストに表示されていることが確認できます。

ページルールページに一覧表示された新しいリバースプロキシのページルール

リバースプロキシ設定をすべてのゲートウェイノードにリリースする

最後のステップは、新しい設定をリリースすることです。これにより、まだ完了していない変更がすべてのゲートウェイサーバーにプッシュされます。

リリース待ちの保留中の設定変更

ここのリンクをクリックしてリリースを行うことができます。

新しい設定リリースを開始する

変更をプッシュする前に、変更内容を確認する機会があります。これは最初の変更です。

リリース前に最初の保留中の変更を確認する

これは追加した my_backend アップストリームです。

my_backend アップストリームの追加を示す差分

これは 2 つ目の変更です。

リリース前に 2 つ目の保留中の変更を確認する

新しいリバースプロキシのページルールを示す差分

これがまさに先ほど作成したプロキシページルールです。

では、すべてのゲートウェイサーバーに設定更新をリリースしましょう。

リバースプロキシ設定をすべてのゲートウェイサーバーにリリースする

送信します!

設定リリースを確定する

設定の同期進捗をリアルタイムで観察できます。これはゲートウェイネットワーク全体にプッシュされています。

ゲートウェイネットワーク全体での設定同期のリアルタイム進捗

同期が完了しました。このサンプルデプロイメントでは、ゲートウェイネットワークに 13 台のサーバーがあることがわかります。

ネットワーク全体で増分的な設定同期を行っています。

リクエストレベルでリアルタイムに設定を更新しています。アプリケーションレベルの設定変更では、サーバーのリロード、再起動、バイナリアップグレードは必要ありません。そのため、多くの異なるユーザーが頻繁にリリースを行っても、非常にスケーラブルです。

図:OpenResty Edge ゲートウェイネットワーク全体での増分・リクエストレベルの設定同期

テスト

クラスター別にすべてのゲートウェイサーバーを確認することもできます。

Edge Admin コンソールでクラスターごとにグループ化されたゲートウェイサーバー

これは世界中のサンプルデプロイメントです。

世界中にゲートウェイノードを配置した OpenResty Edge のサンプルデプロイメント

ユーザーは自由に任意の場所にゲートウェイサーバーをデプロイしたり、異なるクラウドやホスティングサービスにまたがってデプロイしたりすることができます。

図:複数のクラウドとリージョンにまたがる OpenResty Edge のゲートウェイノード

この列は各ゲートウェイサーバーの設定同期状態を示しています。

ノードごとの設定同期状態の列

サンフランシスコ近くのゲートウェイサーバーを選んでテストしてみましょう。

サンフランシスコ近くのゲートウェイサーバーをテストする

これがそのパブリック IP アドレスです。

サンフランシスコのゲートウェイノードのパブリック IP アドレス

このサーバーをテストするために、この IP アドレスを直接コピーします。

ターミナルで、curl を使用してこのサンフランシスコのゲートウェイサーバーをテストできます。

curl -sS -H 'Host: test-edge.com' 'http://138.68.231.133/' | less

Host ヘッダーを付けてサンフランシスコのゲートウェイノードを対象にした curl コマンド

Host リクエストヘッダーを指定していることに注意してください。これは、同じサーバーが多くの異なる仮想ホストにサービスを提供しているためです。

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

Edge 経由でプロキシされたデフォルトの OpenResty ホームページを示す curl のレスポンス

結果は予想通りです!バックエンドサーバーに直接アクセスしたかのように、デフォルトの OpenResty ホームページが表示されました。

curl-I オプションを使用してレスポンスヘッダーを確認することもできます。

curl -I -H 'Host: test-edge.com' 'http://138.68.231.133/'

OpenResty Edge ゲートウェイが返すレスポンスヘッダー

いくつかのレスポンスヘッダーは OpenResty Edge ゲートウェイソフトウェアによって生成されています。

また、ローカルの /etc/hosts ファイルで IP アドレスをホスト名にバインドすることもできます。そうすれば、ウェブブラウザを直接このドメイン名に向けることができます。

cat /etc/hosts

test-edge.com をゲートウェイノードの IP にマッピングするローカルの /etc/hosts ファイル

実際の設定では、ゲートウェイサーバーの IP アドレスを DNS ネームサーバーに追加する必要があります。

dig test-edge.com

ここではまだこのドメイン名の DNS レコードを設定していません。これは別の動画でデモンストレーションします。

DNS レコードがまだ設定されていないことを示す dig test-edge.com の出力

OpenResty Edge は、権威 DNS サーバーネットワークとしても同時に機能します。

OpenResty Edge は権威 DNS ネットワークとしても機能できる

もちろん、これはオプションです。ユーザーは引き続きサードパーティの DNS ネームサーバーを使用することもできます。

以上が本日ご紹介する内容です。

OpenResty Edge でサードパーティの DNS サーバーを使うのは任意である

よくある質問

OpenResty Edge の Admin Web コンソールでリバースプロキシを設定するには?

アプリケーション(仮想ホスト)を作成し、バックエンドの IP とポートを指定したアップストリームを追加し、そのアップストリームにトラフィックをプロキシするページルールを追加してから、リリースします。サーバーのリロード、再起動、バイナリアップグレードは一切不要です。

OpenResty Edge のアップストリームとは?

アップストリームは、リバースプロキシがトラフィックを送信するバックエンドサーバーの名前付きグループです。本チュートリアルではポート 80 のバックエンド 1 台だけを持つ my_backend を作成しますが、後からサーバーを追加すれば Edge がそれらの間で負荷分散を行います。

OpenResty Edge は新しいリバースプロキシ設定をどのようにしてすべてのゲートウェイノードにプッシュしますか?

アプリケーション、アップストリーム、ページルールを作成したら、「リリース」をクリックします。Edge はゲートウェイネットワーク全体で増分・リクエストレベルの設定同期を行います。リロード、再起動、バイナリアップグレードは不要です。ここで示したサンプルデプロイメントでは、リリースは 13 台すべてのゲートウェイサーバーに伝播します。

リバースプロキシが機能しているかをテストするには?

アプリケーションの Host ヘッダーを付けて、任意のゲートウェイノードのパブリック IP に curl を実行します(例:curl -sS -H 'Host: test-edge.com' 'http://<ノードの IP>/')。バックエンドに直接アクセスしたときと同じレスポンス(本チュートリアルではデフォルトの OpenResty ホームページ)が返るはずです。

OpenResty Edge 負荷分散シリーズの関連記事

グローバルサーバーロードバランシング(GSLB)がどのようにリージョン間でトラフィックを分散するか、Sticky Cookie でユーザーのセッションを同じバックエンドに固定する方法、または nginx の設定を編集せずに TCP サービスをプロキシする方法をご覧ください。

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 以上のオープンソースソフトウェアライブラリを執筆しております。

翻訳

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