BIG-IP Global Traffic Manager(以下、BIG-IP GTM)用のiRuleをご紹介します。

機能:
*特定の条件において、パーシステンスを利用していないWideIPへDNSリクエストを誘導する。
BIG-IP Local Traffic Manager(以下、BIG-IP LTM)と同様に、BIG-IP GTMには「パーシステンス」という機能があります。
BIG-IP LTMのパーシステンスでは、あるクライアントからの2回目以降のリクエストが、1回目のリクエストと同じサーバへBIG-IP LTMから振り分けられます。
ではBIG-IP GTMではどうでしょうか?
BIG-IP GTMではWideIPという機能によって、DNSクエリに対してDNSレスポンスを返します。
BIG-IP GTMのパーシステンスとは、あるクライアントからの2回目以降のDNSクエリに対して、1回目のクエリと同じIPアドレスをDNSレスポンスとして応答すること事を意味します。

BIG-IP LTMのパーシステンスでは、リクエストしたURLなどの特定条件によって、iRuleでパーシステンスを意図的に実施しないこともケースも存在します。
たとえば画像などの特定ファイルはどのサーバからでもダウンロードできるので、パフォーマンスのためパーシステンス中のサーバでなく、さまざまなサーバからダウンロードするようにケースが該当します。
このようなケースでは「persist none」のコマンドで実現します。
BIG-IP GTMでは、同様に特定の条件によって、WideIPのパーシステンスを利用しないことも考えられます。
しかし、BIG-IP GTM用のiRuleでは、persist noneのコマンドが存在しないため、GUIの設定ではWideIP全体のパーシステンスをOn/Offする設定しか使えません。

そのため、特定DNSリクエストに対してパーシステンスを利用しない動作には、特別な方法が必要です。
具体的にBIG-IP GTMでパーシステンスがOnとなっている1つのWideIPと、パーシステンスがOffとなっているもう1つのWideIPを用意します(合計2つ)。
普段はパーシステンスがOnとなっているWideIPでリクエストを受信します。
そのWideIPでiRuleを設定し、そのiRuleで通常のコマンド(if, switchなど)を使って、特定の条件に対してあるcnameをDNSレスポンスとして返します。
もちろん、そのcnameはパーシステンスがOffとなっているWideIPのことです。

使い方:
*2つのWideIPを用意:1つにパーシステンスが有効となり、もう1つはパーシステンスが無効となる
*その他のWideIPの設定はどちらも同じ
*特定の条件を決め、iRule化する
*iRuleをパーシステンスが有効となっているWideIPに設定
*通常パーシステンスが有効となっているWideIPに対してのDNSリクエストを受信(コンテンツ内にリンク名などはそのWideIPを利用)

注釈:
以下の例では、クライアントIPアドレスが10.1.0.0/16か10.2.0.0/16のサブネットの場合、myService-noPersist.gtm.test.comというWideIPへ誘導するようにします。 

【iRule定義】

rule "SelectivePersist-rule" {
  when DNS_REQUEST {
    if { [IP::addr [IP::client_addr]/16 equals "10.1.0.0"] \
      or [IP::addr [IP::client_addr]/16 equals "10.2.0.0"] } {
              cname "myService-noPersist.gtm.test.com"
    }
  }
}

【WideIP定義】

(iRuleとパーシステンスを設定したWideIP)
wideip {
   name         "myService.gtm.test.com"
   persist      yes
   persist_ttl  1800
   pool_lbmode  rr
   pool         "myPool"
   rule         "SelectivePersist-rule"
}

(パーシステンスを無効にしたWideIP)
wideip {
   name         "myService-noPersist.gtm.test.com"
   pool_lbmode  rr
   pool         "myPool"
}

※F5ネットワークスジャパンでは、サンプルコードについて検証を実施していますが、お客様の使用環境における動作を保証するものではありません。実際の使用にあたっては、必ず事前にテストを実施することを推奨します。