アノテーション
Ingressアノテーション
NetScalerでサポートされているIngressアノテーションは次のとおりです。
| アノテーション | タイプ | 必須 | 説明 | デフォルト | 指定可能な値 |
|---|---|---|---|---|---|
ingress.citrix.com/multicluster-policy-priority-order |
文字列 | オプション | マルチクラスターIngressセットアップで異なるアプリケーションの負荷分散を行う場合、アプリケーションごとに個別のコンテンツスイッチングポリシーが作成されます。このような場合、ポリシーバインディングに特定の順序が必要な場合は、ingress.citrix.com/multicluster-policy-priority-orderアノテーションを使用してコンテンツスイッチングポリシーに優先度番号を割り当てる必要があります。詳細については、ポリシーバインディングを参照してください。 |
該当なし | ingress.citrix.com/マルチクラスター-ポリシー-優先順位: '{"フロントエンド": {"80": "3", "9443": "1"}, "バックエンド": "2"}' |
ingress.citrix.com/frontend-ip |
文字列 | オプション | コンテンツスイッチング仮想サーバーのIPアドレスとして使用する必要があるIPアドレスを指定します。注: コンテンツスイッチング仮想サーバーのIPアドレスを設定する方法は、IPAM構成、デフォルトのnsVIPなど、複数あります。 | NA | 数値IPアドレス。例: 1.2.3.4 |
ingress.citrix.com/frontend-ipset-name |
文字列 | オプション | コンテンツスイッチング仮想サーバーにバインドする必要があるIPSET名を指定します。このアノテーションをingress.citrix.com/frontend-ipと組み合わせて使用します。注: アノテーションで指定するIPSET名は、NetScalerで既に構成されている必要があります。 |
該当なし | NetScaler IPSETエンティティ名 |
ingress.citrix.com/insecure-service-type |
文字列 | オプション | コンテンツスイッチング仮想サーバー向けに、HTTP/TCP/UDP/sip_UDP/anyの中からプロトコルを指定します。 | http |
http、tcp、udp、sip_udp、またはany |
ingress.citrix.com/insecure-port |
文字列 | オプション | http/tcp/udp/sip_udp/any プロトコル用のコンテンツスイッチング仮想サーバーのポートを設定します。 | 80 |
有効なポート番号 |
ingress.citrix.com/secure-service-type |
文字列 | オプション | コンテンツスイッチング仮想サーバーのプロトコルとして、SSL/SSL_TCPの中からプロトコルを指定します。 | ssl |
ssl, ssl_tcp |
ingress.citrix.com/secure-port |
文字列 | オプション | HTTPSトラフィック用のコンテンツスイッチング仮想サーバーのポートを設定します。 | 443 |
有効なポート番号 |
ingress.citrix.com/insecure-termination |
文字列 | オプション | HTTPトラフィックの動作を設定します。HTTPトラフィックを許可するにはallowを使用し、HTTPリクエストをHTTPSにリダイレクトするにはredirectを使用します。HTTPトラフィックを破棄したい場合はdisallowを使用します。 |
disallow |
allow、redirect、またはdisallow |
ingress.citrix.com/default-response-code |
文字列 | オプション | リクエストがデフォルトのコンテンツスイッチングまたはロードバランシング仮想サーバーに到達したときにNetScalerが送信するデフォルトの応答を設定します。たとえば、リクエストが設定されたホストまたはパスのいずれにも一致しない場合、またはバックエンドサービスに準備完了のエンドポイントがない場合などです。アクションタイプ(respondwith、redirect、またはrespondwithhtmlpage)、HTTP応答コード、およびオプションでターゲットURLと理由フレーズをJSONとして指定します。詳細については、アノテーションキーingress.citrix.com/default-response-codeを参照してください。 |
NA | - |
ingress.citrix.com/default-response-code: '{"type": "respondwithhtmlpage", "response-code": "521", "target": "https://status.example.com/service-unavailable.html", "reason-phrase": "Web server down"}' |
|||||
ingress.citrix.com/secure-backend |
文字列/JSON | オプション | NetScalerとバックエンドのKubernetesアプリケーション間で安全なHTTPS接続が必要な場合に指定します。指定された値がtrueまたはfalseの場合、イングレスYAML内のすべてのサービスに適用されます。各サービスに異なる設定が必要な場合は、以下のようにJSON形式で値を指定してください。例: ingress.citrix.com/secure-backend: '{"app1":"True", "app2":"False", "app3":"True"}'。ここでは、app1 と app3 は HTTPS 経由でバックエンドと通信します。app2 はプレーンな HTTP になります。 |
False |
文字列として: True/False。 JSONとして: '{"<Service_Name>": "True/False", ...}'。 |
ingress.citrix.com/backend-secret |
文字列/JSON | オプション | NetScaler と Kubernetes ポッド間のバックエンド通信に使用する証明書を指定します。 | NA | 文字列として:"Kubernetes secret"。JSON として:'{"<Service_Name>": "<kubernetes secret>", ...}' |
ingress.citrix.com/backend-ca-secret |
文字列/JSON | オプション | NetScaler と Kubernetes ポッド間のバックエンド通信に使用する CA 証明書を指定します。 | NA | 文字列として:"kubernetes secret"、JSON として:'{"<Service_Name>": "<kubernetes secret>", ...}' |
ingress.citrix.com/preconfigured-certkey |
JSON | 任意 | コンテンツスイッチング仮想サーバー用に構成する必要がある、NetScaler上に既に存在するSSL証明書キーを指定します。例: ingress.citrix.com/preconfigured-certkey : '{"certs": [{"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"}]}'。ここでは、certkey1が非SNIデフォルト証明書として使用され、certkey2がSNI証明書として使用されます。このセクションを参照してください。 |
NA | 証明書タイプ default/sni/ca を持つ、1つ以上のNetScaler sslcertkeyエンティティ名。 |
ingress.citrix.com/preconfigured-backend-certkey |
文字列 | 任意 | NetScalerで事前に設定された証明書キーの名前を指定し、バックエンドSSLサービスグループにバインドします。この証明書は、サーバー認証のためにSSLハンドシェイク中にサーバーに送信されます。例: ingress.citrix.com/preconfigured-backend-certkey: '{"frontend-hotdrinks": "abc4cert", "coffee-beverage": "abc4cert"}' |
NA | NetScaler sslcertkeyエンティティ名 |
ingress.citrix.com/preconfigured-backend-ca-certkey |
文字列 | オプション | NetScalerで事前に設定されたCA証明書キーの名前を指定し、サーバー認証のためにバックエンドSSLサービスグループにバインドします。例: ingress.citrix.com/preconfigured-backend-ca-certkey: '{"frontend-hotdrinks": "ca3bun", "coffee-beverage": "ca3bun"}' |
NA | NetScaler sslcertkeyエンティティ名 |
ingress.citrix.com/lbvserver |
JSON | オプション | NetScaler LBVserverエンティティの設定/パラメータを構成します。例: ingress.citrix.com/lbvserver: '{"app1":{"lbmethod":"SRCIPDESTIPHASH"}}'。これらのパラメータを設定することで、さまざまなユースケースを実現できます。このセクションを参照してください。 |
該当なし | key:value形式の有効なNetScalerエンティティパラメータ。 |
ingress.citrix.com/servicegroup |
JSON | オプション | NetScaler Servicegroupエンティティの設定/パラメータを構成します。例: ingress.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}'。これらのパラメータを設定することで、さまざまなユースケースを実現できます。このセクションを参照してください。 |
NA | key:value形式の有効なNetScalerエンティティパラメータ。 |
ingress.citrix.com/monitor |
JSON | 任意 |
|
N/A | key:value形式の有効なNetScalerエンティティパラメータ。 |
ingress.citrix.com/deployment |
文字列 | オプション | NetScaler 上で Direct Server Return (DSR) 設定を作成します。例: ingress.citrix.com/deployment: "dsr" |
該当なし | dsr |
ingress.citrix.com/path-match-method |
文字列 | オプション | イングレス内のアプリケーションのパス照合を指定します。例: ingress.citrix.com/path-match-method: "prefix"。このクラスは下位互換性のために維持されています。代わりにspecでpathType:を使用してください。 |
prefix |
prefix または exact。 |
ingress.citrix.com/ipam-range |
文字列 | オプション | NetScaler IPAMコントローラーに指定された範囲のセットから特定のIPアドレス範囲を選択します。例: ingress.citrix.com/ipam-range: 'Dev' |
N/A | IPAMコントローラーで構成された範囲名のいずれかに一致する値。 |
ingress.citrix.com/external-service |
JSON | オプション | NetScalerでDNSサーバーを設定するためにドメイン名を提供します。このセクションを参照してください。例: ingress.citrix.com/external-service: '{"external-svc": {"domain": "www.externalsvc.com"}}' |
NA | NA |
ingress.citrix.com/canary-weight |
文字列 | 任意 | カナリアバージョンに誘導されるトラフィックの割合を指定します。このセクションを参照してください。例: ingress.citrix.com/canary-weight: "10" |
NA | NA |
ingress.citrix.com/canary-by-header |
文字列 | 任意 | カナリアバージョンにトラフィックを誘導するためのHTTPヘッダーキーを指定します。このセクションを参照してください。例: ingress.citrix.com/canary-by-header: 'some-header-info' |
該当なし | |
ingress.citrix.com/canary-by-header-value |
リスト | オプション | カナリアバージョンにトラフィックを誘導するためのHTTPヘッダー値を提供します。このセクションを参照してください。例: ingress.citrix.com/canary-by-header-value: '["value1","value2","value3"]' |
該当なし | 文字列としてのヘッダー値のリスト。 |
ingress.citrix.com/bot_crd |
文字列/JSON | オプション | BOT CRDによって作成されたポリシーをアプリケーションの負荷分散仮想サーバーにバインドします。このセクションを参照してください。例: ingress.citrix.com/bot_crd: "botdefense"はイングレス内のすべてのサービスにポリシーをバインドし、またはingress.citrix.com/bot_crd: '{"appname": "botdefense"}'はフロントエンドサービスのみにポリシーをバインドします。 |
N/A | 文字列として: "CRD_Instance_Name"。JSONとして: '{"<Service_Name>":"CRD_Instance_Name"}' |
ingress.citrix.com/ratelimit_crd |
文字列/JSON | オプション | Ratelimit CRDによって作成されたポリシーをアプリケーションの負荷分散仮想サーバーにバインドします。このセクションを参照してください。 | N/A | 文字列として: "CRD_Instance_Name"。JSONとして: '{"<Service_Name>":"CRD_Instance_Name"}'。 |
例: ingress.citrix.com/ratelimit_crd: "ratelimitexample" はポリシーをイングレス内のすべてのサービスにバインドするか、ingress.citrix.com/ratelimit_crd: '{"appname": "ratelimitexample"}' はポリシーをフロントエンドサービスのみにバインドします。 |
|||||
ingress.citrix.com/auth_crd |
文字列/JSON | オプション | Auth CRD によって作成されたポリシーを、アプリケーションのロードバランシング仮想サーバーにバインドします。このセクションを参照してください。 | N/A | 文字列として: "CRD_Instance_Name"、JSONとして: {"<Service_Name>":"CRD_Instance_Name"} |
例: ingress.citrix.com/auth_crd: "authexample" はポリシーをイングレス内のすべてのサービスにバインドするか、ingress.citrix.com/auth_crd: '{"appname": "authexample"}' はポリシーをフロントエンドサービスのみにバインドします。 |
|||||
ingress.citrix.com/waf_crd |
文字列/JSON | オプション | WAF CRDによって作成されたポリシーを、アプリケーションの負荷分散仮想サーバーにバインドします。このセクションを参照してください。 | NA | 文字列として: "CRD_Instance_Name", JSONとして: '{"<Service_Name>":"CRD_Instance_Name"}' |
例: ingress.citrix.com/waf_crd: "wafbasic" はポリシーをイングレス内のすべてのサービスにバインドするか、ingress.citrix.com/waf_crd: '{"appname": "wafbasic"}' はポリシーをフロントエンドサービスのみにバインドします |
|||||
ingress.citrix.com/rewrite_responder_crd |
String/JSON | オプション | Rewrite-Responder CRDによって作成されたポリシーを、アプリケーションのロードバランシング仮想サーバーにバインドします。このセクションを参照してください。 | N/A | 文字列として: "CRD_Instance_Name"、JSONとして: '{"<Service_Name>":"CRD_Instance_Name"}' |
例: ingress.citrix.com/rewrite_responder_crd: "blockurlpolicy"は、イングレス内のすべてのサービスにポリシーをバインドします。またはingress.citrix.com/rewrite_responder_crd: '{"appname": "blockurlpolicy"}'は、フロントエンドサービスのみにポリシーをバインドします。 |
|||||
ingress.citrix.com/rewrite_responder_crd |
文字列/JSON | オプション | rewrite-responder CRDによって作成されたポリシーを、アプリケーションの負荷分散仮想サーバーにバインドします。このセクションを参照してください。 | NA | 文字列として: "CRD_Instance_Name"。JSONとして: '{"<Service_Name>":"CRD_Instance_Name"}'。 |
例: ingress.citrix.com/rewrite_responder_crd: "blockurlpolicy"はポリシーをイングレス内のすべてのサービスにバインドし、ingress.citrix.com/rewrite_responder_crd: '{"appname": "blockurlpolicy"}'はポリシーをフロントエンドサービスのみにバインドします。 |
サービスアノテーション
以下は、NetScalerでサポートされているサービスアノテーションです。
サービスアノテーションでは、
indexはサービス仕様ファイル内のポートの順序付きインデックスです。例えば、サービス仕様に2つのポートがある場合、最初のポートのインデックスはゼロで、2番目のポートのインデックスは1です。
| アノテーション | タイプ | 必須 | 説明 | デフォルト | 可能な値 |
|---|---|---|---|---|---|
service.citrix.com/frontend-ip |
文字列 | オプション | コンテンツスイッチング仮想サーバーのIPアドレスとして使用する必要があるIPアドレスを指定します。コンテンツスイッチング仮想サーバーのIPアドレスを指定する方法は複数あります。 | 該当なし | 数値IPアドレス(例: '1.2.3.4') |
service.citrix.com/ipam-range |
文字列 | オプション | NetScaler IPAMコントローラーに指定された範囲のセットから、特定のIPアドレス範囲を選択します。このアノテーションは、LoadBalancerタイプのサービスに使用されます。例: service.citrix.com/ipam-range: 'Dev' |
該当なし | IPAMコントローラーで構成された範囲名のいずれかに一致する値 |
service.citrix.com/insecure-redirect |
JSON | 任意 | HTTPトラフィックをセキュアなポートにリダイレクトします。例: service.citrix.com/insecure-redirect: '{"port-443": 80 }' または service.citrix.com/insecure-redirect: '{"443-tcp": 80 }' |
該当なし | |
service.citrix.com/ssl-termination-<index> |
文字列 | 任意 | SSLターミネーションを指定します。例: service.citrix.com/ssl-termination-0: 'EDGE' |
該当なし | EDGE と REENCRYPT |
service.citrix.com/service-type-<index> |
文字列 | オプション | 作成されるNetScalerエンティティのプロトコルを指定します。例: service.citrix.com/service-type-0: ‘SSL’。 |
HTTP |
TCP、HTTP、SSL、UDP、ANY、SSL_TCP、および SIP_UDP。 |
service.citrix.com/ssl-certificate-data-<index> |
文字列 | オプション | PEM形式でサーバー証明書値を指定します。例: service.citrix.com/ssl-certificate-data-0: \| <certificate> |
N/A | PEM形式の証明書データ |
service.citrix.com/ssl-key-data-<index> |
文字列 | 任意 | PEM形式でサーバーキーの値を指定します。例: service.citrix.com/ssl-key-data-0: \| <key> |
NA | PEM形式のキーデータ |
service.citrix.com/ssl-ca-certificate-data-<index> |
文字列 | 任意 | PEM形式でクライアント証明書を検証するためのサーバーCA証明書値を指定します。例: service.citrix.com/ssl-ca-certificate-data-0: \| <certificate> |
該当なし | PEM形式のCA証明書データ |
service.citrix.com/ssl-backend-ca-certificate-data-<index> |
文字列 | 任意 | PEM形式でバックエンドのサーバー証明書を検証するためのCA証明書値を指定します。例: service.citrix.com/ssl-backend-ca-certificate-data-0: \| <certificate> |
該当なし | PEM形式のCA証明書データ |
service.citrix.com/secret |
文字列 | オプション | フロントエンドサーバー証明書のシークレットリソース名を指定します。複数のフロントエンドサーバー証明書をバインドするには、証明書用に構成されたカンマ区切りのシークレットのリストを指定します。詳細と例については、ロードバランサータイプのサービス用SSL証明書を参照してください。例: service.citrix.com/secret: hotdrink-secret, service.citrix.com/secret: apache-secret1,apache-secret2 |
NA | Kubernetesシークレット名 |
service.citrix.com/ca-secret |
文字列 | オプション | クライアント証明書認証用のCA証明書を提供します。この証明書は、NetScalerのフロントエンドSSL仮想サーバーにバインドされます。詳細と例については、ロードバランサータイプのサービス用SSL証明書を参照してください。例: service.citrix.com/ca-secret: 'hotdrink-ca-secret' |
該当なし | Kubernetesシークレット名 |
service.citrix.com/backend-secret |
文字列^ | 任意 | NetScalerとワークロード間のバックエンド通信が暗号化されたチャネル上で行われ、ワークロードでクライアント認証が必要な場合は、このアノテーションを使用します。この証明書は、SSLハンドシェイク中にサーバーに送信され、バックエンドSSLサービスグループにバインドされます。詳細と例については、ロードバランサータイプのサービス用SSL証明書を参照してください。例: service.citrix.com/backend-secret: 'hotdrink-secret' |
NA | Kubernetesシークレット名 |
service.citrix.com/backend-ca-secret |
文字列 | 任意 | バックエンドサーバー証明書を認証するサーバー認証を有効にします。詳細と例については、ロードバランサータイプのサービス用SSL証明書を参照してください。例: service.citrix.com/backend-ca-secret: 'hotdrink-ca-secret' |
該当なし | Kubernetesシークレット名 |
service.citrix.com/preconfigured-certkey |
文字列 | 任意 | フロントエンドサーバー証明書として使用するNetScalerの既存のSSL証明書キーの名前を指定します。複数のフロントエンドサーバー証明書をバインドするには、証明書用にすでに構成されている、コンマ区切りの証明書キーのリストを指定します。例: - service.citrix.com/preconfigured-certkey: coffee-cert, service.citrix.com/preconfigured-certkey: preconfcert1,preconfcert2 |
該当なし | NetScaler sslcertkey エンティティ名 |
service.citrix.com/preconfigured-ca-certkey |
文字列 | オプション | クライアント証明書認証用のCA証明書として使用する、NetScalerで事前設定された証明書キーの名前を指定します。この証明書は、NetScalerのフロントエンドSSL仮想サーバーにバインドされます。例: service.citrix.com/preconfigured-backend-certkey: 'coffee-cert' |
NA | NetScaler sslcertkey エンティティ名 |
service.citrix.com/preconfigured-backend-certkey |
文字列 | オプション | NetScalerで事前設定された証明書キーの名前を指定し、バックエンドSSLサービスグループにバインドします。この証明書は、サーバー認証のためにSSLハンドシェイク中にサーバーに送信されます。例: service.citrix.com/preconfigured-ca-certkey: 'coffee-ca-cert' |
NA | NetScaler sslcertkeyエンティティ名 |
service.citrix.com/preconfigured-backend-ca-certkey |
文字列 | オプション | サーバー認証のために、NetScalerで事前設定されたCA証明書キーの名前を指定し、バックエンドSSLサービスグループにバインドします。例: service.citrix.com/preconfigured-backend-ca-certkey: 'coffee-ca-cert' |
NA | NetScaler sslcertkeyエンティティ名 |
HTTP、TCP、またはSSLプロファイル用のスマートアノテーション
| アノテーション | タイプ | 必須 | 説明 | デフォルト | 指定可能な値 |
|---|---|---|---|---|---|
ingress.citrix.com/frontend-httpprofile |
文字列/JSON | オプション | フロントエンドHTTPプロファイル(クライアントプレーン)を作成します | 該当なし | 例: ingress.citrix.com/frontend-httpprofile: '{"dropinvalreqs":"enabled", "websocket" : "enabled"}' |
ingress.citrix.com/backend-httpprofile |
文字列/JSON | オプション | バックエンドHTTPプロファイル(サーバープレーン)を作成します。 | NA | 例: ingress.citrix.com/backend-httpprofile: '{"app-1": {"dropinvalreqs":"enabled", "websocket" : "enabled"}}' |
ingress.citrix.com/frontend-tcpprofile |
文字列/JSON | 任意 | フロントエンドTCPプロファイルを作成します (クライアントプレーン) | NA | 例: ingress.citrix.com/frontend-tcpprofile: '{"ws":"enabled", "sack" : "enabled"}' |
ingress.citrix.com/backend-tcpprofile |
文字列/JSON | 任意 | バックエンドTCPプロファイルを作成します (サーバープレーン) | NA | 例:ingress.citrix.com/backend-tcpprofile: '{"citrix-svc":{"ws":"enabled", "sack" : "enabled"}}' |
ingress.citrix.com/frontend-sslprofile |
文字列/JSON | オプション | フロントエンドSSLプロファイル(クライアントプレーン)を作成します。フロントエンドSSLプロファイルは、クライアントプレーンでTLSを有効にしている場合にのみ必要です。 | 該当なし | 例: ingress.citrix.com/frontend-sslprofile: '{"hsts":"enabled", "tls12" : "enabled"}' |
ingress.citrix.com/backend-sslprofile |
文字列/JSON | オプション | バックエンドSSLプロファイル(サーバープレーン)を作成します。SSLバックエンドプロファイルは、ingress.citrix.com/secure-backendを使用する場合にのみ必要です。 |
該当なし | 例: ingress.citrix.com/backend-sslprofile: '{"citrix-svc":{"hsts":"enabled", "tls1" : "enabled"}}' |
Ingressのスマートアノテーション
スマートアノテーションは、NetScaler Ingress Controllerが提供するオプションで、NetScalerエンティティ名を使用してNetScaler機能を効率的に有効にします。NetScaler Ingress Controllerは、KubernetesのIngressをNetScalerオブジェクトのセットに変換します。スマートアノテーションを使用すると、これらのオブジェクトを効率的に制御できます。
注
スマートアノテーションを使用するには、NetScalerの機能とそれぞれのエンティティ名をよく理解している必要があります。NetScalerの機能とエンティティ名の詳細については、NetScalerドキュメントを参照してください。
スマートアノテーションはJSON形式を入力として受け取ります。JSON形式で渡すキーと値は、NetScaler NITRO形式と一致する必要があります。NetScaler NITRO APIの詳細については、NetScaler REST APIs - NITRO documentationを参照してください。
例えば、
SRCIPDESTIPHASHベースのLBメソッドを有効にする場合、対応するNITROキーと値の形式lbmethod、SRCIPDESTIPHASHをそれぞれ使用する必要があります。
次の表に、NetScaler Ingress Controllerが提供するスマートアノテーションの詳細を示します。
| NetScalerエンティティ名 | スマートアノテーション | 例 |
|---|---|---|
| エルビーブイサーバー | ingress.citrix.com/lbvserver |
ingress.citrix.com/lbvserver: '{"appname":{"lbmethod":"SRCIPDESTIPHASH"}}' |
| サービスグループ | ingress.citrix.com/servicegroup |
ingress.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}' |
| モニター | ingress.citrix.com/monitor |
ingress.citrix.com/monitor: '{"appname":{"type":"http"}}' |
| シーエスブイサーバー | ingress.citrix.com/csvserver |
ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}' |
HTTP、TCP、およびSSLプロファイル用のスマートアノテーションについては、「NetScalerでHTTP、TCP、またはSSLプロファイルを構成する」を参照してください。
スマートアノテーションを使用したIngress YAMLの例
次のIngress YAMLの例には、lbvserver、servicegroup、monitorなどのエンティティを使用してNetScaler機能を有効にするスマートアノテーションが含まれています。
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.citrix.com/frontend-ip: 192.168.1.1
ingress.citrix.com/insecure-port: "80"
ingress.citrix.com/lbvserver: '{"appname":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
ingress.citrix.com/monitor: '{"appname":{"type":"http"}}'
ingress.citrix.com/servicegroup: '{"appname":{"usip":"yes"}}'
name: citrix
spec:
rules:
- host: citrix.org
http:
paths:
- backend:
service:
name: appname
port:
number: 80
path: /
pathType: Prefix
EOF
サンプルのIngress YAMLには、サービスに関連するユースケース
citrix-svcが含まれており、次の表はサンプルで使用されているスマートアノテーションについて説明しています。
| スマートアノテーション | 説明 |
|---|---|
ingress.citrix.com/lbvserver: '{"appname":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' |
ロードバランシング方式を最小接続に設定し、送信元IPアドレスの永続性も構成します。 |
ingress.citrix.com/servicegroup: '{"appname":{"usip":"yes"}}' |
NetScalerデバイスで送信元IPモードの使用 (USIP)を有効にします。NetScalerでUSIPを有効にすると、クライアントのIPアドレスを使用してバックエンドポッドと通信します。 |
ingress.citrix.com/monitor: '{"appname":{"type":"http"}}' |
サービスグループのカスタムHTTPモニターを作成します。 |
注記:
複数のイングレスが同じフロントエンドIPアドレスとポートを共有している場合、複数のイングレス設定を通じて提供される競合する設定を持つことはできません。
デフォルトでは、コンテンツスイッチング仮想サーバーは、それにバインドされているターゲットの負荷分散仮想サーバーの状態に依存しません。アノテーション
ingress.citrix.com/csvserver: '{"stateupdate": "ENABLED"}' は、コンテンツスイッチングポリシーを使用してそれにバインドされている負荷分散仮想サーバーの状態に基づいて、コンテンツスイッチング仮想サーバーが自身の状態を考慮するように設定します。
ルートのスマートアノテーション
Ingress と同様に、OpenShift ルートでもスマートアノテーションを使用できます。NetScaler Ingress Controller は、OpenShift のルートを NetScaler オブジェクトのセットに変換します。
次の表は、NetScaler Ingress Controller が提供するスマートアノテーションの詳細を示します。
| NetScaler エンティティ名 | スマートアノテーション | 例 |
|---|---|---|
lbvserver |
route.citrix.com/lbvserver |
route.citrix.com/lbvserver: '{"appname":{"lbmethod":"SRCIPDESTIPHASH"}}' |
servicegroup |
route.citrix.com/servicegroup |
route.citrix.com/servicegroup: '{"appname":{"cip": "Enabled","cipHeader":"X-Forwarded-For"}}' |
monitor |
route.citrix.com/monitor |
route.citrix.com/monitor: '{"appname":{"type":"http"}}' |
certificates |
route.citrix.com/preconfigured-certkey |
route.citrix.com/preconfigured-certkey : '{"certs": [{"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"}]}' |
スマートアノテーションを使用したルートマニフェストの例
次の例は、ルートYAMLファイルです。
kubectl apply -f - <<EOF
apiVersion: route.openshift.io/v1
kind: Route
metadata:
name: citrix
annotations:
route.citrix.com/lbvserver: '{"appname":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}'
route.citrix.com/servicegroup: '{"appname":{"usip":"yes"}}'
route.citrix.com/monitor: '{"appname":{"type":"http"}}'
route.citrix.com/preconfigured-certkey : '{"certs": [{"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"}]}'
spec:
host: citrix.org
port:
targetPort: 80
to:
kind: Service
name: appname
weight: 100
wildcardPolicy: None
EOF
サンプルルートマニフェストには、サービス
citrix-svcに関連するユースケースが含まれており、次の表はサンプルルートで使用されているスマートアノテーションについて説明しています。
| スマートアノテーション | 説明 |
|---|---|
route.citrix.com/lbvserver: '{"appname":{"lbmethod":"LEASTCONNECTION", "persistenceType":"SOURCEIP"}}' |
負荷分散方法を最小接続として設定し、送信元IPアドレスの永続性も構成します。 |
route.citrix.com/servicegroup: '{"appname":{"usip":"yes"}}' |
NetScalerで送信元IPモードの使用 (USIP)を有効にします。NetScalerでUSIPを有効にすると、バックエンドポッドとの通信にクライアントのIPアドレスが使用されます。 |
route.citrix.com/monitor: '{"appname":{"type":"http"}}' |
サービスグループ用のカスタムHTTPモニターを作成します。 |
route.citrix.com/preconfigured-certkey : '{"certs": [{"name": "certkey1", "type": "default"}, {"name": "certkey2", "type": "sni"}]}' |
証明書タイプdefault/sni/cを持つ1つ以上のNetScaler sslcertkeyエンティティ名を作成します。 |
安全でないトラフィックをリダイレクトするためのサービスアノテーションを含むYAMLの例
この例では、安全でないポート80でリクエストを行うクライアントからのトラフィックを、安全なポート443にリダイレクトする方法を示します。
トラフィックをリダイレクトするために、サービスYAMLファイルに次のアノテーションが指定されています。
service.citrix.com/insecure-redirect: '{"port-443": 80}'
サービス定義の例:
kubectl apply -f - <<EOF
apiVersion: v1
kind: Service
metadata:
name: frontend-service
annotations:
service.citrix.com/service-type-0: SSL
service.citrix.com/frontend-ip: '192.2.170.26'
service.citrix.com/secret: '{"port-443": "web-ingress-secret"}'
service.citrix.com/ssl-termination-0: 'EDGE'
service.citrix.com/insecure-redirect: '{"port-443": 80}'
spec:
type: LoadBalancer
selector:
app: frontend
ports:
- port: 443
targetPort: 80
name: port-443
EOF
サービス用スマートアノテーション
サービス用スマートアノテーションは、NetScaler構成パラメーターのカスタム値を使用してNetScalerを構成するために使用されます。これらのアノテーションは、タイプ
LoadBalancerのサービス、およびEast-Westトラフィックに使用されるNetScaler CPXのサービスに使用されます。
注:
North-Southトラフィック用にNodePortまたはClusterIPでサービスを構成している場合、NetScalerはサービスアノテーションではなく、該当するイングレススマートアノテーションを使用して構成されます。
サービス用スマートアノテーションは、JSON形式を入力として受け取ります。JSON形式で渡すキーと値は、NetScaler NITRO形式と一致する必要があります。NetScaler NITRO APIの詳細については、NetScaler REST APIs - NITRO Documentationを参照してください。
サービス用スマートアノテーションの例:
service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
このアノテーションは、指定されたサービスの
80-tcpポートに対するロードバランシング仮想サーバーで、ロードバランシング方式をSRCIPDESTIPHASHとして設定します。
以下の表に、サービス用のスマートアノテーションについて説明します。
| NetScalerエンティティ名 | サービス用スマートアノテーション | 例 |
|---|---|---|
| エルビーブイサーバー | service.citrix.com/lbvserver |
service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}' |
| シーエスブイサーバー | service.citrix.com/csvserver |
service.citrix.com/csvserver: '{"l2conn":"on"}' |
| サービスグループ | service.citrix.com/servicegroup |
service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}' |
| モニター | service.citrix.com/monitor |
service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}', service.citrix.com/monitor: '{"80-tcp": "<pre-configured-monitor1-on-NetScaler>", "443-tcp": "<pre-configured-monitor2-on-NetScaler>"}' |
| アナリティクスプロファイル | service.citrix.com/analyticsprofile |
service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}' |
サービスにスマートアノテーションを次のように使用できます。
-
アノテーションに
port-protocolの値を指定する場合: サービス定義で、アノテーションにport-protocolの値を指定すると、そのアノテーションはそのサービスの特定のポートに制限されます。 -
アノテーションに
port-protocolの値を指定しない場合: アノテーションにport-protocolの値を指定しない場合、そのアノテーションはサービスで使用されるすべてのポートに適用されます。
サービス用のスマートアノテーションを含むIngress YAMLの例
次のYAMLは、基本的なApache Webサーバーベースのアプリケーションのデプロイメントとサービス定義の例です。これには、lbvserver、csvserver、servicegroup、monitor、analyticsprofileなどのエンティティを使用してNetScaler機能を有効にするためのサービス用のスマートアノテーションが含まれています。
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
name: apache
labels:
name: apache
spec:
selector:
matchLabels:
app: apache
replicas: 8
template:
metadata:
labels:
app: apache
spec:
containers:
- name: apache
image: httpd:latest
ports:
- name: http
containerPort: 80
imagePullPolicy: IfNotPresent
---
#Expose the apache web server as a service
apiVersion: apps/v1
kind: Service
metadata:
name: apache
annotations:
service.citrix.com/csvserver: '{"l2conn":"on"}'
service.citrix.com/lbvserver: '{"80-tcp":{"lbmethod":"SRCIPDESTIPHASH"}}'
service.citrix.com/servicegroup: '{"80-tcp":{"usip":"yes"}}'
service.citrix.com/monitor: '{"80-tcp":{"type":"http"}}'
service.citrix.com/frontend-ip: '10.217.212.16'
service.citrix.com/analyticsprofile: '{"80-tcp":{"webinsight": {"httpurl":"ENABLED", "httpuseragent":"ENABLED"}}}'
NETSCALER_VPORT: '80'
labels:
name: apache
spec:
externalTrafficPolicy: Local
type: LoadBalancer
selector:
name: apache
ports:
- name: http
port: 80
targetPort: http
selector:
app: apache
---
EOF
ServicetypeLB: スマートアノテーションのイベント変更
NetScaler Ingress Controllerリリース4.0.16以降、
ServiceTypeLBで次のいずれかのアノテーションを変更すると、NetScaler Ingress ControllerはNetScalerで構成を削除して再作成するのではなく、変更します。
"service.citrix.com/lbvserver",
"service.citrix.com/csvserver",
"service.citrix.com/servicegroup",
"service.citrix.com/monitor",
"service.citrix.com/analyticsprofile",
"service.citrix.com/insecure-redirect",
"service.citrix.com/secret",
"service.citrix.com/preconfigured-certkey",
"service.citrix.com/ca-secret",
"service.citrix.com/preconfigured-ca-certkey",
"service.citrix.com/backend-secret",
"service.citrix.com/preconfigured-backend-certkey",
"service.citrix.com/backend-ca-secret",
"service.citrix.com/preconfigured-backend-ca-certkey",
'service.citrix.com/ssl-termination-<index>',
'service.citrix.com/frontend-tcpprofile-<index>',
'service.citrix.com/backend-tcpprofile-<index>',
'service.citrix.com/frontend-httpprofile-<index>',
'service.citrix.com/backend-httpprofile-<index>',
'service.citrix.com/frontend-sslprofile-<index>',
'service.citrix.com/backend-sslprofile-<index>'
例
不安全なサービスタイプアノテーションにおけるSIP_UDPサポートのIngress YAMLの例
次のIngress YAMLの例には、
ingress.citrix.com/insecure-service-typeアノテーションを使用してUDP経由のSIPサポートを有効にするための構成が含まれています。
kubectl apply -f - <<EOF
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
annotations:
ingress.citrix.com/frontend-ip: 1.1.1.1
ingress.citrix.com/insecure-port: "5060"
ingress.citrix.com/insecure-service-type: sip_udp
ingress.citrix.com/lbvserver: '{"asterisk17":{"lbmethod":"CALLIDHASH","persistenceType":"CALLID"}}'
name: sip-ingress
spec:
defaultBackend:
service:
name: asterisk17
port:
number: 5060
EOF
アノテーションキー ingress.citrix.com/default-response-code
NetScaler Ingress Controller は、アノテーションに対して有効な JSON を処理します。
ingress.citrix.com/default-response-code: '{"type": "<action-type>", "response-code": "<code>", "target": "<target>", "reason-phrase": "<text>"}'
| キー | 必須 | 説明 |
|---|---|---|
type |
いいえ — デフォルトの respondwith は、キーが存在しない場合にのみ適用されます |
レスポンダーアクションタイプ。小文字の文字列 respondwith、respondwithhtmlpage、redirect のいずれかである必要があります。マッチングは大文字と小文字を区別し、トリミングされません。Redirect、RESPONDWITH、"redirect "、""、null はすべて無効であり、アノテーション全体が拒否されます。respondwith へのフォールバックはありません。キーが空の文字列としてレンダリングされる可能性があるテンプレートに注意してください。 |
response-code |
はい、3種類すべてに適用されます | 最初の桁が1〜5の正確に3桁のASCII数字である場合のみ受け入れられます(実際には100〜599)。JSON数値は引用符で囲まれた文字列と同様に受け入れられます({"response-code": 404} は機能します)。99、0404、600、999、浮動小数点数、ブール値は拒否されます。チェックは構文のみです。 |
target |
respondwithhtmlpage と redirect の場合は必須。respondwith の場合はオプション |
respondwithhtmlpage: NetScaler がページをインポートするソース URL。redirect: Location ヘッダーで送信される URL。どちらも有効な絶対 http/https URL である必要があります。respondwith の場合、これはオプションの生の NetScaler 高度ポリシー式であり、応答ペイロード全体になります。その内容は意図的に検証されませんが、JSON 文字列である必要があります。数値、オブジェクト、または配列はアノテーション全体を拒否します。 |
reason-phrase |
いいえ | NITRO -reasonPhraseフィールドとしてrespondwithhtmlpageに送信されます。targetが省略されている場合にのみrespondwithで尊重され、生成されたペイロードに補間されます。redirectではサイレントに無視されます。二重引用符、バックスラッシュ、CR、LFは削除され、結果はトリミングされます。文字列以外の値は空として扱われます。 |
respondwith (デフォルト)
-
response-codeはステータスフィールドとしてNetScalerに送信されません。これは手動で構築されたペイロード式に補間され、ステータス行はそのペイロード内に存在します。 -
targetがない場合:reason-phraseも存在しない場合、404と503は正確な組み込みメッセージを保持します。その他のコード、またはreason-phraseを伴う404/503は、生成されたボディHTTP/1.1 <code> <reason>\r\n\r\nRequest to <host><url> could not be servedを生成します。— ここで、<reason>はサニタイズされたreason-phrase、または何も指定されていない場合はリテラルワードErrorです。 -
カスタム
targetを使用する場合: あなたの式はそのまま使用され、NetScaler Ingress Controllerはそれを引用符で囲んだりエスケープしたりしません。その場合、response-codeとreason-phraseは応答に全く影響を与えません。実際のステータス行を式に入れてください。NetScaler Ingress Controllerは不一致に関する警告をログに記録しません。"Service down"のような裸の文字列は有効な高度なポリシー式ではありません。NetScalerはadd responder actionを拒否し、デフォルトのLB全体が破棄されます。 -
このタイプでは、
-responseStatusCodeも-reasonPhraseも送信されません。
リダイレクト
-
targetは式ではなく、リテラルの引用符付き文字列として出力されます。元のリクエストのホスト、パス、クエリは追加または保持されません。デフォルトのLB仮想サーバーに到達するすべてのリクエストは、正確にその1つのURLに送信されます。このアノテーションは元のURIを引き継ぐことはできません。 -
response-codeは-responseStatusCodeとして送信されます。NetScaler Ingress Controllerはそれが3xxであるかどうかをチェックしないため、{"type":"redirect","response-code":"404"}は受け入れられ、構成されますが、誰もリダイレクトされません。 -
reason-phraseは無視されます。
レスポンドウィズHTMLページ
-
NetScaler Ingress Controllerは
import responder htmlpage <page-name> <target> -overwriteを発行し、レスポンダーアクションをインポートされたページオブジェクトを名前(-htmlpage <page-name>)で指定し、URLでは指定しません。あなたのURLは、アプライアンス上ではインポートされたオブジェクトのsrcとしてのみ表示されます。 -
-responseStatusCodeと-reasonPhraseの両方が送信されます。 -
ページホストはアプライアンスから到達可能である必要があります。
例とターゲットURLルール
a.
respondwith — ステータスコードとNetScaler Ingress Controllerによって生成された本文。
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: defaultlb-respondwith
annotations:
kubernetes.io/ingress.class: citrix
ingress.citrix.com/frontend-ip: 5.5.5.5
ingress.citrix.com/default-response-code: '{"response-code": "404"}'
spec:
rules:
- host: www.example.com
http:
paths:
- pathType: Prefix
path: /
backend:
service:
name: frontend
port:
number: 80
b.
respondwithhtmlpage — 独自のHTMLページを提供します(同じIngress、異なるアノテーション値)。
ingress.citrix.com/default-response-code: '{"type": "respondwithhtmlpage", "response-code": "521", "target": "https://status.example.com/service-unavailable.html", "reason-phrase": "Web server down"}'
c.
redirect — クライアントを別の場所に送信します。
ingress.citrix.com/default-response-code: '{"type": "redirect", "response-code": "302", "target": "https://status.example.com/service-unavailable.html"}'
注
-
path: /とpathType: Prefixを使用すると、www.example.comへのすべてのリクエストがルールに一致するため、同じフロントエンドIP上の異なるホストへのリクエスト、またはフロントエンドサービスに準備完了のエンドポイントがない場合のwww.example.comへのリクエストによって、デフォルトの応答が実行されます。 -
targetURLの受け入れ/拒否ルール(redirectとrespondwithhtmlpageのみ)。アノテーションが解析される際に適用され、NetScalerに何も送信される前に行われます。
| ルール | 受け入れられる例 | 拒否される例 |
|---|---|---|
| httpまたはhttpsスキームを持つ絶対パスである必要があります | https://example.com/p.html, HTTP://EXAMPLE.COM/P (スキームは大文字と小文字を区別しません) |
/service-unavailable.html, p.html, example.com/x, //evil.com/x, ftp://a.com/p, javascript:alert(1), data:text/html,x, file:///etc/passwd |
| ホストが必要です。ポートが存在する場合、有効な数値である必要があります | https://h.example.com:8443/a/b?q=1&r=2, http://192.0.2.10/maintenance, https://[2001:db8::1]:8443/p.html |
http://, http:///p.html, http://:8080/p.html, http://host:notaport/, http://host:99999/, http://host:-1/ |
| どのような形式であっても、資格情報 (ユーザー情報) を埋め込むことはできません。 | パスまたはクエリ内の @ は問題ありません: http://example.com/path@foo, https://example.com/a?b=1@2 |
http://user:pass@host/x, https://user@host/x, http://@host/, https://:pass@host/, https://user:@host/ |
| 二重引用符、バックスラッシュ、C0制御文字、DEL、または空白文字を含めてはなりません。代わりにパーセントエンコードを使用してください。 | https://example.com/p%20q |
https://example.com/p q, 二重引用符、バックスラッシュ、TAB、CR、またはLFを含むURL |
| 空でない文字列である必要があります。 | — | "", JSON null, JSONの数値/オブジェクト/配列 |