アノテーション

最終公開日 : Oct 02, 2026

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 任意
  • NetScalerモニターエンティティの設定/パラメータを構成します。例: ingress.citrix.com/monitor: '{"appname":{"type":"http"}}'。このセクションを参照してください。
  • 複数のバックエンドサービスに同じ事前設定済みモニターをバインドします。例: ingress.citrix.com/monitor: '{"appname": "<pre-configured-monitor-on-netscaler>", "appname2": "<pre-configured-monitor-on-netscaler>"}' .
  • 各バックエンドサービスに異なる事前設定済みモニターをバインドします。例: ingress.citrix.com/monitor: '{"appname": "<pre-configured-monitor1-on-netscaler>", "appname2": "<pre-configured-monitor2-on-netscaler>"}'.
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 へのリクエストによって、デフォルトの応答が実行されます。
  • target URLの受け入れ/拒否ルール(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の数値/オブジェクト/配列