レイヤ 7 コンテンツスイッチングの構成

NetScaler Application Delivery Management (ADM)はOpenStackと連携して、NetScalerインスタンスのレイヤー7(L7)スイッチング機能またはコンテンツベースのスイッチング機能を構成します。コンテンツスイッチは、指定した種類の要求を指定のサーバーに送信できるという点で単純な負荷分散とは異なります。NetScalerインスタンスをプロバイダーとしてOpenStackでL7構成を作成すると、NetScaler ADMはNetScalerインスタンスを割り当て、L7構成に対応するコンテンツスイッチング構成とレスポンダー構成をデプロイします。展開後、NetScalerインスタンスは、ユーザー要求のアプリケーションレイヤーの特性に応じてこれらの要求の配信および負荷分散を行うことができるようになります。

OpenStackのレイヤー7(L7)負荷分散機能では、負荷分散とコンテンツスイッチを組み合わせることで特定の種類のコンテンツを最適に配信できます。これにより、コンテンツに適用可能なポリシーのみを実行することにより、ロードバランサーのパフォーマンスが向上します。レイヤー7負荷分散では、アプリケーションインフラストラクチャの効率も向上できます。タイプ、URI、データに応じてコンテンツを分離できるため、アプリケーションインフラストラクチャへの物理リソースの割り当てを改善できます。たとえば、 http://example-sports.com/about-us を参照するエンドユーザーは、 http://example-sports.com/shopping-cart-football 会社およびサービスに関するコンテンツをホストするサーバーのプールによって提供され、を参照しているユーザーは、オンライン購入を可能にする別のサーバープールによって提供されます。

L7スイッチでは、ロードバランサーは、ユーザーからのHTTP要求を受け付けてアプリケーションサーバーに配信するコンテンツスイッチ仮想サーバーとして実装されます。L7スイッチまたはコンテンツスイッチでは、WebアプリケーションやWebサービスポータル、Webメールだけでなく、モバイル管理や異なる言語のコンテンツなども含むさまざまなバックエンドサービスにアクセス可能な単一のエントリポイントを設定できます。つまり、1つのパブリックIPアドレスで、ユーザーに提供するサービスすべてに対応できるということです。

低レベルの負荷分散とは異なり、レイヤー7スイッチではプール内の全サーバーのコンテンツを同じにする必要はありません。L7スイッチを使用するロードバランサーの構成では、アプリケーションサーバーまたはバックエンドサーバーとプールのコンテンツを違うものにする必要があります。L7スイッチでは、URIやホスト、HTTPヘッダーなど、アプリケーションメッセージに含まれるあらゆる要素を基に要求を送信できます。アプリケーションサーバーは、基本的に特定の種類のコンテンツを提供します。たとえば、あるサーバーは画像のみを提供でき、別のサーバーは PHP や ASP などのサーバーサイドスクリプト言語を実行し、別のサーバーは HTML、CSS、JavaScript などの静的コンテンツを提供できます。

L7の規則

トラフィックの評価規則では以下の属性が定義されており、規則で定義されている値と比較されます。

  • ホスト名:HTTP 要求内のホスト名は、ルールの value パラメータと比較されます。(「www.example-sports.com」など)。

  • path:HTTP URIのパス部分が、規則のこの値パラメーターと比較されますたとえば、「www.example-sports.com/shopping-cart/football_pump.html」

  • file_type:HTTP URIの最後の部分が、規則のこの値パラメーターと比較されますたとえば、txt、html、JPG、PNG、xls、その他。

  • header:キーパラメーターで定義されているヘッダーが、規則のこの値パラメーターと比較されます。

  • cookie:キーパラメーターで指定されているCookieが、規則のこの値パラメーターと比較されます。要求ヘッダーフィールドのCookie値には、該当するURLに格納されている情報の名前と値のペアが含まれています。一般的な構文は「Cookie: 名前=値」です。たとえば、値が「football-」で始まる「stores」という名前のクッキーを検索するルールは、「type = Cookie、compare_type=startsWith」、「key = storesvalue = football-」のようになります。

比較型

トラフィックの評価時には、L7ポリシーにより以下の式と規則で定義されている値が比較されます。

  • regex:Perl型の正規表現マッチング

  • starts_with:次で始まる文字列

  • ends_with:次で終わる文字列

  • contains:次を含む文字列

  • equal_to:次に等しい文字列

注:

ホスト名、パス、ヘッダー、および Cookie 属性はすべての比較タイプをサポートしますが、file_type 属性は regex と equal_to のみをサポートします。

L7ポリシー

L7ポリシーは受信HTTPトラフィックを処理し、このポリシーで定義されているすべての規則が満たされている場合「true」を返します。

すべてのL7ポリシーで、規則はすべてAND演算子により論理的に結合されます。要求はすべての規則を満たす必要があり、すべての規則が満たされた場合ポリシーは「true」値を返します。ロードバランサーが実行するアクションは、ポリシーから返される値に基づきます。アクションが同じ2つ目のポリシーを作成し、規則どうしで論理OR演算を行うことができます。

たとえば、単語「EXAMPLE-SPORTS」、「SPORTS-FOOTBALL」、または「EXAMPLE-FOOTBALL」を含む受信HTTP要求を許可するポリシーを作成し、ロードバランサーには、適切なアクションとして、要求されたコンテンツを提供するEコマース企業であるExample-sportsのサーバープールにこれらの要求を転送させるとします。同じアクションを実行するものの「example-sports」、「example-sports-football」、「example-football」とのマッチングを行う別のポリシーを作成します。ユーザーがこれら6個のキーワードのいずれかを含むHTTP要求を送信すると、ロードバランサーはその要求をExample-Sportsサーバーに転送します。

ポリシーの定義規則に応じて、L7ポリシーでは以下のアクションのいずれかを行うことができます。

  • プールへのリダイレクト - L7ポリシーに関連付けられた規則で指定されているアプリケーションサーバープールに要求を転送します。これにより、ドメイン名に応じて要求を特定のロードバランサープールに送信するアプリケーション規則を作成できます。たとえば、example-football.comに対する要求をpool_1に、example-sports-online_purchase.comに対する要求をpool_2に送信するルールを作成できます。

  • URLへのリダイレクト - クライアントを、Location応答ヘッダーに新しい場所が設定されたリダイレクトHTTP応答に送信します。Webブラウザーのアドレスバーはこの新しい場所で更新され、新しい要求が発行されます。このアクションの使用例は多岐にわたります。たとえば、Webサイトのアドレスが変更された場合、ドロップを行うことなく要求を新しいアドレスにリダイレクトすることができます。また、Webサイトのメンテナンス中にユーザーを読み取り専用のサイトにリダイレクトすることも可能です。

  • 拒否 - 要求を拒否し、それ以上のアクションを行いません。たとえば、401 無許可応答を返して、制限された Web ページのユーザーへのアクセスを拒否できます。

コンテンツスイッチの構成には、コンテンツスイッチ仮想サーバー、負荷分散仮想サーバーとサービスから成る負荷分散セットアップ、およびコンテンツスイッチポリシーが含まれます。コンテンツスイッチ仮想サーバーとコンテンツスイッチポリシーの作成後、各ポリシーをコンテンツスイッチ仮想サーバーにバインドします。ポリシーをコンテンツスイッチ仮想サーバーにバインドするときには、ターゲットとなる負荷分散仮想サーバーを指定します。要求がコンテンツスイッチ仮想サーバーに到達すると、仮想サーバーはその要求に対して関連するコンテンツスイッチポリシーを適用します。ポリシーの優先順位により、コンテンツスイッチ仮想サーバーにバインドされたポリシーを評価する順序を定義します。

リスナーIDが設定されているプールはすべて、トラフィックの迂回先となるデフォルト仮想サーバープールに割り当てることができます。プールとリスナーのバインドはゆるく、プールはL7ポリシーの実装でのみリスナーと関連付けられます。プールは、リスナーに関連付けることなくロードバランサーの下に直接作成することもできます。この場合、作成されたプールは「pending_create」状態となります。L7ポリシーとリスナーのバインドは密接であるため、プールを「active」状態にしてトラフィック要求の受信を開始するには、プールIDを含むL7ポリシーを作成して実装する必要があります。

1つのプールを複数のL7ポリシーで提供できますが、1つ以上のポリシーが関連付けられている場合プールは「active」のままとなります。最後のポリシーが削除されるとプールは「pending_create」状態に戻り、別のポリシーを作成して関連付けるまでその状態のままとなります。プール自体が削除されると、このプールが受信するはずであったHTTP要求はすべてデフォルトプールにリダイレクトされます。

OpenStack L7ポリシーとNetScalerエンティティ間のマッピング

     
OpenStack NetScalerのエンティティ 説明
REDIRECT_TO_POOLアクションが設定されたL7ポリシー コンテンツスイッチポリシー>コンテンツスイッチアクション NetScaler ADMは、コンテンツスイッチ仮想サーバーにバインドされ、コンテンツの取得とユーザーへの表示の対象となるアプリケーションサーバーのターゲットプールを指定するコンテンツスイッチングアクションに関連付けられたコンテンツスイッチングポリシーを作成します。
REDIRECT_TO_URLアクションが設定されたL7ポリシー レスポンダーポリシー>レスポンダーアクション NetScaler ADMは、コンテンツスイッチ仮想サーバーにバインドされ、ユーザーに表示されるターゲットURLを指定するレスポンダーアクションに関連付けられたレスポンダーポリシーを作成します。
REJECTアクションが設定されたL7ポリシー レスポンダーポリシー>要求のドロップ NetScaler ADMは、コンテンツスイッチ仮想サーバーにバインドされ、リクエストをドロップするレスポンダーアクションに関連付けられたレスポンダーポリシーを作成します。

「true」と評価されたL7ポリシーのアクションにより、「create_pending」状態のプールにトラフィックがリダイレクトされる場合、NetScaler ADMは指定されたプールと負荷分散仮想サーバーを実装します。NetScaler ADMは、L7ポリシーからコンテンツスイッチングポリシーを作成し、対応するコンテンツスイッチングアクションを使用して、そのプールに関連付けられている負荷分散仮想サーバーに要求をリダイレクトします。2つ目のL7ポリシーが同じプールにリダイレクトする場合、NetScaler ADMはコンテンツスイッチングポリシーとコンテンツスイッチングアクションを作成して、プールに関連付けられている既存の負荷分散仮想サーバーにトラフィックをリダイレクトします。

ポリシーの順位付け

OpenStackでのL7ポリシーの評価は、ポリシーの優先度に従って行われます。デフォルトでは、OpenStackのポリシーは作成された順番に優先度が付けられます。最初に作成されたポリシーが「1」番となり、以降に作成されたポリシーには連続した番号が付けられます。ただし、ポリシーの優先順位を変更し、異なる優先度を割り当てることができます。ポリシーは常に優先度の順番に評価されます。特定の要求に一致する最初のポリシーは、常に最初に実行される。

ポリシーを作成する場合、以下の点に注意してください。

  • 新しいポリシーに既存のポリシーと同じ優先度を割り当てた場合、その優先度は新しいポリシーに設定されます。既存のポリシーの優先度は下がります。必要に応じて、ポリシーの評価順序を維持するために別のポリシーの優先度が下げられることもあります。

  • 優先順位を指定せずに新しいポリシーを作成した場合、新しいポリシーはポリシーリストの末尾に追加されます。

  • 新しいポリシーを作成し、リストに既に存在するポリシーの数よりも大きい順位を付けた場合、新しいポリシーはリストの末尾に追加されます。つまり、新しいポリシーには、次に利用可能な優先度が常に設定されます。たとえば、優先順位が1、2、3のポリシーA、B、Cがある場合にポリシーを作成し優先順位として8を割り当てると、新しいポリシーの優先順位は4になります。

  • リストにポリシーを追加するかリストからポリシーを削除すると、ポリシーの優先順位の値は1から順に連続して付け直されます。たとえば、優先順位の値が1、2、3、4のポリシーA、B、C、Dがある場合にリストからポリシーBを削除すると、ポリシーCの優先順位が2となり、ポリシーDの優先順位は3となります。

NetScaler ADMでは、常に優先度1のデフォルトポリシーがcsvserverに関連付けられています。このデフォルトポリシーは、 特定の時点でlbvserverで処理する TCP 接続の数を指定します。したがって、対応するレスポンダーポリシーとコンテンツスイッチングポリシーがNetScaler ADC で作成されると、対応するL7ポリシーの優先度よりも高い優先度が常に割り当てられます。たとえば、優先順位が1のL7ポリシーを評価する場合、優先順位が2のコンテンツスイッチポリシーが作成されます。同様に、優先順位が2のL7ポリシーを評価する場合、優先順位が3のレスポンダーポリシーが作成されます。

OpenStack では、最初に「拒否」または「redirect_to_url」ポリシーが評価され、次に「redirect_to_pool ポリシー」が評価されます。NetScaler インスタンスでは、レスポンダーポリシーは常に最初に評価され、リクエストを削除するか、リダイレクトされたWebアドレスをユーザーに提示します。コンテンツスイッチングポリシーは最後に評価されます。通常、コンテンツスイッチポリシーとレスポンダーポリシーが相互に排他的であれば、この評価順により競合が発生することはありません。つまり、2 つの L7 ポリシーが同じ式を持つことはできません。派生式は、このような競合を回避するために、応答側およびコンテンツスイッチングポリシーに追加されます。たとえば、「sports-football.com」に対する要求をすべて拒否する式と、「example-sports-football.com」に対する要求を許可する別の式を作成してください。要求を拒否するすべてのレスポンダーポリシーを評価リストの先頭に配置し、その後にWebリダイレクト用のレスポンダーポリシー、コンテンツスイッチポリシーの順となるようにL7ポリシーを作成してください。

NetScaler ADMでは、常に優先度1のデフォルトポリシーがcsvserverに関連付けられています。このデフォルトポリシーは、 特定の時点でlbvserverで処理する TCP 接続の数を指定します。したがって、対応するレスポンダーポリシーとコンテンツスイッチングポリシーがNetScaler ADC で作成されると、対応するL7ポリシーの優先度よりも高い優先度が常に割り当てられます。たとえば、優先順位が1のL7ポリシーを評価する場合、優先順位が2のコンテンツスイッチポリシーが作成されます。同様に、優先順位が2のL7ポリシーを評価する場合、優先順位が3のレスポンダーポリシーが作成されます。

OpenStack では、最初に「拒否」または「redirect_to_url」ポリシーが評価され、次に「redirect_to_pool ポリシー」が評価されます。NetScaler では、レスポンダーポリシーは常に最初に評価され、リクエストを削除するか、リダイレクトされたWebアドレスをユーザーに提示します。コンテンツスイッチングポリシーは最後に評価されます。通常、コンテンツスイッチポリシーとレスポンダーポリシーが相互に排他的であれば、この評価順により競合が発生することはありません。つまり、類似する表現を持つ L7 ポリシーが 2 つありません。このような競合を回避するために、応答側とコンテンツスイッチングポリシーに、同様の派生式が追加されます。たとえば、「sports-football.com」に対する要求をすべて拒否する式と、「example-sports-football.com」に対する要求を許可する別の式を作成してください。要求を拒否するすべてのレスポンダーポリシーを評価リストの先頭に配置し、その後にWebリダイレクト用のレスポンダーポリシー、コンテンツスイッチポリシーの順となるようにL7ポリシーを作成してください。

構成タスク

Neutron LBaaSコマンドを使用して、L7ポリシーとアクションを実装します。

OpenStackで環境変数を設定し、ロードバランサーを作成します(例:LB1)。ロードバランサーを正常に作成できたら、リスナーとプール(例:L1、P1、P2)を作成しプールにメンバーとモニターを追加します。たとえば、P1をL1のデフォルトプールに設定し、P2はLB1に関連付け、アプリケーションサーバーを管理するプールにします。

コマンドラインを使用して LBaaS V2 を設定する方法の詳細については、「コマンドラインを使用した LBaaS V2 の設定」を参照してください。

以下のコマンドにより、ポリシーを定義して特定のアクションを定義します。

要求をドロップするL7ポリシーの作成

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action<action-name>

neutron lbaas-l7policy-create –name policy11 –action REJECT –listener L1

上記のコマンドでは、要求を拒否するレスポンダーポリシーpolicy11を作成して、コンテンツスイッチサーバーにバインドします。このポリシーには規則が作成されていないため、ポリシーは「false」と評価され要求が拒否されます。

特定のURLに要求をリダイレクトするL7ポリシーの作成

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-url <redirect-url>

neutron lbaas-l7policy-create–name policy12 —action REDIRECT_TO_URL —listener admin-list1 —redirect-url http://example-sports/about-us.html

上記のコマンドでは、URLへ要求をリダイレクトするレスポンダーアクションを作成し、このアクションが設定されたレスポンダーポリシーを作成してコンテンツスイッチ仮想サーバーにバインドします。

neutron lbaas-l7rule-create --type HOST_NAME --compare-type CONTAINS --value <value-string> <L7 policy name>

neutron lbaas-l7rule-create --type PATH --compare-type CONTAINS --value <value-string> <L7 policy name>

上記2つの規則はAND演算子により結合され、レスポンダーポリシーの式が導出されます。

プールに要求をリダイレクトするL7ポリシーの作成

neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-pool <redirect-pool>

neutron lbaas-l7policy-create –name policy13 –action REDIRECT_TO_POOL –listener admin-list1 –redirect-pool admin-pool2

このL7ポリシーが最初のポリシーである場合、上記のコマンドではLB1とともにP2が実装され、コンテンツスイッチリダイレクトアクションが作成されて要求がLB1へリダイレクトされます。P2が既に存在する場合、このコマンドではコンテンツスイッチリダイレクトアクションが作成され、要求がLB1にリダイレクトされます。

レイヤ 7 コンテンツスイッチングの構成