TCPのユースケース

最終公開日 : Oct 02, 2026
Kubernetes環境では、イングレスオブジェクトにより、Kubernetesクラスターの外部からKubernetesサービスへのアクセスが可能になります。標準のKubernetesイングレスリソースは、すべてのトラフィックがHTTPベースであると想定しており、TCP、UDP、SSLなどの非HTTPベースのプロトコルには対応していません。したがって、DNS、FTP、LDAPなどの非HTTPアプリケーションは、標準のKubernetesイングレスを使用して公開することはできません。

TCPイングレストラフィックを負荷分散する方法

NetScalerは、イングレスアノテーションを使用してTCPベースのイングレストラフィックを負荷分散するソリューションを提供します。イングレスリソース定義でこれらのアノテーションを指定すると、NetScaler Ingress ControllerはNetScalerを構成してTCPイングレストラフィックを負荷分散します。

TCPベースのイングレストラフィック

TCPベースのイングレストラフィックを負荷分散するには、Kubernetesイングレスリソース定義で次のアノテーションを使用できます。
  • ingress.citrix.com/insecure-service-type: このアノテーションは、NetScalerでTCPを使用したL4負荷分散を有効にします。
  • ingress.citrix.com/insecure-port: このアノテーションはTCPトラフィックのポートを構成し、非標準ポートでマイクロサービスアクセスが必要な場合に役立ちます。デフォルトでは、ポート80が構成されています。
イングレスアノテーションの詳細については、Ingress annotationsを参照してください。
サンプル: TCPベースのイングレスのイングレス定義。
kubectl apply -f - <<EOF  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: "192.168.1.1" # If you are using IPAM then use ingress.citrix.com/ipam-range: "<IPAM Range Name>"
    ingress.citrix.com/insecure-port: '6379'
    ingress.citrix.com/insecure-service-type: tcp
  name: redis-master-ingress
spec:
  ingressClassName: guestbook
  defaultBackend:
    service:
      name: redis-master-pods
      port:
        number: 6379
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: guestbook
spec:
  controller: citrix.com/ingress-controller
EOF

LoadBalancerタイプのサービスに対するTCPベースのトラフィック

サービス定義YAMLで次のサービスアノテーションを使用して、TCPベースのトラフィックを負荷分散できます: service.citrix.com/service-type-<index>。サービスアノテーションの詳細については、Service annotationsを参照してください。
サンプル: TCPベースのトラフィックを負荷分散するためのService type LoadBalancer YAML。
apiVersion: v1
kind: Service
metadata:
  name: backend
  annotations:
      service.citrix.com/class: 'netscaler' # During deployment of NSIC, set `serviceClass` with 'netscaler'.
      service.citrix.com/frontend-ip: '192.168.1.10' # If you are using IPAM then use, service.citrix.com/ipam-range: "<IPAM Range Name>"
      service.citrix.com/service-type-0: TCP
  labels:
      app: backend
spec:
  ports:
    - name: port-6379
      port: 6379
      targetPort: 6379
  type: LoadBalancer
  selector:
    name: backend

SSL over TCPに基づいたイングレストラフィックの負荷分散

NetScaler Ingress Controllerは、SSL over TCPに基づいたイングレストラフィックを負荷分散するために使用できるingress.citrix.com/secure-service-type: ssl_tcpアノテーションを提供します。
サンプル: TCPベースのIngressにおけるSSL用Ingress定義。
kubectl apply -f - <<EOF  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: "192.168.1.1" # If you are using IPAM then use ingress.citrix.com/ipam-range: "<IPAM Range Name>"
    ingress.citrix.com/secure-service-type: "ssl_tcp"
    ingress.citrix.com/secure-backend: '{"frontendcolddrinks":"True"}'
  name: colddrinks-ingress
spec:
  ingressClassName: colddrink
  defaultBackend:
    service:
      name: frontendcolddrinks
      port:
        number: 443
  tls:
  - secretName: "colddrink-secret"
---
apiVersion: networking.k8s.io/v1
kind: IngressClass
metadata:
  name: colddrink
spec:
  controller: citrix.com/ingress-controller
EOF

TCPベースのアプリケーションのパフォーマンスを監視し、改善する

アプリケーション開発者は、NetScalerの豊富なモニター(TCP-ECVなど)を通じて、TCPベースのアプリケーションの健全性を綿密に監視できます。ECV(拡張コンテンツ検証)モニターは、アプリケーションが期待されるコンテンツを返すかどうかを確認するのに役立ちます。NetScaler Ingress Controllerは、バックエンドサービスの健全性を監視するために使用できるingress.citrix.com/monitorアノテーションを提供します。NetScalerの組み込みモニターの詳細については、組み込みモニターを参照してください。
また、Source IPなどの永続化メソッドを使用することで、アプリケーションのパフォーマンスを向上させることができます。これらのNetScaler機能は、Kubernetesのスマートアノテーションを通じて使用できます。
以下のIngressリソースの例では、スマートアノテーションを使用しています。
kubectl apply -f - <<EOF  
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  annotations:
    ingress.citrix.com/frontend-ip: "192.168.1.1" # If you are using IPAM then use ingress.citrix.com/ipam-range: "<IPAM Range Name>"
    ingress.citrix.com/insecure-port: "80"
    ingress.citrix.com/lbvserver: '{"mongodb-svc":{"lbmethod":"SRCIPDESTIPHASH"}}'
    ingress.citrix.com/monitor: '{"mongodbsvc":{"type":"TCP-ECV"}}'
  name: mongodb
spec:
  rules:
  - host: mongodb.beverages.com
    http:
      paths:
      - backend:
          service:
            name: mongodb-svc
            port:
              number: 80
        path: /
        pathType: Prefix
EOF

NetScaler CPXサービスで非標準HTTPポートを公開する方法

NetScaler CPXサービスで、他のポートでTCPトラフィックを許可するために、80番ポートと443番ポート以外のポートを公開する必要がある場合があります。 このセクションでは、KubernetesクラスターにNetScaler CPXサービスをデプロイする際に、NetScaler CPXサービスで他の非標準HTTPポートを公開する方法について説明します。

Helmチャートのデプロイの場合

Helmチャートを使用してIngress ControllerとともにNetScaler CPXをデプロイする際に非標準HTTPポートを公開するには、Helmチャートインストールガイドを参照してください。
servicePorts:
  - port: 80
    protocol: TCP
    name: http
  - port: 443
    protocol: TCP
    name: https
  - port: 6379
    protocol: TCP
    name: tcp

OpenShift Operatorを使用するデプロイの場合

OpenShift Operatorを使用するデプロイの場合、NetScaler Operatorを使用してNetScaler CPXをサイドカーとしてNetScaler Ingress Controllerをデプロイするのステップ6で指定されているように、Ingress ControllerとともにCPXを作成するためにYAML定義を編集し、serviceセクションの以下のコードブロックで指定されているようにポートを指定する必要があります。
service:
  annotation: {}
  spec:
    type: NodePort # ClusterIP or LoadBalancer
    ports:
    - port: 80
      targetPort: 80
      protocol: TCP
      name: http
    - port: 443
      targetPort: 443
      protocol: TCP
      name: https

TCPプロファイルのサポート

このセクションでは、NetScaler Ingress Controllerのアノテーションを使用して、LoadBalancerタイプおよびIngressタイプのサービスに対してスマートアノテーションを使用してNetScalerでTCPパラメーターを構成するさまざまな方法について説明します。
TCPプロファイルは、TCP設定の集合です。各エンティティで設定を構成する代わりに、プロファイルでTCP設定を構成し、必要なすべてのエンティティにプロファイルをバインドできます。フロントエンドTCPプロファイルはクライアント側のコンテンツスイッチング仮想サーバーにアタッチでき、バックエンドTCPプロファイルはサービスグループ用に構成できます。

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

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

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

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

組み込みTCPプロファイル

組み込みTCPプロファイルは、プロファイルを作成するのではなく、アノテーションで指定されたプロファイル名を対応する仮想サーバー (frontend-tcpprofile) およびサービスグループ (backend-tcpprofile) にバインドします。
組み込みTCPプロファイルの例:
service.citrix.com/frontend-tcpprofile: "tcp_preconf_profile"
service.citrix.com/backend-tcpprofile: '{"citrix-svc" : "tcp_preconf_profile"}

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

この例では、サンプルアプリケーション tea-beverage 用にTCPプロファイルが構成されています。このアプリケーションは、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/frontend-ip: 10.105.158.194 # If you are using IPAM then use, service.citrix.com/ipam-range: "<IPAM Range Name>"
    service.citrix.com/frontend-tcpprofile: '{"ws" : "enabled", "sack" : "enabled"}'
    service.citrix.com/backend-tcpprofile: '{"ws" : "enabled", "sack" : "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) - TCP Type: CONTENT
        State: UP
        Last state change was at Wed Apr  3 09:37:59 2024
        Time since last state change: 0 days, 00:00:09.790
        Client Idle Timeout: 9000 sec
        Down state flush: ENABLED
        Disable Primary Vserver On Down : DISABLED
        Comment: uid=VIGQWRCYKCM6WFYX2GFKRVT3ZF6JSFISPW6XM24JADBXEYRLITOQ====
        **TCP profile name: k8s-tea-beverage_80_default_svc**
        Appflow logging: ENABLED
        State Update: DISABLED
        Default: k8s-tea-beverage_80_lbv_f4lezsannvu7tk2ftpjbhi4hza2tvdnk Content Precedence: RULE
        L2Conn: OFF Case Sensitivity: ON
        Authentication: OFF
        401 Based Authentication: OFF
        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 - TCP
        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: 9000 sec Server: 9000 sec
        Client IP: DISABLED
        Cacheable: NO
        SC: ???
        SP: OFF
        Down state flush: ENABLED
        Monitor Connection Close : NONE
        Appflow logging: ENABLED
        TCP 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.38:30524 State: UP Server Name: 10.146.107.38 Server ID: None Weight: 1 Order: Default
          Last state change was at Wed Apr  3 09:38:00 2024
          Time since last state change: 0 days, 00:02:27.660

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

Ingressアノテーションを使用したTCPプロファイルの構成

次の表に、サンプルアノテーションを使用したTCPのユースケースの一部を示します。
ユースケース サンプルアノテーション
アイドルTCP接続をサイレントに破棄する ingress.citrix.com/frontend-tcpprofile: '{"drophalfclosedconnontimeout" : "enabled", "dropestconnontimeout" : "enabled"}'ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"drophalfclosedconnontimeout" : "enabled", "dropestconnontimeout" : "enabled"}}'
TCP接続の確認応答の遅延 ingress.citrix.com/frontend-tcpprofile: '{"delayedack" : "150"}'ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"delayedack" : "150"}}'
クライアント側のマルチパスTCPセッション管理 ingress.citrix.com/frontend-tcpprofile: '{"mptcp": "enabled", "mptcpsessiontimeout" : "7200"}'ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"mptcp": "enabled", "mptcpsessiontimeout" : "7200"}}'
TCP最適化
選択的確認応答 ingress.citrix.com/frontend_tcpprofile: '{"sack" : "enabled"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"sack" : "enabled"}}'
前方確認応答 ingress.citrix.com/frontend_tcpprofile: '{"fack" : "enabled"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"fack" : "enabled"}}'
ウィンドウ スケーリング ingress.citrix.com/frontend_tcpprofile: '{"ws" : "enabled", "wsval" : "9"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"ws" : "enabled", "wsval" : "9"}}'
最大セグメントサイズ ingress.citrix.com/frontend_tcpprofile: '{"mss" : "1460", "maxpktpermss" : "512"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"mss" : "1460", "maxpktpermss" : "512"}}'
キープアライブ ingress.citrix.com/frontend_tcpprofile: '{"ka" : "enabled", "kaprobeupdatelastactivity" : "enabled", "kaconnidletime": "900", "kamaxprobes" : "3", "kaprobeinterval" : "75"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"ka" : "enabled", "kaprobeupdatelastactivity" : "enabled", "kaconnidletime": "900", "kamaxprobes" : "3", "kaprobeinterval" : "75"}}'
bufferSize ingress.citrix.com/frontend_tcpprofile: '{"bufferSize" : "8190"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"bufferSize" : "8190"}}'
MPTCP ingress.citrix.com/frontend_tcpprofile: '{"mptcp" : "enabled", "mptcpdropdataonpreestsf" : "enabled", "mptcpfastopen": "enabled", "mptcpsessiontimeout" : "7200"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"mptcp" : "enabled", "mptcpdropdataonpreestsf" : "enabled", "mptcpfastopen": "enabled", "mptcpsessiontimeout" : "7200"}}'
フレーバー ingress.citrix.com/frontend_tcpprofile: '{"flavor" : "westwood"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"flavor" : "westwood"}}'
動的受信バッファリング ingress.citrix.com/frontend_tcpprofile: '{"dynamicReceiveBuffering" : "enabled"}'ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"dynamicReceiveBuffering" : "enabled"}}'
スプーフィング攻撃に対するTCPの防御 ingress.citrix.com/frontend_tcpprofile: '{"rstwindowattenuate" : "enabled", "spoofsyndrop" : "enabled"}ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"rstwindowattenuate" : "enabled", "spoofsyndrop" : "enabled"}}'
注:
前述のIngressアノテーションは、以前に説明した形式でサービスアノテーションとともに使用することもできます。

アイドル状態のTCP接続をサイレントに切断する

ネットワークにおいて、多くのTCP接続がアイドル状態になると、NetScalerはそれらを閉じるためにRSTパケットを送信します。チャネルを介して送信されるパケットは、それらのチャネルを不必要にアクティブにし、メッセージの洪水を引き起こし、それがNetScalerにサービス拒否メッセージの洪水を生成させます。
TCPプロファイルのdrophalfclosedconnontimeoutおよびdropestconnontimeoutパラメータを使用すると、アイドルタイムアウト時にTCPの半閉接続をサイレントに切断したり、アイドルタイムアウト時にTCPの確立済み接続を切断したりできます。デフォルトでは、これらのパラメータはNetScalerで無効になっています。両方を有効にすると、接続がタイムアウトしても、半閉接続も確立済み接続もクライアントにRSTパケットを送信することはありません。NetScalerは単に接続を切断します。
TCPプロファイルの注釈を使用すると、NetScalerでdrophalfclosedconnontimeoutとdropestconnontimeoutを有効または無効にできます。以下は、これらのパラメータを有効にするTCPプロファイルの注釈の例です。
ingress.citrix.com/frontend-tcpprofile: '{"drophalfclosedconnontimeout" : "enable", "dropestconnontimeout" : "enable"}'
ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"drophalfclosedconnontimeout" : "enable", "dropestconnontimeout" : "enable"}}'

遅延TCP接続確認応答

複数のACKパケットの送信を避けるため、NetScalerはTCP遅延確認応答メカニズムをサポートしています。これは、デフォルトのタイムアウト100ミリ秒で遅延ACKを送信します。NetScalerはデータパケットを蓄積し、連続して2つのデータパケットを受信した場合、またはタイマーが期限切れになった場合にのみACKを送信します。TCP展開ACKに設定できる最小遅延は10ミリ秒、最大は300ミリ秒です。デフォルトでは、遅延は100ミリ秒に設定されています。
TCPプロファイルの注釈を使用すると、遅延ACKパラメータを管理できます。以下は、これらのパラメータを有効にするTCPプロファイルの注釈の例です。
ingress.citrix.com/frontend-tcpprofile: '{"delayedack" : "150"}'
ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"delayedack" : "150"}}'

クライアント側マルチパスTCPセッション管理

クライアントとNetScaler間のマルチパスTCP (MPTCP) 接続に対して、NetScalerでTCP設定を実行できます。NetScalerとバックエンド通信間ではMPTCP接続はサポートされていません。クライアントとNetScalerアプライアンスの両方が同じMPTCPバージョンをサポートしている必要があります。
NetScalerのTCPプロファイルを使用して、MPTCPを有効にし、MPTCPセッションタイムアウト (mptcpsessiontimeout) を秒単位で設定できます。mptcpsessiontimeout値が設定されていない場合、MPTCPセッションはクライアントアイドルタイムアウト後にフラッシュされます。設定できる最小タイムアウト値は0、最大は86400です。デフォルトでは、タイムアウト値は0に設定されています。
TCPプロファイルの注釈を使用すると、NetScalerでMPTCPを有効にし、mptcpsessiontimeoutパラメータ値を設定できます。以下は、NetScalerでMPTCPを有効にし、mptcpsessiontimeoutパラメータ値を7200に設定するTCPプロファイルの注釈の例です。
ingress.citrix.com/frontend-tcpprofile: '{"mptcp" : "enabled", "mptcpsessiontimeout" : "7200"}'
ingress.citrix.com/backend-tcpprofile: '{"citrix-svc" : {"mptcp" : "enabled", "mptcpsessiontimeout" : "7200"}}'

TCP最適化

NetScalerの関連するTCP最適化機能のほとんどは、対応するTCPプロファイルを通じて公開されています。TCPプロファイルの注釈を使用すると、NetScalerで以下のTCP最適化機能を有効にできます。
  • Selective acknowledgment (SACK): TCP SACKは、複数のパケット損失の問題に対処し、全体的なスループット容量を低下させます。選択的確認応答により、受信側は正常に受信されたすべてのセグメントを送信側に通知でき、送信側は失われたセグメントのみを再送信できます。この手法は、全体的なスループットを向上させ、接続遅延を削減するのに役立ちます。
    以下は、NetScalerでSACKを有効にするTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"sack" : "enabled"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"sack" : "enabled"}}'
  • Forward acknowledgment (FACK): ネットワーク内の未処理のデータバイトの総数を明示的に測定することでTCP輻輳を回避し、送信者(T1またはクライアントのいずれか)が再送信タイムアウト中にネットワークに注入するデータ量を制御するのに役立ちます。
    以下は、NetScalerでFACKを有効にするTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"fack" : "enabled"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"fack" : "enabled"}}'
  • Window Scaling (WS): TCPウィンドウのスケーリングにより、TCP受信ウィンドウサイズを65535バイトを超えて増やすことができます。これにより、TCPパフォーマンス全体、特に高帯域幅で遅延の大きいネットワークでのパフォーマンスが向上します。遅延を減らし、TCP経由の応答時間を改善するのに役立ちます。
    以下は、NetScalerでWSを有効にするTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"ws" : "enabled", "wsval" : "9"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"ws" : "enabled", "wsval" : "9"}}'
    ここで、wsval は新しいウィンドウサイズを計算するために使用される係数です。この引数は、ウィンドウのスケーリングが有効になっている場合にのみ必須です。設定できる最小値は0、最大値は14です。デフォルトでは、値は4に設定されています。
  • Maximum Segment Size (MSS): 単一のTCPセグメントのMSS。この値は、中間ルーターとエンドクライアントのMTU設定に依存します。1460の値は、MTUが1500に対応します。
    NetScalerでMSSを有効にするTCPプロファイルの注釈の例を次に示します。
    ingress.citrix.com/frontend_tcpprofile: '{"mss" : "1460", "maxpktpermss" : "512"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"mss" : "1460", "maxpktpermss" : "512"}}'
    ここで、:
    • mss は、TCP接続に使用するMSSです。最小値: 0; 最大値: 9176。
    • maxpktpermss は、最大セグメントサイズ(MSS)ごとに許可されるTCPパケットの最大数です。最小値: 0; 最大値: 1460。
  • Keep-Alive (KA): ピアがまだ稼働しているかを確認するために、定期的なTCPキープアライブ(KA)プローブを送信します。
    NetScalerでTCPキープアライブ(KA)を有効にするTCPプロファイルの注釈の例を次に示します。
    ingress.citrix.com/frontend_tcpprofile: '{"ka" : "enabled", "kaprobeupdatelastactivity" : "enabled", "kaconnidletime": "900", "kamaxprobes" : "3", "kaprobeinterval" : "75"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"ka" : "enabled", "kaprobeupdatelastactivity" : "enabled", "kaconnidletime": "900", "kamaxprobes" : "3", "kaprobeinterval" : "75"}}'
    ここで、:
    • ka は、ピアがまだ稼働しているかを確認するために、定期的なTCPキープアライブ(KA)プローブの送信を有効にするために使用されます。可能な値: ENABLED, DISABLED。デフォルト値: DISABLED。
    • kaprobeupdatelastactivity は、キープアライブ(KA)プローブを受信した後、接続の最終アクティビティを更新します。可能な値: ENABLED, DISABLED。デフォルト値: ENABLED。
    • kaconnidletime は、キープアライブ(KA)プローブを送信する前に、接続がアイドル状態である期間(秒単位)です。設定できる最小値は1、最大値は4095です。
    • kaprobeinterval は、ピアが応答しない場合に、次のキープアライブ(KA)プローブまでの時間間隔(秒単位)です。設定できる最小値は1、最大値は4095です。
  • bufferSize: TCPバッファサイズをバイト単位で指定します。設定できる最小値は8190、最大値は20971520です。デフォルト値は8190です。
    以下は、TCPバッファサイズを指定するためのTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"bufferSize" : "8190"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"bufferSize" : "8190"}}'
  • Multipath TCP (MPTCP): MPTCPを有効にし、オプションのMPTCP設定を行います。以下は、MPTCPを有効にし、オプションのMPTCP設定を行うためのTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"mptcp" : "enabled", "mptcpdropdataonpreestsf" : "enabled", "mptcpfastopen": "enabled", "mptcpsessiontimeout" : "7200"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"mptcp" : "enabled", "mptcpdropdataonpreestsf" : "enabled", "mptcpfastopen": "enabled", "mptcpsessiontimeout" : "7200"}}'
    ここで、:
    • mptcpdropdataonpreestsf は、確立済みのサブフローでデータをサイレントに破棄するために使用されます。有効にすると、確立済みのサブフローでデータが受信されたときに、接続を破棄する代わりにDSSデータパケットがサイレントに破棄されます。可能な値:ENABLED、DISABLED。デフォルト値:DISABLED。
    • mptcpfastopen を有効にすると、SYNハンドシェイクの3番目のACKを受信する前にDSSデータパケットが受け入れられます。可能な値:ENABLED、DISABLED。デフォルト値:DISABLED。
  • flavor: TCP輻輳制御アルゴリズムを設定します。可能な値:Default、BIC、CUBIC、Westwood、Nile。デフォルト値:Default。以下は、TCP輻輳制御アルゴリズムを設定するTCPプロファイルの注釈の例です。
    ingress.citrix.com/frontend_tcpprofile: '{"flavor" : "westwood"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"flavor" : "westwood"}}'
  • Dynamic receive buffering: 動的受信バッファリングを有効または無効にします。有効にすると、メモリとネットワークの状態に基づいて受信バッファを動的に調整できます。可能な値:ENABLED、DISABLED。デフォルト値:DISABLED。
    注:
    動的な調整を行うには、バッファサイズ引数を設定する必要があります。
    ingress.citrix.com/frontend_tcpprofile: '{"dynamicReceiveBuffering" : "enabled"}'
    ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"dynamicReceiveBuffering" : "enabled"}}'

スプーフィング攻撃からTCPを防御する

NetScalerでTCPプロファイルのrstWindowAttenuateパラメータを使用して、スプーフィング攻撃からTCPを防御できます。デフォルトでは、rstWindowAttenuateパラメータは無効になっています。このパラメータは、NetScalerをスプーフィングから保護するために有効にされます。rstWindowAttenuateを有効にすると、無効なシーケンス番号に対して修正確認応答(ACK)で応答します。可能な値:Enabled、Disabled。また、spoofSynDropパラメータを使用して、スプーフィングから保護するために無効なSYNパケットのドロップを有効または無効にできます。無効にすると、SYNパケットを受信したときに確立された接続がリセットされます。このパラメータのデフォルト値はENABLEDです。
以下は、NetScalerでrstWindowAttenuateを有効にするTCPプロファイルのサンプルアノテーションです。
ingress.citrix.com/frontend_tcpprofile: '{"rstwindowattenuate" : "enabled", "spoofsyndrop" : "enabled"}'
ingress.citrix.com/backend_tcpprofile: '{"citrix-svc" : {"rstwindowattenuate" : "enabled", "spoofsyndrop" : "enabled"}}'

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

この例では、TCPプロファイルを適用する方法を示します。
  1. TCPプロファイルを使用してフロントエンド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" # If you are using IPAM then use, ingress.citrix.com/ipam-range: "<IPAM Range Name>"
        ingress.citrix.com/frontend-tcpprofile: '{"ws" : "enabled", "sack" : "enabled"}'
    spec:
      tls:
      - hosts:
      rules:
      - host:
    EOF
  2. 同じフロントエンドIPアドレスを持つセカンダリ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" # If you are using IPAM then use, ingresss.citrix.com/ipam-range: "<IPAM Range Name>"
    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:21:38 2024
          Time since last state change: 0 days, 00:00:57.420
          Client Idle Timeout: 180 sec
          Down state flush: ENABLED
          Disable Primary Vserver On Down : DISABLED
          Comment: uid=XMX2KPYG2GUJIHGTLVCPA7QVXDUBDRMJFTAWNCPAA2TVXB33EL5A====
          TCP 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でサポートされているさまざまなTCPパラメータの網羅的なリストについては、サポートされているTCPパラメータを参照してください。JSON形式で渡すキーと値は、NetScaler NITRO形式と一致している必要があります。NetScaler NITRO APIの詳細については、NetScaler 14.1 REST API - TCPプロファイル用NITROドキュメントを参照してください。