◆ F5 - iRulesとは
iRulesはTCLベースのスクリプトであり、Virtual Serverに関連づけることでGUIやCLIの設定では
制御できないような複雑なトラフィック処理を実現できます。iRulesは細かい要件に基づいたPool
選択時によく使用されます。また、条件に合致したパケットの送信元アドレス変換、リダイレクト、
フォワード、ドロップなどを行えます。iRuleの処理は以下の3つの要素に分類することができます。
1. 処理を開始するためのトリガー(iRuleの発動イベント)
↓
2. 取得したデータ情報に基づいた条件(iRuleでのコンディション)
↓
3. トラフィックの処理(iRuleによる実行アクション)
これら3つの要素は以下のようにiRule上で定義します。実際のiRule上のワードは後に紹介します。
※ 1つのiRuleは64Kbyte以内のサイズにする必要があるため、サイズが大きい場合はイベントごとにiRuleを分離させます。
◆ iRule - 処理を開始するためのトリガー(iRuleの発動イベント)
BIG-IPでどのようなイベントが発生した際にiRuleの処理を行うのか定義します。主なイベントには
以下のようなものがあります。iRuleのイベントのコマンドとトラフィックの対比を見てみましょう。
イベントのコマンド |
説明 |
CLIENT_ACCEPTED |
Triggered when a client has established a connection.
|
CLIENT_DATA |
Triggered each time new data is received from the client
while the connection is in “collect” state.
|
CLIENTSSL_DATA |
Triggered each time new SSL data is received from the client
while the connection is in “collect” state.
|
SERVER_CONNECTED |
Triggered when a connection has been established with the target node.
|
SERVER_DATA |
Triggered when new data is received from the target node
after TCP::collect command has been issued.
|
HTTP_REQUEST |
An iRule event triggered when the system fully parses the complete
client HTTP request headers (that is, the method, URI, version,
and all headers, not including the HTTP request body).
|
HTTP_RESPONSE |
An iRule event triggered when the system parses all of the response
status and header lines from the server response.
|
LB_SELECTED |
Triggered when the system selects a pool member.
|
LB_FAILED |
Triggered when LTM is ready to send the request to a pool member and
one hasn’t been chosen (the system failed to select a pool or a pool member),
is unreachable (when no route to the target exists), has reached a queue
limit,
or is non-responsive (fails to respond to a connection request)
|
実現したい要件に応じて適切なイベントのコマンドを選ぶ必要がありますが、上図の内容からも
分かる通り、比較的よく使用されているイベントといえばCLIENT_ACCEPTEDと言えるでしょう。
なぜならバーチャルサーバ宛てのトラフィックをピックアップした時の発動イベントだからです。
※ イベントはこの他にも多くの種類があります。イベントの詳細はマニュアルで確認しましょう。
イベントはwhenコマンドの後に指定します。また、iRuleで複数のイベントのコマンドを使用する
ことができますが、その場合、トラフィックフローに基づいたイベントの順で処理されていきます。
|