はじめに
OCIのフレキシブルロードバランサー(FLB)では、「ルーティング・ポリシー」と呼ばれるルーティングルールを使用することで、ルールに応じて特定のバックエンドセットにアクセスを振り分けることが可能です。この機能の動作確認を行ったため、備忘録として記載します。
なお、動作確認に必要なCompute,VCN,Subnet等の作成作業についての記載は本記事では省略します。
フレキシブルロードバランサー(FLB)のルーティング・ポリシー
ルーティング・ポリシーとは、ロードバランサーのリスナーに適用されるルーティングルールの名前付きのリストで、ルールは順序指定が可能です。
ルールで定義した特定の条件に一致するかどうかに基づいて、受信トラフィックをルーティングすることができます。ルーティング・ポリシーでは、「パス」、「リクエストCookie」、「リクエスト・ヘッダー」、「URL問い合わせ」、「ネストした一致」を条件に使用することが可能です。これらのルールとバックエンドセットを紐づけることで、振り分け先の選択が可能となります。
今回は、「リクエスト・ヘッダー」を条件に使用した振り分けの動作確認を行いました。
バックエンドセット作成
はじめにバックエンドセットを用意します。条件に応じて振り分け先のバックエンドセットが変化しているかを確認するために、今回はバックエンドセットを以下のように2つ作成しました。
各バックエンドセットには1インスタンスずつComputeを登録しています。アクセス先が変わっているかを判別するために、各インスタンスにあるindex.htmlの内容を修正しています。
ルーティング・ポリシー作成
続いてルーティングポリシーを作成します。今回は、ルールを二つ用意しています。リクエストヘッダーに含まれる「Test」の値を条件に、振り分け先のバックエンドセットをそれぞれ指定しています。
今回の例では、「Test」の値が"A"である場合はバックエンドセット「bs_1」、「Test」の値が"B"である場合はバックエンドセット「bs_2」にトラフィックが流れます。
リスナーへのルーティング・ポリシー登録
上記で作成したルーティング・ポリシーをFLBのリスナーに紐づけます。リスナーの編集画面を開き、「ルーティング・ポリシー」の項目から今回作成したルーティング・ポリシーを選択します。
動作確認
実際にFLBに対してcurlでhttpリクエストを実行してみます。リクエストする際には、判定に使用する「Test」をヘッダーに付与して実行します。XXXには、FLBのIPアドレスを指定します。
curl -H Test:A http://XXX.XXX.XXX.XXX:80
curl -H Test:B http://XXX.XXX.XXX.XXX:80
実行した結果、以下の通り「Test」の値に応じて異なるバックエンドセットにアクセスしていることが確認できました。
本当はリクエスト送信元のIPアドレスで振り分けを行いたかったのですが、リクエストヘッダーにはIPアドレスを判別可能な情報が入っていなかったため断念しました。
ただ、アプリケーションからhttpリクエストを行う際にヘッダに追加することは可能なので、その際の振り分けには利用可能な機能だと思われます。
追記(2023/9/4)
以前はcurlコマンドで確認を行いましたが、Google ChromeにはModHeaderという拡張機能があります。この拡張機能を利用すると、リクエストヘッダーを追加することが可能です。
chromeウェブストアにアクセスしてModHeaderを入手します。
ChromeにModHeaderを追加するとアドレスバーの横にアドオンのアイコンが表示されるため、その中からModHeaderを選択します。
ModHeaderをクリックして「+MOD」>「MODS」>「Request header」を選択すると、ヘッダーに追加するフィールド名と値を入力画面が表示されます。
リクエストを送りたいページに遷移した状態でフィールド名と値を設定し、ブラウザでページのリロードを行うと、入力した内容が追加された状態でリクエストが送られます。
curlコマンドで動作確認した時と同じルーティングポリシーで、動作確認をした結果です。(curlコマンドを使用した時と同様な結果になっていることが分かります)