HTTPルート
HTTPRoute は、コンテンツスイッチングのルーティング決定を定義するカスタムリソースです。 現在、HTTPRoute は以下のルーティングをサポートしています。
-
ホスト名ベースのルーティング
-
パスベースのルーティング
-
HTTPヘッダー名ベースのルーティング
-
HTTPヘッダー値ベースのルーティング。
-
Cookieベースのルーティング
-
クエリパラメータベースのルーティング
-
HTTPメソッドベースのルーティング
-
NetScalerポリシー式を使用したルーティング
HTTPRouteオブジェクトの一部として、1つ以上のルールを定義でき、各ルールはルーティングのマッチング条件として機能します。受信HTTPリクエストに対してマッチング条件が満たされた場合、各ルールに対してアクションが定義されます。アクションは、トラフィックがバックエンドサービスにロードバランスされる「バックエンド」か、リダイレクト応答がクライアントに返送される「リダイレクト」のいずれかです。「バックエンド」アクションはADCでコンテンツスイッチングポリシーを作成し、「リダイレクト」アクションはADCでレスポンダーポリシーを作成します。
以下の表で説明されているように、マッチング条件には3つの異なる方法があります。
| マッチング条件 | 説明 |
|---|---|
exact |
受信リクエストと完全に一致します。この条件では大文字と小文字は区別されません。 |
prefix |
受信リクエストのプレフィックスと一致します。この条件では大文字と小文字は区別されません。例: /a は /a/b および /a/c と一致しますが、/c/a とは一致しません。 |
contains |
受信リクエストに指定されたキーワードが含まれている場合に一致します。この条件では大文字と小文字が区別されます。 |
このトピックでは、HTTPRoute CRD オブジェクトのサンプルと、HTTPRoute CRD のさまざまな属性について説明します。完全な CRD 定義については、HTTPRoute.yaml を参照してください。
HTTP CRD オブジェクトの例
以下は、HTTP CRD オブジェクトのサンプルです。
apiVersion: citrix.com/v1
kind: HTTPRoute
metadata:
name: test-route
labels:
domain: abc.com
spec:
hostname:
- abc.com
rules:
- name: exactpath
match:
- path:
exact: /resources
action:
backend:
kube:
service: resource
port: 80
- name: prefixpath
match:
- path:
prefix: /cart
action:
backend:
kube:
service: cart
port: 80
- name: header
match:
- headers:
- headerName:
contains: Mobile
action:
backend:
kube:
service: mobile
port: 443
backendConfig:
secureBackend: true
lbConfig:
lbmethod: ROUNDROBIN
その他の例については、HTTP ルートの例 を参照してください。
HTTPRoute.spec
HTTPRoute カスタムリソースは、HTTP ルーティング仕様を表す spec フィールドを定義します。この仕様には、定義された各ルールのアクションを含むルールのリストがあります。
次の表は、
HTTPRoute.spec 属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
hostname |
サーバーのホスト名リストを指定します。ホスト名は、RFC 1123 で定義されている有効なサブドメインである必要があります(例: test.example.com)。*.example.com の形式のワイルドカードホスト名も有効です。その場合、example.com の任意のサブドメインがマッチングの対象となります。デフォルト値は * で、これはすべての受信 HTTP リクエストに一致することを意味します。 |
文字列 | はい |
rules |
アクションに関連付けられた、マッチングルーティング基準を持つルールリストを指定します。 | [ ] ルール | いいえ |
HTTPRoute.rules
次の表は、
HTTPRoute.rules 属性のさまざまなフィールドについて説明します。
| フィールド | 説明 | 型 | 必須 |
|---|---|---|---|
name |
ルールを表す名前を指定します。このフィールドは、NetScaler のコンテンツルーティングポリシー名で識別子として使用されます。注: 各ルールについて、名前は一意である必要があります。 | 文字列 | はい |
| 注: 各ルールについて、名前は一意である必要があります。 | |||
action |
一致するルールのアクションを指定します。 | rules.action | はい |
match |
同じアクションを持つ一致するルートのリスト。複数のエントリが存在する場合、この一致ルールは OR 条件として扱われ、いずれかの一致に対して同じアクションが選択されます。 |
[ ] rules.match | いいえ |
HTTPRoute.rules.match
次の表は、
HTTPRoute.rules.match 属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
path |
URLパスベースのルーティングルールを指定します。 | HTTPRoute.rules.match.path | いいえ |
headers |
コンテンツルーティングのヘッダーベースの一致のリストを指定します。複数のルールがある場合、この一致条件はAND条件として扱われ、すべてのルールが一致する必要があります。 |
[ ] HTTPRoute.rules.match.headers | いいえ |
cookies |
コンテンツルーティングのCookieベースの一致のリストを指定します。複数のルールがある場合、この一致条件はAND条件として扱われ、すべてのルールが一致する必要があります。 |
[ ] HTTPRoute.rules.match.cookies | いいえ |
queryParams |
コンテンツルーティングのクエリパラメータのリストを指定します。複数のルールがある場合、このマッチング条件はAND条件として扱われ、すべてのルールが一致する必要があります。 |
[ ] HTTPRoute.rules.match.queryParams | いいえ |
method |
HTTPメソッドベースのルーティングルールを指定します。可能なオプションは、GET、POST、PUTなどです。一致するメソッドを持つHTTPリクエストに対してアクションが選択されます。 | 文字列 | いいえ |
policyExpression |
NetScalerポリシー式ベースのルーティングルールを指定します。コンテンツルーティングルールには、任意のカスタムNetScalerポリシー式を指定できます。NetScaler Ingress Controllerは式の正確性をチェックしません。したがって、式の正確性を確認する必要があります。ポリシー式の詳細については、Expression Prefixを参照してください。例: HTTP.REQ.URL.PATH.GET(1).EQ("foo") |
文字列 | いいえ |
HTTPRoute.rules.match.path
この属性は、コンテンツルーティングのパスベースのマッチングを指定します。
HTTPRoute.rules.match.path属性の例を次に示します。
match:
- path:
prefix: /resources
action:
backend:
kube:
service: resource
port: 80
---
match:
- path:
regex: '/foo/[A-Z0-9]{3}'
action:
backend:
kube:
service: resource
port: 80
次の表は、
HTTPRoute.rules.match.path属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
prefix |
パスのプレフィックス式を照合基準として指定します。HTTPリクエストの開始パスが指定されたパスと一致する場合、照合を実行します。たとえば、/aはURL /aおよび/a/bと一致します。 |
文字列 | いいえ |
exact |
正確なパスを照合基準として指定します。リクエストパスが指定されたパスと完全に一致する場合にのみ照合を実行します。 | 文字列 | いいえ |
regex |
パスのマッチング条件として正規表現を指定します。指定された正規表現が受信リクエストと一致する場合にマッチングを実行します。Perl互換正規表現(PCRE)形式の正規表現のみがサポートされています。NetScalerでサポートされている正規表現の詳細については、正規表現を参照してください。 | 文字列 | いいえ |
HTTPRoute.rules.match.headers
この属性は、コンテンツルーティングのためのヘッダーベースのマッチングを表します。
次の表は、
HTTPRoute.rules.match.headers属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
headerName |
コンテンツルーティングのマッチング条件としてヘッダー名を指定します。ヘッダーが存在する場合、マッチングに使用されます。この場合、ヘッダー値はマッチングの対象になりません。 | HTTPRoute.rules.match.headers.headerName | いいえ |
headerValue |
コンテンツルーティングの一致条件としてヘッダー名と値を指定します。名前の場合は、正確な名前が一致条件となり、値の一致条件は、exact、regex、またはcontains式として指定できます。 |
HTTPRoute.rules.match.headers.headerValue | いいえ |
HTTPRoute.rules.match.headers.headerName
この属性は、コンテンツルーティングのためのヘッダー名に基づいた一致を表します。
以下の例は、
HTTPRoute.rules.match.headers.headerName属性の設定に関するサンプルスニペットを示しています。
match:
- headers:
- headerName:
exact: mobile
action:
backend:
kube:
service: mobile-service
port: 80
---
match:
- headers:
- headerName:
regex: "Header-[a-z]{1}"
action:
backend:
kube:
service: resource-service
port: 80
以下の表は、
HTTPRoute.rules.match.headers.headerName属性内のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
exact |
ルーティングの一致条件として、正確なヘッダー名を指定します。 | 文字列 | いいえ |
contains |
contains文字列で指定された文字列を、ヘッダー名の照合基準として指定します。 |
文字列 | いいえ |
regex |
正規表現を照合基準として指定します。ヘッダー名が指定された正規表現と一致する場合に照合を実行します。PCRE形式の正規表現のみがサポートされています。 | 文字列 | いいえ |
not |
この属性のデフォルト値はfalseです。この値がtrueの場合、ヘッダー名は受信リクエストに存在してはなりません。 | ブール値 | いいえ |
HTTPRoute.rules.match.headers.headerValue
この属性は、コンテンツルーティングのためのヘッダー名と値の照合を表します。ヘッダー名は完全に一致し、値は指定されたフィールドに従って照合されます。
次の例は、
HTTPRoute.rules.match.headers.headerValue属性設定のサンプルスニペットを示しています。
match:
- headers:
- headerValue:
name: Origin
exact: mobile
not: true
action:
backend:
kube:
service: mobile
port: 80
---
match:
- headers:
- headerValue:
name: Origin
prefix: header1
action:
backend:
kube:
service: service1
port: 80
---
match:
- headers:
- headerValue:
name: Origin
regex: "[a-z]{1}"
action:
backend:
kube:
service: example
port: 80
次の表は、
HTTPRoute.rules.match.headers.headerValue 属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
name |
値と一致する必要があるヘッダーの名前を指定します。ヘッダーの値を照合するには、exact、contains、および regex フィールドが使用されます。exact、contains、および regex のいずれのフィールドも存在しない場合、その名前の任意の値が照合されます。 |
文字列 | はい |
exact |
名前フィールドを持つHTTPヘッダーの値が正確に一致する場合に照合します。 | 文字列 | いいえ |
contains |
名前フィールドを持つHTTPヘッダーの値が指定された文字列を含む場合に照合します。 | 文字列 | いいえ |
regex |
nameフィールドを持つHTTPヘッダーの値が正規表現と一致する場合にマッチします。PCRE形式の正規表現のみがサポートされています。 | 文字列 | いいえ |
not |
この属性のデフォルト値はfalseです。この値がtrueの場合、ヘッダー名は値と一致してはなりません。 | ブール値 | いいえ |
HTTPRoute.rules.match.cookies
この属性は、コンテンツルーティングにおけるCookieベースのマッチングを表します。HTTPリクエストのCookieヘッダーがマッチングに使用されます。nameフィールドを持つCookieは、値が存在する場合にその値と照合されます。値が指定されていない場合は、任意の値と照合されます。
以下の例は、
HTTPRoute.rules.match.cookies属性設定のサンプルスニペットを示しています。
match:
- cookies:
- name: version
contains: v1
action:
backend:
kube:
service: v1-app
port: 80
---
match:
- cookies:
- name: version
exact: v1
action:
backend:
kube:
service: v1-app
port: 80
---
match:
- cookies:
- name: version
regex: '[a-z]{1}'
action:
backend:
kube:
service: v1-app
port: 80
以下の表は、
HTTPRoute.rules.match.cookies属性の様々なフィールドを説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
name |
値がマッチングに使用されるクッキーの名前を指定します。exact、regex、contains のようなマッチング条件がクッキー名に存在しない場合、その名前が存在すれば、クッキー名の任意の値がマッチングされます。 |
文字列 | はい |
exact |
名前フィールドを持つクッキーの値が完全に一致する場合にマッチします。 | 文字列 | いいえ |
contains |
名前フィールドを持つクッキーの値が指定された文字列を含む場合にマッチします。 | 文字列 | いいえ |
regex |
名前フィールドを持つCookieの値が正規表現と一致する場合にマッチします。PCRE形式の正規表現のみがサポートされています。 | 文字列 | いいえ |
not |
この属性のデフォルト値はfalseです。この値がtrueの場合、名前を持つCookieは存在する必要がありますが、値と一致してはいけません。 | ブール値 | いいえ |
HTTPRoute.rules.match.queryParams
この属性は、コンテンツルーティングのためのURLマッチングにおけるHTTPクエリパラメータを表します。
match:
- queryParams:
- name: version
contains: v1
action:
backend:
kube:
service: v1-app
port: 80
---
match:
- queryParams:
- name: version
regex: '[a-z]{1}'
action:
backend:
kube:
service: v1-app
port: 80
---
match:
- queryParams:
- name: version
exact: v1
not: true
action:
backend:
kube:
service: mobile
port: 80
次の例は、
HTTPRoute.rules.match.cookies属性設定のサンプルスニペットを示しています。
| フィールド | 説明 | 型 | 必須 |
|---|---|---|---|
name |
値が照合されるクエリパラメータの名前を指定します。exact、regex、contains のような条件がどれも存在しない場合、クエリパラメータの名前が存在すれば、その名前の任意の値が照合されます。 |
文字列 | はい |
exact |
名前フィールドを持つクエリパラメータの値が完全に一致する場合に照合されます。 | 文字列 | いいえ |
contains |
名前フィールドを持つクエリパラメータの値が指定された文字列を含む場合に照合されます。 | 文字列 | いいえ |
regex |
名前フィールドを持つクエリパラメータの値が正規表現に一致する場合に照合されます。PCRE形式の正規表現のみがサポートされています。 | 文字列 | いいえ |
not |
この属性のデフォルト値はfalseです。この値がtrueの場合、名前を持つクエリパラメータは存在する必要がありますが、値と一致してはいけません。 | ブール値 | いいえ |
HTTPRoute.rules.action
この属性は、マッチングルールのアクションを表します。
次の表は、
HTTPRoute.rules.action属性のさまざまなフィールドについて説明します。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
backend |
このフィールドのデフォルトアクションは、トラフィックをバックエンドサービスに送信することです。バックエンドまたはリダイレクトのいずれかが必要です。 | rules.action.backend | いいえ |
redirect |
デフォルトのアクションはトラフィックをリダイレクトすることです。バックエンドまたはリダイレクトのいずれかが必要です。 | rules.action.redirect | いいえ |
HTTPRoute.rules.action.backend
この属性は、トラフィックをバックエンドサービスにルーティングすることを表します。 次の表は、
HTTPRoute.rules.action.backend 属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
kube |
バックエンドサービス用のKubernetesサービス情報を指定します。 | action.backend.kube |
HTTPRoute.rules.action.backend.kube
この属性は、デフォルトのバックエンドのKubernetesサービスを表します。サービスはHTTPRouteリソースと同じ名前空間に属している必要があります。サービスが
NodePortまたはLoadbalancerタイプの場合、ポッドを持つそれらのノードのノードIPアドレスとNodePortのリストが、7でバックエンドサービスとして使用されます。
HTTPRoute.rules.action.backend.kube属性の例を次に示します。
kube:
service: service
namespace: default
port: 80
backendConfig:
lbConfig:
lbmethod: ROUNDROBIN
servicegroupConfig:
clttimeout: '20'
次の表は、
HTTPRoute.rules.action.backend.kube属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
service |
デフォルトのバックエンドのKubernetesサービスの名前を指定します。 | 文字列 | はい |
port |
デフォルトのバックエンドのKubernetesサービスのポート番号を指定します。 | 整数 | はい |
backendConfig |
デフォルトのバックエンドのバックエンド構成を指定します。 | BackendConfig | いいえ |
BackendConfig
この属性は、NetScaler のバックエンド構成を表します。 以下は、
BackendConfig 属性構成の例です。
backendConfig:
sercureBackend: true
lbConfig:
lbmethod: ROUNDROBIN
servicegroupConfig:
clttimeout: '20'
次の表は、
BackendConfig 属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
secureBackend |
通信がセキュアかどうかを指定します。secureBackend フィールドの値が true の場合、バックエンドとの通信にはセキュアな通信が使用されます。デフォルト値は false で、これはバックエンド通信に HTTP が使用されることを意味します。 |
||
lbConfig |
指定されたバックエンドの NetScaler ロードバランシング仮想サーバー構成を指定します。例に示すようにキーと値のペアを指定して、バックエンドの LBVserver 構成を設定できます。すべての有効な構成については、LB virtual server configurations を参照してください。 | オブジェクト | いいえ |
servicegroupConfig |
指定されたバックエンドのNetScalerサービスグループ構成を指定します。例に示すように、バックエンドのサービスグループ構成を設定するキーと値のペアを指定できます。すべての有効な構成については、サービスグループ構成を参照してください。 | オブジェクト | いいえ |
HTTPRoute.rules.action.redirect
この属性はリダイレクトアクションを表します。
action:
redirect:
httpsRedirect: true
responseCode: 302
次の表は、
HTTPRoute.rules.action.redirect属性のさまざまなフィールドについて説明しています。
| フィールド | 説明 | タイプ | 必須 |
|---|---|---|---|
httpsRedirect |
このフィールドがyesに設定されている場合、HTTPトラフィックをHTTPSにリダイレクトします。他のURL部分を変更せずに、スキームのみがHTTPSに変更されます。httpsRedirect、hostRedirect、またはtargetExpressionのいずれかが必要です。 |
ブール値 | いいえ |
hostRedirect |
URLのホスト名部分をこの属性に設定された値に書き換え、トラフィックをリダイレクトします。URLの他の部分はリダイレクト中に変更されません。 | 文字列 | いいえ |
targetExpression |
リダイレクト用のNetScaler式を指定します。例えば、HTTPからHTTPSへトラフィックをリダイレクトするには、以下の式を使用できます: ""https://"+HTTP.REQ.HOSTNAME + HTTP.REQ.URL.HTTP_URL_SAFE"。 | 文字列 | いいえ |
responseCode |
レスポンスコードを指定します。デフォルトのレスポンスコードは302で、この属性を使用してカスタマイズできます。 | 整数 | いいえ |