OpenResty Edge は、アップストリームを K8s サービスに直接バインドすることで、Kubernetes の ingress コントローラーとして機能します。Edge の Admin サーバーが Kubernetes API サーバーを監視し、Pod のオンライン・オフラインに合わせてアップストリームサーバーリストを自動同期します。手動での編集は不要で、ゲートウェイのリロード・再起動・バイナリアップグレードも必要ありません。Edge ゲートウェイサーバーは Kubernetes クラスターの内部でも外部でも実行できます。以下では、Kubernetes コンテナ内で実行されるバックエンドアプリケーションへのトラフィックを管理する手順を、ひととおりご紹介します。

OpenResty Edge が Kubernetes の ingress コントローラーとして、K8s クラスター内の Pod へトラフィックをルーティング

このチュートリアルでは、Edge アプリケーション内に Kubernetes アップストリームを作成します。Edge ゲートウェイサーバーは、Kubernetes クラスター内部で実行することも、外部で実行することも可能です。Edge の Admin サーバーは、API サーバーを通じて Kubernetes クラスターを継続的に監視します。また、Kubernetes ノード(またはコンテナ)のオンラインおよびオフラインイベントに応答し、アップストリームサーバーリストを自動的に更新します。

OpenResty Edge Admin が Kubernetes API サーバーを監視し、Pod のオンライン・オフラインに応じてアップストリームサーバーリストを自動更新

Kubernetes アップストリームの作成と使用方法

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

OpenResty Edge Admin Web コンソールのサンプルデプロイメント

まず、専用のゲートウェイパーティション内に、Kubernetes サービスに接続できるゲートウェイサーバーを設定する必要があります。

Kubernetes サービスに接続できる専用ゲートウェイパーティション内のゲートウェイサーバー

ゲートウェイパーティションページに移動します。

OpenResty Edge のゲートウェイパーティションページへ移動

すでに kubernetes-test-partition という名前のゲートウェイパーティションを作成済みです。

OpenResty Edge の kubernetes-test-partition ゲートウェイパーティション

パーティション内には kubernetes-test-cluster という名前のゲートウェイクラスターがあります。

パーティション内の kubernetes-test-cluster ゲートウェイクラスター

すべてのゲートウェイサーバーが Kubernetes サービスに接続できるわけではないため、別のゲートウェイパーティションが必要です。

kubernetes-test-cluster クラスターに移動します。

OpenResty Edge の kubernetes-test-cluster ゲートウェイクラスターを開く

このゲートウェイクラスター内にすでにゲートウェイサーバーが定義されています。このゲートウェイサーバーが Kubernetes クラスターに接続できることを確認する必要があります。

Kubernetes クラスターに接続できるクラスター内の Edge ゲートウェイサーバー

Kubernetes クラスターの作成

Edge アプリケーションで新しい Kubernetes アップストリームを作成する前に、まずグローバルスコープで Kubernetes クラスターを登録する必要があります。

Kubernetes ページに移動します。

OpenResty Edge Admin の Kubernetes ページへ移動

このボタンをクリックして新しい Kubernetes クラスターを追加します。

OpenResty Edge で新しい Kubernetes クラスターを追加するボタン

新しい通知を受け取るために、OpenResty Edge Admin は Kubernetes の HTTPS API サーバーとの接続を確立する必要があります。

Kubernetes API サーバーのホスト名または IP アドレスを入力します。

Kubernetes API サーバーのホスト名または IP アドレスを入力

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

Kubernetes API サーバーのポート番号を入力

続いて kubernetes クラスターの名前を入力します。

Kubernetes クラスターの名前を入力

SSL 証明書の検証を無効にします。これは、Kubernetes API サーバーの証明書が自己署名されているためです。

自己署名証明書の Kubernetes API サーバー向けに SSL 証明書の検証を無効化

Kubernetes API サーバーにアクセスするためのトークンも必要です。このトークンには十分な権限が必要です。

Kubernetes API サーバーへのアクセスに使うトークンの入力欄

「How to generate this token」というリンクをクリックすると、ポップアップが開きます。

OpenResty Edge の「How to generate this token」ヘルプリンクを開く

ここでは、独自の Kubernetes デプロイメントからトークンを生成する方法が説明されています。 では、このプロセスをデモンストレーションしましょう。

このポップアップを閉じます。

OpenResty Edge のトークンヘルプポップアップを閉じる

token.yml という名前の設定ファイルを準備する必要があります。以下はこのファイルのサンプルです。これを使用して、読み取り権限を持つアカウントを作成し、

読み取り権限を持つ Kubernetes サービスアカウントを作成する token.yml のサンプル

ネームスペース、

token.yml が Kubernetes ネームスペースへの読み取り権限を付与

サービス、

token.yml が Kubernetes サービスへの読み取り権限を付与

エンドポイント、および

token.yml が Kubernetes エンドポイントへの読み取り権限を付与

Pods オブジェクトにアクセスできるようにします。

token.yml が Kubernetes Pods オブジェクトへの読み取り権限を付与

以下のコマンドを使用してアカウントを作成します。

kubectl apply -f /root/token.yml

kubectl apply -f token.yml で Kubernetes サービスアカウントを作成

最後に、以下のコマンドを使用してアカウントのトークンを取得します。

Kubernetes サービスアカウントのトークンを取得するコマンド

“token:” の後のテキストが必要なトークンです。

「token:」の後に表示される Kubernetes サービスアカウントのトークン

これで、Kubernetes API サーバーにアクセスするためのトークンが得られました。

先ほど作成した API トークンをここに貼り付けます。

Kubernetes API トークンを OpenResty Edge に貼り付け

「作成」ボタンをクリックして完了です。

作成をクリックして OpenResty Edge に Kubernetes クラスターを登録

Kubernetes アップストリームの作成

この時点で、グローバルスコープで Kubernetes クラスターを登録しました。次は、Edge アプリケーション内でこのクラスターを利用するアップストリームを作成する時です。

Kubernetes クラスターが OpenResty Edge にグローバル登録済み

アプリケーション一覧ページに移動します。

Edge アプリケーション一覧ページを開く

www.kubernetes-edge-test.com という名前の Edge アプリケーションをすでに用意しています。

www.kubernetes-edge-test.com という Edge アプリケーション

このアプリケーションは、先ほど示したゲートウェイパーティションにマッピングされています。

Edge アプリケーションが Kubernetes ゲートウェイパーティションにマッピング

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

OpenResty Edge の Edge アプリケーションに入る

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

Edge アプリケーションの Upstreams ページを開く

新しい Kubernetes アップストリームを作成するボタンをクリックします。

OpenResty Edge で新しい Kubernetes アップストリームをクリック

Kubernetes アップストリームの名前として “my kubernetes backend” と入力します。

Kubernetes アップストリームに「my kubernetes backend」と命名

ターゲットとなる Kubernetes クラスターを選択します。

アップストリームのターゲットとして Kubernetes クラスターを選択

先ほど作成した Kubernetes クラスターを選択します。

本チュートリアルの冒頭で作成した Kubernetes クラスターを選択

ターゲットとなる Kubernetes のネームスペースを選択します。

アップストリーム向けのターゲット Kubernetes ネームスペースを選択

「default」という名前のネームスペースを選択します。環境によっては別のネームスペースになる場合があります。

「default」Kubernetes ネームスペースを選択

Kubernetes サービスをリストから選択します。

リストから Kubernetes サービスを選択

「test-hello」サービスを選択します。

「test-hello」Kubernetes サービスを選択

そしてサービスのポートを選択します。

Kubernetes サービスのポートを選択

この例では 80 ポートです。

Kubernetes サービスに 80 ポートを選択

新しいアップストリームを保存します。

OpenResty Edge で新しい Kubernetes アップストリームを保存

これで新しい Kubernetes アップストリームの作成に成功しました。

新しい Kubernetes アップストリームが OpenResty Edge で作成成功

アップストリームサーバーのアドレスがここに表示されています。

Kubernetes アップストリームサーバーのアドレスが自動で表示

これらは Kubernetes クラスターから自動的に同期された Kubernetes ノードまたはコンテナです。

Kubernetes クラスターから自動同期されたアップストリームサーバー

Kubernetes アップストリームを使用するページルールの作成

通常のアップストリームと同様に、この新しい Kubernetes アップストリームを使用するための新しいページルールを作成する必要があります。

ページルールページに移動します。

Edge アプリケーションのページルールページを開く

この「新規ルール」ボタンをクリックします。

OpenResty Edge で「新規ルール」ボタンをクリック

Proxy アクションを有効にします。

ページルールで Proxy アクションを有効化

この「アップストリームにプロキシ」ドロップダウンリストをクリックします。

「アップストリームにプロキシ」ドロップダウンリストを開く

先ほど作成した Kubernetes アップストリーム「my kubernetes backend」を選択します。

ページルールで「my kubernetes backend」Kubernetes アップストリームを選択

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

Kubernetes アップストリームへプロキシするページルールを保存

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

Edge アプリケーション向けに新しい設定バージョンをリリース

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

OpenResty Edge で設定リリースを確認

リリースします!

新しい OpenResty Edge 設定バージョンをリリース

同期が完了しました。

OpenResty Edge の設定が完全同期

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

OpenResty Edge が新しいページルールを各ゲートウェイクラスターとサーバーにプッシュ、フレーム 1

OpenResty Edge が各ゲートウェイサーバー間で設定を同期、フレーム 2

OpenResty Edge の設定がすべてのゲートウェイサーバーに完全同期、フレーム 3

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

設定変更がすべての OpenResty Edge ゲートウェイサーバーに同期、リロードや再起動は不要

テスト:Pod をスケールしてアップストリームの自動更新を確認する

次に、実際のテストを行うために、対応するパーティション内の Edge ゲートウェイサーバーを見つけます。ゲートウェイクラスターページに移動します。

OpenResty Edge のゲートウェイクラスターページを開く

対応するゲートウェイサーバーを見つけます。

テスト用の正しい Edge ゲートウェイサーバーを見つける

パブリック IP アドレスが .196 で終わっていることを覚えておいてください。

パブリック IP アドレスが .196 で終わる Edge ゲートウェイサーバー

この IP アドレスをコピーして、コマンドラインで使用できるようにします。

ターミナル上で、このゲートウェイサーバーを通じて Kubernetes サービスにアクセスしてみます。

ターミナルで Edge ゲートウェイサーバー経由の Kubernetes サービスアクセスを準備

先ほどコピーしたゲートウェイサーバーの IP アドレスを使用していることに注意してください。

curl コマンドでコピーした Edge ゲートウェイサーバーの IP アドレスを使用

このコマンドを実行します。

OpenResty Edge 経由で Kubernetes サービスに curl コマンドを実行

このサービスへのアクセスが成功していることがわかります。このチュートリアルの残りの部分では、Kubernetes サービスの設定を変更します。

OpenResty Edge 経由で Kubernetes サービスから正常な応答を取得

Kubernetes ノードの数をその場で(稼働させたまま)3 つに増やします。

kubectl scale --replicas=3 deployment test-hello

kubectl で test-hello デプロイメントを 3 レプリカにスケール

スケーリングが正常に完了しました。

test-hello デプロイメントが 3 レプリカに正常スケール

新しいノードを確認してみましょう。

kubectl get pods -o wide

kubectl get pods -o wide で新しい Pod を確認

現在、確かに 3 つの Kubernetes ノードがあります。

スケール後、現在 3 つの Kubernetes ノードが稼働

Edge Admin は自動的に Kubernetes アップストリームを更新して、この変更を反映します。

Edge アプリケーションページに戻って確認しましょう。

アップストリームを確認するため OpenResty Edge アプリケーションページに戻る

Kubernetes Pod をスケールした後の OpenResty Edge アプリケーションページ

アップストリームページに戻ります。

OpenResty Edge のアップストリームページに戻る

Upstreams ページをリフレッシュしてデータを更新します。

データの陳腐化を避けるためアップストリームページを更新

予想通り!Kubernetes アップストリームには確かに 3 台のサーバーがあります!

自動更新後、Kubernetes アップストリームに 3 台のサーバーが表示

同様に、Kubernetes ノードが減少した場合も、Edge Admin は自動的にアップストリームを更新します。以上が本日のご説明内容となります。

Kubernetes ノードの変化時に Edge Admin がアップストリームを自動更新

OpenResty Edge が Kubernetes ゲートウェイノードのライフサイクル全体(オートスケーリングイベントや複数クラスターの統合管理を含む)をどのように扱うかについては、OpenResty Edge × Kubernetes で実現する統合管理プレーン をご覧ください。

よくある質問

OpenResty Edge は Kubernetes の ingress コントローラーとして使えますか?

はい。OpenResty Edge は Kubernetes クラスターの ingress コントローラーとして機能し、Kubernetes コンテナ内で実行されるバックエンドアプリケーションへのトラフィックを管理します。Edge Admin で Kubernetes クラスターを登録し、K8s サービスにバインドした Kubernetes アップストリームを作成し、ページルールでそこへプロキシするだけです。Edge ゲートウェイサーバーは Kubernetes クラスターの内部でも外部でも実行できます。

Pod のスケーリング時に OpenResty Edge はどのようにアップストリームを更新しますか?

Edge の Admin サーバーが Kubernetes API サーバーを通じてクラスターを継続的に監視し、Kubernetes ノード(またはコンテナ)のオンライン・オフラインに合わせてアップストリームサーバーリストを自動的に更新します。本チュートリアルでは、test-hello デプロイメントを 3 レプリカにスケールしたところ、Kubernetes アップストリームが自動的に 3 台のサーバーを表示し、手動での変更は一切不要でした。

Kubernetes アップストリームの更新に OpenResty Edge のリロードや再起動は必要ですか?

いいえ。OpenResty Edge の設定変更やアップストリーム更新には、サーバーのリロード・再起動・バイナリアップグレードは必要ありません。変更はすべてのゲートウェイクラスターとサーバーにプッシュされてリアルタイムに同期されるため、高同時接続・高負荷のシナリオでも効率的でスケーラブルです。

OpenResty Edge のゲートウェイは Kubernetes クラスターの外部で実行できますか?

はい。Edge ゲートウェイサーバーは Kubernetes クラスターの内部でも外部でも実行できます。唯一の要件は、専用ゲートウェイパーティション内のゲートウェイサーバーが Kubernetes サービスに接続できることで、Edge Admin は Pod イベントを追跡するために Kubernetes の HTTPS API サーバーに接続します。

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

翻訳

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