リライトおよびレスポンダーポリシー
rewritepolicyカスタムリソース定義(CRD)を使用すると、Kubernetesネイティブ構成を使用してNetScaler®でリライトおよびレスポンダーポリシーを構成できます。これらのポリシーにより、リクエストとレスポンスの情報をリライトしたり、リクエストの特性に基づいてリクエストに応答したりできます。
rewritepolicy CRDは、次のようなシナリオで使用できます。
-
リクエストまたはレスポンスのURL、ホスト名、またはヘッダーをリライトする。
-
HTTPヘッダーを挿入、削除、または置換する。
-
リクエストを別のURLにリダイレクトする、カスタムペイロードで応答する、または接続をドロップしてリセットする。
-
ポリシー式でデータセット、パットセット、および文字列マップを参照する。
-
ポリシー決定で使用される情報を取得するために、外部エージェントへのHTTPコールアウトを行う。
rewritepolicy CRDは、ExtensionRefフィルターを介してaigatewayrouteから参照されるか、servicenamesまたはtargetRefを介してサービスに直接適用されます。
注:
rewrite-policiesまたはresponder-policiesの少なくともいずれか1つを指定する必要があります。
rewritepolicy CRDを展開する
rewritepolicy CRDをダウンロードし、次のコマンドを使用して展開します。
kubectl create -f https://raw.githubusercontent.com/netscaler/netscaler-k8s-ingress-controller/refs/heads/master/crd/rewrite-policy/rewrite-responder-policies-deployment.yaml
注:
CRD展開YAMLファイルを変更しないでください。
リライトポリシー CRD 属性
以下の表に、
rewritepolicy CRD の spec で利用可能なトップレベルの属性を示します。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
ingressclass |
イングレスクラス。指定されていない場合、クラスター内のすべてのNetScaler Ingress Controllerがリソースを処理します。それ以外の場合、そのイングレスクラスを持つコントローラーのみがそれを処理します。 | 文字列 |
gatewayClassName |
このプロファイルが適用される GatewayClass の名前。 |
文字列 |
targetRef |
このプロファイルが適用されるターゲットリソースのリスト (name, namespace, group, kind, sectionName)。 |
配列 |
rewrite-policies |
リライトポリシーのリスト。 | 配列 |
responder-policies |
レスポンダーポリシーのリスト。 | 配列 |
dataset |
ポリシー式によって参照されるデータセットのリスト。 | 配列 |
patset |
ポリシー式によって参照されるパターンセットのリスト。 | 配列 |
stringmap |
ポリシー式によって参照される文字列マップのリスト。 | 配列 |
httpcallout_policy |
HTTPコールアウト設定のリスト。 | 配列 |
リライトポリシー
rewrite-policies の各エントリは、次の属性をサポートしています。rewrite-policy オブジェクトは必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
servicenames |
リライトポリシーにバインドするサービスの名前。 | 文字列の配列(最大長127) |
goto-priority-expression |
現在のポリシーが TRUE と評価された場合に、次に評価するポリシーを指定する式または値。NEXT は次に高い優先度番号を持つポリシーを評価し、END はポリシー評価を終了します。デフォルトは END です。 |
文字列(最大長1499) |
logpackets |
監査メッセージアクションを追加します (logexpression, loglevel)。 |
オブジェクト |
rewrite-policy |
リライトポリシーの定義。このオブジェクトは必須です。 | オブジェクト |
rewrite-policy オブジェクトは次の属性をサポートしています。rewrite-criteria、operation、target、および direction 属性は必須です。
| 属性 | 説明 | サポートされる値 |
|---|---|---|
rewrite-criteria |
トラフィックが評価される式。必須。 | 文字列 (最大長 1299) |
operation |
ユーザー定義のリライトアクションのタイプ。必須。 | noop、delete、insert_http_header、delete_http_header、corrupt_http_header、insert_before、insert_after、replace、replace_http_res、delete_all、replace_all、insert_before_all、insert_after_all、およびその他のサポートされる操作 |
target |
リクエストまたはレスポンスのどの部分を書き換えるかを指定するデフォルト構文の式。必須。 | 文字列 (最大長 1229) |
direction |
ポリシーをバインドするバインドポイント。必須。 | REQUEST, RESPONSE |
default-action |
ポリシー評価の結果が未定義 (UNDEF) の場合に実行するアクション。 | NOREWRITE, RESET, DROP |
modify-expression |
挿入するコンテンツ、または指定された文字列を置き換えるコンテンツを指定するデフォルト構文の式。 | 文字列 (最大長 7991) |
multiple-occurence-modify |
リクエストまたはレスポンス内の複数の文字列を照合するために使用される検索機能。 | 文字列 (最大長 171) |
additional-multiple-occurence-modify |
検索結果を絞り込むための追加条件。extend(m,n) 操作で始まります。 |
文字列 (最大長 1299) |
comment |
このリライトポリシーに関する情報を保持するためのコメント。 | 文字列 (最大長 255) |
レスポンダーポリシー
responder-policies の各エントリは、次の属性をサポートしています。responder-policy オブジェクトは必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
servicenames |
レスポンダーポリシーにバインドするサービスの名前。 | 文字列の配列 (最大長 127) |
goto-priority-expression |
現在のポリシーが TRUE と評価された場合に、評価する次のポリシーを指定する式または値。デフォルトは END です。 |
文字列 (最大長 1499) |
logpackets |
監査メッセージアクションを追加します (logexpression, loglevel)。 |
オブジェクト |
responder-policy |
レスポンダーポリシーの定義。このオブジェクトは必須です。 | オブジェクト |
responder-policy オブジェクトは次の属性をサポートします。respond-criteria 属性は必須であり、redirect、respondwith、noop、reset、または drop のいずれか1つを指定する必要があります。
| 属性 | 説明 | サポートされる値 |
|---|---|---|
respond-criteria |
ポリシーがリクエストに応答するかどうかを決定するために使用するデフォルト構文の式。必須。 | 文字列 (最大長 1299) |
redirect |
ポリシーに一致した場合にリクエストをリダイレクトする (url 必須, redirect-status-code, redirect-reason)。 |
オブジェクト |
respondwith |
ポリシーに一致した場合にリクエストに応答する (http-payload-string 必須)。 |
オブジェクト |
noop |
リクエストに応答する代わりに、保護されたサーバーにリクエストを送信します。 | オブジェクト |
reset |
リクエストがポリシーに一致した場合、クライアント接続を閉じてリセットします。 | オブジェクト |
drop |
ポリシーに一致した場合、応答を送信せずにリクエストを破棄します。 | オブジェクト |
default-action |
ポリシー評価の結果が未定義 (UNDEF) の場合に実行するアクション。 | NOOP, RESET, DROP |
comment |
このレスポンダーポリシーに関する情報を保持するためのコメント。 | 文字列 (最大長 255) |
データセット
dataset の各エントリは、次の属性をサポートしています。name、type、および values 属性は必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
name |
データセットの名前。 | 文字列 (最大長 32) |
type |
データセットにバインドする値のタイプ。 | ipv4, number, ipv6, ulong, double, mac |
values |
このデータセットに関連付けられた、指定された型の値。 | 文字列の配列 |
comment |
このデータセットに関する情報を保持するためのコメント。 | 文字列(最大長255) |
パットセット
patset の各エントリは、次の属性をサポートしています。name および values 属性は必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
name |
パットセットの名前。 | 文字列(最大長32) |
values |
このパットセットに関連付けられたパターンを構成する文字列。 | 文字列の配列 |
comment |
このパットセットに関する情報を保持するためのコメント。 | 文字列 (最大長 255) |
文字列マップ
stringmap の各エントリは、次の属性をサポートします。name および values 属性は必須です。
| 属性 | 説明 | サポートされる値 |
|---|---|---|
name |
文字列マップの名前。 | 文字列 (最大長 32) |
values |
この文字列マップにバインドするキーと値のペアのリスト。各ペアにはkeyとvalueがあります (それぞれ最大長2047文字)。 |
オブジェクトの配列 |
comment |
この文字列マップに関する情報を保持するためのコメント。 | 文字列 (最大長255) |
HTTPコールアウト
httpcallout_policyの各エントリは、次の属性をサポートしています。name、server_ip、およびserver_port属性は必須です。
| 属性 | 説明 | サポートされている値 |
|---|---|---|
name |
HTTPコールアウト名。 | 文字列 (最大長32) |
server_ip |
コールアウトが送信されるコールアウトエージェントサーバーのIPアドレス。 | 文字列 |
server_port |
コールアウトエージェントサーバーのポート。 | 整数 (1~65535) |
http_method |
HTTPリクエストで使用されるメソッド。デフォルトはGETです。 |
GET, POST |
host_expr |
Hostヘッダーを設定するための文字列式。完全なHTTPリクエスト式とは相互排他的です。 |
文字列 (最大長 255) |
url_stem_expr |
URLステムを生成するための文字列式。 | 文字列 (最大長 8191) |
headers |
HTTPリクエストに挿入する1つ以上のヘッダー (name, expr)。最大8つのヘッダー。 |
オブジェクトの配列 |
parameters |
リクエストに挿入する1つ以上のクエリパラメータ (name, expr)。 |
オブジェクトの配列 |
body_expr |
リクエストのボディを生成するための高度な文字列式。 | 文字列 |
full_req_expr |
NetScalerがコールアウトエージェントに送信する、式としての正確なHTTPリクエスト。 | 文字列 |
scheme |
コールアウトサーバーのスキーム。デフォルトは HTTP です。 |
HTTP, HTTPS |
cache_for_secs |
コールアウト応答がキャッシュされる期間(秒単位)。 | 整数 (1~31536000) |
return_type |
コールアウトエージェントが返すデータのタイプ。TEXT は値をテキストとして、NUM は数値として、BOOL はブール値として扱います。 |
TEXT, NUM, BOOL |
result_expr |
応答からコールアウト結果を抽出する式。応答ベースの式である必要があります (HTTP.RES で始まります)。 |
文字列 (最大長 8191) |
comment |
このHTTPコールアウトに関する情報を保持するためのコメント。 | 文字列 (最大長 255) |
ポリシー構成の記述方法
rewritepolicy YAML定義で、kind を rewritepolicy に設定します。spec セクションで、次のセクションを1つ以上追加します: rewrite-policies、responder-policies、dataset、patset、stringmap、および httpcallout_policy。
次のガイドラインに留意してください。
-
rewrite-policiesまたはresponder-policiesの少なくともいずれか1つを指定します。 -
リライトポリシーの場合、
rewrite-criteria、operation、target、およびdirection属性は必須です。 -
レスポンダーポリシーの場合、
respond-criteria属性は必須であり、redirect、respondwith、noop、reset、またはdropのいずれか1つのアクションを正確に指定する必要があります。 -
rewritepolicyCRDをExtensionRefフィルターを介してaigatewayrouteにアタッチするか、またはservicenamesまたはtargetRefを介してサービスにバインドします。
ポリシー構成の例
応答ヘッダーを追加するリライトポリシー
次の構成は、HTTP応答にカスタムヘッダーを挿入します。
apiVersion: citrix.com/v1
kind: rewritepolicy
metadata:
name: add-response-header
namespace: default
spec:
rewrite-policies:
- servicenames:
- ai-backend-service
rewrite-policy:
operation: insert_http_header
target: "x-ai-gateway"
modify-expression: "\"netscaler\""
rewrite-criteria: "HTTP.RES.IS_VALID"
direction: RESPONSE
comment: "Add AI gateway response header"
リクエストをリダイレクトするレスポンダーポリシー
次の構成は、一致するリクエストを別のURLにリダイレクトします。
apiVersion: citrix.com/v1
kind: rewritepolicy
metadata:
name: redirect-policy
namespace: default
spec:
responder-policies:
- servicenames:
- ai-backend-service
responder-policy:
redirect:
url: "\"https://backup.example.com\" + HTTP.REQ.URL"
redirect-status-code: 302
respond-criteria: "HTTP.REQ.URL.CONTAINS(\"/deprecated\")"
comment: "Redirect deprecated endpoint"
カスタム応答を持つレスポンダーポリシー
次の構成は、カスタムペイロードを使用して、一致するリクエストに直接応答します。
apiVersion: citrix.com/v1
kind: rewritepolicy
metadata:
name: block-policy
namespace: default
spec:
responder-policies:
- servicenames:
- ai-backend-service
responder-policy:
respondwith:
http-payload-string: "\"HTTP/1.1 429 Too Many Requests\\r\\n\\r\\nRate limit exceeded\""
respond-criteria: "HTTP.REQ.HEADER(\"x-ai-eg-model\").EQ(\"restricted-model\")"
comment: "Block restricted model requests"
データセットを持つリライトポリシー
次の構成は、データセットを定義し、それをリライトポリシーで使用します。
apiVersion: citrix.com/v1
kind: rewritepolicy
metadata:
name: dataset-policy
namespace: default
spec:
dataset:
- name: blocked_ips
type: ipv4
values:
- "192.0.2.1"
- "192.0.2.2"
responder-policies:
- servicenames:
- ai-backend-service
responder-policy:
drop: {}
respond-criteria: "CLIENT.IP.SRC.EQUALS_ANY(\"blocked_ips\")"
comment: "Drop requests from blocked IPs"
関連資料
-
プロンプト管理を構成する
-
代替モデルへのスピルオーバーを構成する