HTTPユースケース

最終公開日 : Oct 02, 2026
このトピックでは、LoadBalancerタイプのサービスおよびingressに対してスマートアノテーションを使用してNetScalerで構成できる、さまざまなHTTPユースケースについて説明します。
NetScalerのHTTP構成は、HTTP profileと呼ばれるエンティティで指定できます。これはHTTP設定のコレクションです。その後、HTTPプロファイルを、これらのHTTP構成を使用できるサービスまたは仮想サーバーに関連付けることができます。

LoadBalancerタイプのサービスに対するHTTPプロファイルのサポート

NetScaler Ingress Controllerは、LoadBalancerタイプのサービスに対するHTTPプロファイルに以下のサービスアノテーションを提供します。これらのアノテーションを使用して、NetScalerのHTTP設定を定義できます。
サービスアノテーション 説明
service.citrix.com/frontend-httpprofile このアノテーションを使用して、フロントエンドHTTPプロファイル(クライアントプレーン)を作成します。
service.citrix.com/backend-httprofile このアノテーションを使用して、バックエンドHTTPプロファイル(サーバープレーン)を作成します。

ユーザー定義HTTPプロファイル

HTTPのサービスアノテーションを使用すると、コンテンツスイッチング仮想サーバーまたはサービスグループと同じ名前のカスタムプロファイルを作成し、これらのプロファイルを対応するコンテンツスイッチング仮想サーバー (frontend-httpprofile) またはサービスグループ (backend-httpprofile) にバインドできます。
サービスアノテーション サンプル
service.citrix.com/frontend-httpprofile service.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'
service.citrix.com/backend-httpprofile service.citrix.com/backend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'

組み込みHTTPプロファイル

組み込みHTTPプロファイルは、プロファイルを作成しませんが、アノテーションで指定されたプロファイル名を、対応する仮想サーバー (frontend-httpprofile) とサービスグループ (backend-httpprofile) にバインドします。
以下は、組み込みHTTPプロファイルの例です。
service.citrix.com/frontend-httpprofile: "http_preconf_profile"
service.citrix.com/backend-httpprofile: '{"apache" : "http_preconf_profile"}'

例: HTTPプロファイル構成を持つLoadBalancerタイプのサービス

この例では、サンプルアプリケーション tea-beverage のHTTPプロファイルが構成されています。このアプリケーションは、以下のYAMLファイルを使用して、LoadBalancerタイプのサービスとしてデプロイおよび公開されます。
注:
LoadBalancerタイプのサービスの公開については、LoadBalancerタイプのサービスを参照してください。
以下のコマンドを使用して、サンプルアプリケーション (tea-beverage.yaml) をデプロイします。
kubectl apply -f - <<EOF
apiVersion: apps/v1
kind: Deployment
metadata:
  name: tea-beverage
  labels:
    name: tea-beverage
spec:
  selector:
    matchLabels:
      name: tea-beverage
  replicas: 2
  template:
    metadata:
      labels:
        name: tea-beverage
    spec:
      containers:
      - name: tea-beverage
        image: quay.io/sample-apps/hotdrinks:latest
        ports:
        - name: tea-80
          containerPort: 80
        - name: tea-443
          containerPort: 443
        imagePullPolicy: Always
---
apiVersion: v1
kind: Service
metadata:
  name: tea-beverage
  annotations:
    service.citrix.com/service-type-0: 'HTTP'
    service.citrix.com/frontend-ip: 10.105.158.194
    service.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'
    service.citrix.com/backend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'
spec:
  type: LoadBalancer
  ports:
  - name: tea-80
    port: 80
    targetPort: 80
  selector:
    name: tea-beverage
EOF
アプリケーションがデプロイされると、対応するエンティティとプロファイルがNetScaler上に作成されます。NetScalerで以下のコマンドを実行して、これらを確認してください: show cs vserver k8s-tea-beverage_80_default_svc および show servicegroup k8s-tea-beverage_80_sgp_f4lezsannvu7tk2ftpjbhi4hza2tvdnk。
  # show cs vserver k8s-tea-beverage_80_default_svc

    k8s-tea-beverage_80_default_svc (10.105.158.194:80) - HTTP Type: CONTENT
    State: UP
    Last state change was at Wed May  8 06:44:11 2024
    Time since last state change: 0 days, 00:04:24.740
    Client Idle Timeout: 180 sec
    Down state flush: ENABLED
    Disable Primary Vserver On Down : DISABLED
    Comment: uid=2TZGFGG3JKYS2D7KWJIPS7ODTL5D4S7IMU5K6GETMXHXRDE2WIAQ====
    HTTP profile name: k8s-tea-beverage_80_default_svc
    Appflow logging: ENABLED
    Port Rewrite : DISABLED
    State Update: DISABLED
    Default: k8s-tea-beverage_80_lbv_f4lezsannvu7tk2ftpjbhi4hza2tvdnk Content Precedence: RULE
    Vserver IP and Port insertion: OFF
    L2Conn: OFF Case Sensitivity: ON
    Authentication: OFF
    401 Based Authentication: OFF
    Push: DISABLED Push VServer:
    Push Label Rule: none
    HTTP Redirect Port: 0 Dtls : OFF
    Persistence: NONE
    Listen Policy: NONE
    IcmpResponse: PASSIVE
    RHIstate:  PASSIVE
    Traffic Domain: 0

  1) Default Target LB: k8s-tea-beverage_80_lbv_f4lezsannvu7tk2ftpjbhi4hza2tvdnk Hits: 0
  Done
  # show servicegroup k8s-tea-beverage_80_sgp_f4lezsannvu7tk2ftpjbhi4hza2tvdnk
      k8s-tea-beverage_80_sgp_f4lezsannvu7tk2ftpjbhi4hza2tvdnk - HTTP
      State: ENABLED  Effective State: UP  Monitor Threshold : 0
      Max Conn: 0  Max Req: 0  Max Bandwidth: 0 kbits
      Use Source IP: NO
      Client Keepalive(CKA): NO
      Monitoring Owner: 0
      TCP Buffering(TCPB): NO
      HTTP Compression(CMP): NO
      Idle timeout: Client: 180 sec  Server: 360 sec
      Client IP: DISABLED
      Cacheable: NO
      SC: ???
      SP: OFF
      Down state flush: ENABLED
      Monitor Connection Close : NONE
      Appflow logging: ENABLED
      HTTP profile name: k8s-tea-beverage_80_sgp_f4lezsannvu7tk2ftpjbhi4hza2tvdnk
      ContentInspection profile name: ???
      Process Local: DISABLED
      Traffic Domain: 0
      Comment: "lbsvc:tea-beverage,svcport:80,ns:default"


      1)  10.146.107.146:30092  State: UP  Server Name: 10.146.107.146  Server ID: None  Weight: 1  Order: Default
        Last state change was at Wed May  8 06:44:25 2024
        Time since last state change: 0 days, 00:04:51.610

        Monitor Name: tcp-default  State: UP  Passive: 0
        Probes: 59 Failed [Total: 0 Current: 0]
        Last response: Success - TCP syn+ack received.
        Response Time: 0.000 millisec

      2)  10.146.107.147:30092  State: UP  Server Name: 10.146.107.147  Server ID: None  Weight: 1  Order: Default
        Last state change was at Wed May  8 06:44:45 2024
        Time since last state change: 0 days, 00:04:31.690

        Monitor Name: tcp-default   State: UP Passive: 0
        Probes: 56 Failed [Total: 2 Current: 0]
        Last response: Success - TCP syn+ack received.
        Response Time: 0.000 millisec
Done
注記:
HTTPプロファイルは、シングルポートサービスでサポートされています。

Ingressアノテーションを使用してHTTPプロファイルを構成する

次の表に、HTTPユースケースとサンプルアノテーションを示します。
ユースケース サンプルアノテーション
HTTP/2の構成 ingress.citrix.com/frontend-httpprofile: '{"http2" : "enabled"}'ingress.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled"}'ingress.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2" : "enabled"}}'ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2direct" : "enabled"}}'ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2direct" : "enabled", "altsvc" : "enabled"}}'
HTTPセッションタイムアウトの処理 ingress.citrix.com/frontend-httpprofile: '{"reqtimeout" : "10", "reqtimeoutaction" : "drop"}'ingress.citrix.com/frontend-httpprofile: '{"reqtimeout" : "10", "adpttimeout" : "enabled"}'ingress.citrix.com/frontend-httpprofile: '{"reusepooltimeout" : "20000"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"reqtimeout" : "10", "reqtimeoutaction" : "drop"}}'ingress.citrix.com/backend-httpprofile: '{"apache" : {"reqtimeout" : "10", "adpttimeout" : "enabled"}}'ingress.citrix.com/backend-httpprofile: '{"apache" : {"reusepooltimeout" : "20000"}}'
注:
上記のIngressアノテーションは、以前に説明した形式のサービスアノテーションでも使用できます。

HTTP/2の構成

NetScalerは、クライアント側とサーバー側の両方でHTTP/2を構成します。詳細については、NetScalerのHTTP/2サポートを参照してください。HTTP負荷分散構成の場合、NetScalerは以下のいずれかの方法を使用して、HTTP/2を使用してクライアント/サーバーとの通信を開始します。
NetScaler は、HTTP/2 メソッド用の構成可能なオプションを HTTP プロファイルで提供します。これらの HTTP/2 オプションは、HTTPS または HTTP 負荷分散設定のクライアント側とサーバー側に適用できます。NetScaler Ingress Controller は、NetScaler 上で HTTP プロファイルを構成するためのアノテーションを提供します。これらのアノテーションを使用して、NetScaler 上のさまざまな HTTP 負荷分散構成を、HTTP/2 を使用してクライアント/サーバーと通信するように構成します。
注:
  • 以下のメソッドの説明では、クライアントとサーバーはHTTP/2接続の一般的な用語です。たとえば、HTTP/2を使用するNetScalerの負荷分散設定では、NetScalerはクライアント側ではサーバーとして機能し、サーバー側ではクライアントとして機能します。
  • NetScalerでHTTP/2サービス側のグローバルパラメータ(HTTP2Serverside)が有効になっていることを確認してください。

HTTP/2アップグレード

この方法では、クライアントはHTTP/1.1リクエストをサーバーに送信します。リクエストにはアップグレードヘッダーが含まれており、接続をHTTP/2にアップグレードするようサーバーに要求します。サーバーがHTTP/2をサポートしている場合、サーバーはアップグレードリクエストを受け入れ、その応答で通知します。クライアントはアップグレード確認応答を受信した後、クライアントとサーバーはHTTP/2を使用して通信を開始します。
HTTPプロファイルのアノテーションを使用して、NetScalerでHTTP/2アップグレードメソッドを構成できます。次のサンプルアノテーションは、NetScalerでHTTP/2アップグレードメソッドを構成します。
ingress.citrix.com/frontend-httpprofile: '{"http2" : "enabled"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2" : "enabled"}}'

直接HTTP/2

この方法では、クライアントはHTTP/2アップグレードメソッドを使用する代わりに、HTTP/2でサーバーと直接通信を開始します。サーバーがHTTP/2をサポートしていないか、HTTP/2リクエストを直接受け入れるように構成されていない場合、クライアントからのHTTP/2パケットを破棄します。この方法は、クライアントデバイスの管理者がサーバーがHTTP/2をサポートしていることをすでに知っている場合に役立ちます。
HTTPプロファイルの注釈を使用すると、NetScalerで直接HTTP/2メソッドを設定できます。NetScalerで直接HTTP/2メソッドを設定するためのHTTPプロファイルの注釈の例を次に示します。
ingress.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2direct" : "enabled"}}'

代替サービス (ALT-SVC) を使用した直接HTTP/2

この方法では、サーバーはHTTP/1.1応答に代替サービス (ALT-SVC) フィールドを含めることで、HTTP/2をサポートしていることをクライアントに通知します。クライアントがALT-SVCフィールドを理解するように設定されている場合、クライアントは応答を受信した後、クライアントとサーバーはHTTP/2を使用して直接通信を開始します。
NetScalerで代替サービス (ALT-SVC) メソッドを使用して直接HTTP/2を設定するためのHTTPプロファイルの注釈の例を次に示します。
ingress.citrix.com/frontend-httpprofile: '{"http2direct" : "enabled", "altsvc" : "enabled"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"http2direct" : "enabled", "altsvc" : "enabled"}}'

HTTPセッションタイムアウトの処理

さまざまな種類のHTTPリクエストを処理し、クライアントが開始する接続を制限したいSlowloris DDOS攻撃などの攻撃を軽減するために、さまざまなタイムアウトを設定できます。NetScalerでは、このようなシナリオに対して次のタイムアウトを設定できます。
  • reqTimeout と reqTimeoutAction
  • adptTimeout
  • reusePoolTimeout

reqTimeout と reqTimeoutAction

NetScalerでは、HTTPプロファイルのreqTimeoutおよびreqTimeoutActionパラメータを使用して、HTTPリクエストのタイムアウト値とリクエストのタイムアウトアクションを設定できます。reqTimeout値は秒単位で設定され、HTTPリクエストはreqTimeoutパラメータで指定された時間内に完了する必要があります。HTTPリクエストが定義された時間内に完了しない場合、reqTimeoutActionで指定されたリクエストタイムアウトアクションが実行されます。設定できる最小タイムアウト値は0、最大は86400です。デフォルトでは、タイムアウト値は0に設定されています。
reqTimeoutActionパラメータを使用して、HTTPリクエストのタイムアウト値 (reqTimeout) が経過した場合に実行するアクションの種類を指定できます。次のアクションを指定できます。
  • リセット
  • ドロップ
HTTPプロファイルの注釈を使用して、HTTPリクエストのタイムアウトとHTTPリクエストのタイムアウトアクションを設定できます。NetScalerでHTTPリクエストのタイムアウトとHTTPリクエストのタイムアウトアクションを設定するために、HTTPプロファイルの次のサンプル注釈が使用されます。
ingress.citrix.com/frontend-httpprofile: '{"reqtimeout" : "10", "reqtimeoutaction" : "drop"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"reqtimeout" : "10", "reqtimeoutaction" : "drop"}}'

adptTimeout

要求されたセッションに設定されたタイムアウト値を使用する代わりに、adptTimeoutを有効にすることもできます。adptTimeoutパラメータは、フロー条件に応じてリクエストのタイムアウトを調整します。有効にすると、リクエストのタイムアウトは内部的に増減され、フローに適用されます。デフォルトでは、このパラメータはDISABLEDに設定されています。
HTTPプロファイルの注釈を使用して、adpttimeoutパラメータを次のように有効または無効にできます。
ingress.citrix.com/frontend-httpprofile: '{"reqtimeout" : "10", "adpttimeout" : "enabled"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"reqtimeout" : "10", "adpttimeout" : "enabled"}}'

reusePoolTimeout

再利用プールからアイドル状態のサーバー接続をフラッシュするために、再利用プールタイムアウト値を設定できます。サーバーが設定された時間アイドル状態の場合、対応する接続はフラッシュされます。
設定できる最小タイムアウト値は0で、最大は31536000です。デフォルトでは、タイムアウト値は0に設定されています。
HTTPプロファイルの注釈を使用して、次のように必要なタイムアウト値を設定できます。
ingress.citrix.com/frontend-httpprofile: '{"reusepooltimeout" : "20000"}'
ingress.citrix.com/backend-httpprofile: '{"apache" : {"reusepooltimeout" : "20000"}}'

Ingressアノテーションを使用したHTTPプロファイルの適用例

この例では、HTTPプロファイルを適用する方法を示します。
  1. HTTPプロファイルを使用してフロントエンドのIngressリソースを展開します。このIngressリソースでは、バックエンドとTLSは定義されていません。
    kubectl apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: frontend-ingress
      annotations:
        ingress.citrix.com/insecure-termination: "allow"
        ingress.citrix.com/frontend-ip: "10.221.36.190"
        ingress.citrix.com/frontend-httpprofile: '{"reqtimeout" : "10", "adpttimeout" : "enabled"}'
    spec:
      tls:
      - hosts:
      rules:
      - host:
    EOF
  2. 同じフロントエンドIPアドレスを持つセカンダリIngressリソースを展開します。このIngressリソースでは、バックエンドとTLSが定義されており、ロードバランシングリソース定義が作成されます。
    kubectl apply -f - <<EOF
    apiVersion: networking.k8s.io/v1
    kind: Ingress
    metadata:
      name: backend-ingress
      annotations:
        ingress.citrix.com/insecure-termination: "allow"
        ingress.citrix.com/frontend-ip: "10.221.36.190"
    spec:
      tls:
      - secretName: <hotdrink-secret>
      rules:
      - host:  hotdrink.beverages.com
        http:
          paths:
          - path: /
            pathType: Prefix
            backend:
              service:
                name: frontend-hotdrinks
                port:
                  number: 80
    EOF
  3. Ingressリソースが展開されると、対応するエンティティとプロファイルがNetScaler上に作成されます。 NetScalerで次のコマンドを実行して、これを確認します: show cs vserver k8s-10.221.36.190_443_ssl。
        # show cs vserver k8s-10.221.36.190_443_ssl
          k8s-10.221.36.190_443_ssl (10.221.36.190:443) - SSL Type: CONTENT
          State: UP
          Last state change was at Wed Apr  3 04:50:56 2024
          Time since last state change: 0 days, 00:00:31.590
          Client Idle Timeout: 180 sec
          Down state flush: ENABLED
          Disable Primary Vserver On Down : DISABLED
          Comment: uid=IIFGNN4JZ4LBQ7VCBTX6DN7TIBGGOU3OD2OBIC7MB73O2B2FNL2Q====
          **HTTP profile name: k8s-10.221.36.190_443_ssl**
          Appflow logging: ENABLED
          State Update: DISABLED
          Default: Content Precedence: RULE
          Vserver IP and Port insertion: OFF
          L2Conn: OFF Case Sensitivity: ON
          Authentication: OFF
          401 Based Authentication: OFF
          Push: DISABLED Push VServer:
          Push Label Rule: none
          HTTP Redirect Port: 0 Dtls : OFF
          Persistence: NONE
          Listen Policy: NONE
          IcmpResponse: PASSIVE
          RHIstate:  PASSIVE
          Traffic Domain: 0

          1) Content-Switching Policy: k8s-backend_80_csp_2k75kfjrr6ptgzwtncozwxdjqrpbvicz Rule: HTTP.REQ.HOSTNAME.SERVER.EQ("hotdrink.beverages.com") && HTTP.REQ.URL.PATH.SET_TEXT_MODE(IGNORECASE).STARTSWITH("/") Priority: 200000008 Hits: 0
          Done
注:
NetScalerでサポートされているさまざまなHTTPパラメータについては、NetScaler 14.1 REST APIs - NITRO Documentation for HTTP profilesを参照してください。JSON形式で渡すキーと値は、NITRO形式の値と一致する必要があります。