レイヤー7コンテンツスイッチングを構成する

最終公開日 : Oct 02, 2026
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 要求のホスト名は、ルールの値パラメーターと比較されます。例: 「www.example-sports.com」。
  • パス: HTTP URI のパス部分は、ルールの値パラメーターと比較されます。例: 「www.example-sports.com/shopping-cart/football_pump.html」
  • file\_type: URI の最後の部分は、ルールの値パラメーターと比較されます。例: txt、html、jpg、PNG、xls など。
  • ヘッダー: キーパラメーターで定義されたヘッダーは、ルールの値パラメーターと比較されます。
  • クッキー: キーパラメーターで指定されたクッキーは、ルールの値パラメーターと比較されます。クッキー要求ヘッダーフィールドの値には、その URL に保存されている情報の名と値のペアが含まれます。一般的な構文は次のとおりです - Cookie: name=value。たとえば、「stores」という名前のクッキーで「football-」で始まる値を探すルールは次のようになります: type = Cookie, compare_type=StartsWith, key = stores value = 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演算を実現できます。
例えば、受信HTTPリクエストに「EXAMPLE-SPORTS」、「SPORTS-FOOTBALL」、または「EXAMPLE-FOOTBALL」という単語が含まれている場合に、ロードバランサーが要求されたコンテンツを提供するためにこれらのリクエストをExample-sports eコマース企業のサーバープールに転送するという適切なアクションを実行するポリシーを作成できます。同じアクションを実行する別のポリシーを作成することもできますが、そのポリシーは「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にリダイレクト - クライアントにリダイレクトHTTPレスポンスを送信します。そのレスポンスのLocationヘッダーには新しい場所が含まれます。ブラウザはアドレスバーを新しい場所に更新し、新しいリクエストを発行します。ユースケースは多数あります。例えば、ウェブサイトのアドレスが変更された場合、リクエストを破棄する代わりに新しいアドレスにリダイレクトできます。または、ウェブサイトのメンテナンス中に、ユーザーを読み取り専用サイトにリダイレクトできます。
  • 拒否 - リクエストを拒否し、それ以上のアクションは実行しません。例えば、制限されたウェブページへのユーザーのアクセスを拒否するために、401 Unauthorizedレスポンスを返すことができます。
コンテンツスイッチング構成は、コンテンツスイッチング仮想サーバー、ロードバランシング仮想サーバーとサービスからなるロードバランシング設定、およびコンテンツスイッチングポリシーで構成されます。コンテンツスイッチング仮想サーバーとポリシーを作成した後、各ポリシーをコンテンツスイッチング仮想サーバーにバインドします。ポリシーをコンテンツスイッチング仮想サーバーにバインドする際、ターゲットのロードバランシング仮想サーバーを指定します。リクエストがコンテンツスイッチング仮想サーバーに到達すると、仮想サーバーは関連付けられたコンテンツスイッチングポリシーをそのリクエストに適用します。ポリシーの優先順位は、コンテンツスイッチング仮想サーバーにバインドされたポリシーが評価される順序を定義します。
リスナーIDを持つ任意のプールは、トラフィックが転送される仮想サーバーのデフォルトプールとして割り当てることができます。プールはリスナーと緩やかに結合されており、L7ポリシーの実装を通じてのみリスナーと関連付けられます。プールは、リスナーに必ずしも関連付けられていなくても、ロードバランサーの直下に作成することもできます。そのような場合、プールは「pending\_create」状態として作成されます。L7ポリシーはリスナーと密接に結合されているため、プールが「active」になりトラフィック要求の受信を開始するには、プールIDを含むL7ポリシーを作成し、実装する必要があります。
プールは複数の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の3つのポリシーA、B、Cがある場合、ポリシーを作成して優先順位8を割り当てると、新しいポリシーの優先順位は4になります。
  • リストにポリシーを追加したり、リストからポリシーを削除したりすると、ポリシーの位置の値は番号をスキップせずに1から再順序付けされます。たとえば、ポリシーA、B、C、Dが位置の値1、2、3、4を持っている場合、リストからポリシーBを削除すると、ポリシーCが2番目の位置を占め、ポリシーDが3番目の位置を占めます。
NetScaler ADMでは、常に優先順位1のcsvserverに関連付けられたデフォルトポリシーが存在します。このデフォルトポリシーは、lbvserverが任意の時点で処理するTCP接続の数を指定します。したがって、NetScalerで対応するレスポンダーポリシーとコンテンツスイッチングポリシーが作成されるとき、それらは常に、対応するL7ポリシーの優先順位よりも1つ高い優先順位が割り当てられます。たとえば、優先順位1のL7ポリシーが評価され、優先順位2のコンテンツスイッチングポリシーが作成される場合です。同様に、優先順位2のL7ポリシーが評価され、優先順位3のレスポンダーポリシーが作成される場合です。
OpenStackでは、「reject」または「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で対応するレスポンダーポリシーとコンテンツスイッチングポリシーが作成されるとき、それらは常に、対応するL7ポリシーの優先順位よりも1つ高い優先順位が割り当てられます。たとえば、優先順位1のL7ポリシーが評価され、優先順位2のコンテンツスイッチングポリシーが作成される場合です。同様に、優先順位2のL7ポリシーが評価され、優先順位3のレスポンダーポリシーが作成される場合です。
OpenStackでは、「reject」または「redirect\_to\_url」ポリシーが最初に評価され、次に「redirect\_to\_pool」ポリシーが評価されます。NetScalerでは、レスポンダーポリシーは常に最初に評価され、リクエストを破棄するか、リダイレクトされたWebアドレスをユーザーに提示し、コンテンツスイッチングポリシーは最後に評価されます。この評価順序は、コンテンツスイッチングポリシーとレスポンダーポリシーが相互排他的である場合、通常は競合を引き起こしません。つまり、2つのL7ポリシーが類似の式を持つことはありません。このような競合を避けるために、類似の導出された式がレスポンダーポリシーとコンテンツスイッチングポリシーに追加されます。たとえば、「sports-football.com」へのすべてのリクエストを拒否する式と、「example-sports-football.com」へのリクエストを許可する式を作成します。リクエストを拒否するすべてのレスポンダーポリシーが評価リストの最上位に配置され、その後にWebダイレクト用のレスポンダーポリシー、その後にコンテンツスイッチングポリシーが続くようにL7ポリシーを作成します。

構成タスク

L7ポリシーとアクションの実装は、Neutron LBaaSコマンドを通じて実行されます。
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にリダイレクトします。