ダイレクトサーバーリターンを展開する

最終公開日 : Oct 02, 2026
一般的なロードバランシングシステムでは、ロードバランサーが Webサーバーとクライアント間の仲介役を務めます。受信したクライアントリクエストはロードバランサーによって受け取られ、データパケットにわずかな変更を加えて適切なサーバーに渡されます。サーバーは必要なデータでロードバランサーに応答し、その後ロードバランサーがその応答をクライアントに転送します。
ダイレクトサーバーリターン (DSR) 展開では、ロードバランサーはクライアントリクエストをサーバーに転送しますが、バックエンドサーバーは応答を直接クライアントに送信します。リクエストと応答に異なるネットワークパスを使用することで、余分なホップを回避し、遅延を削減できます。サーバーがクライアントに直接応答するため、DSRはクライアントとサーバー間の応答時間を高速化し、ロードバランサーからの余分な負荷も軽減します。DSRを使用することは、インフラストラクチャの変更をほとんどまたはまったく行わずに、アプリケーションのネットワークパフォーマンスを向上させる透過的な方法です。 NetScalerを使用したDSRの詳細については、NetScalerドキュメントを参照してください。
DSRソリューションは、以下の状況で役立ちます。
  • 低遅延(応答時間)が重要なビデオストリーミングを提供するアプリケーションを処理する場合。
  • インテリジェントなロードバランシングが不要な場合
  • ロードバランサーの出力容量がボトルネックになる可能性がある場合
ただし、DSRを使用する場合、高度なレイヤー7ロードバランシング機能はサポートされません。

NetScalerを使用したKubernetes向けDSRネットワークトポロジ

このトポロジでは、外部ロードバランサー(Tier-1 ADC)が、オーバーレイ(L3 DSR IPIP)を介してKubernetesクラスター内に展開されたイングレスADC(Tier 2 ADC)にトラフィックを分散します。Tier-2 ADCはパケットを受け取り、パケットをデカプセル化し、サービス間でロードバランシングを実行します。Tier-2 ADCは、Tier-1 ADCを介して送信する代わりに、サービスからの戻りトラフィックをクライアントに送信します。
DSRトラフィックフロー

NetScalerを使用したクラウドネイティブアプリケーション向けDSRの展開

Kubernetesクラスターに展開されたアプリケーション向けにDSRを展開するには、以下のセクションの手順を実行します。

NetScaler CPXをTier-2 ADCとして展開する

このセクションでは、DSRトポロジのイングレスデバイスで必要となる構成を作成する手順について説明します。
  1. 以下のコマンドを使用してDSR用の名前空間を作成します。
    kubectl apply -f  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/dsr_namespace.yaml
  2. 以下のコマンドを使用してConfigMapを作成します。
    kubectl apply -f  https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/cpx_config.yaml  -n dsr
    注:
    この例では、ノードコントローラーネットワークは192.168.1.0/24として構成されています。したがって、IPトンネルを作成するコマンドはadd iptunnel dsr 192.168.1.254 255.255.255.0 *として提供されます。CNC構成に従って値を指定する必要があります。
  3. 名前空間dsrにNetScaler CPXを展開します。
    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/citrix-k8s-cpx-ingress.yml  -n dsr

Kubernetesクラスターへのサンプルアプリケーションの展開

このセクションの手順を実行して、Kubernetesクラスターにサンプルアプリケーションを展開します。
  1. 以下のコマンドを使用してゲストブックアプリケーションを展開します。
    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/guestbook-all-in-one.yaml  -n dsr
  2. Ingressを使用してゲストブックアプリケーションを公開します。
    1. 以下のコマンドを使用してゲストブックIngress YAMLファイルをダウンロードします。
      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/guestbook-all-in-one.yaml
    2. ingress.citrix.com/frontend-ip:アノテーションを使用して、アプリケーションにアクセスするためのDSR IPまたはパブリックIPアドレスを編集して指定します。
      ingress.citrix.com/frontend-ip: "<ip-address>"
    3. YAMLファイルを保存し、以下のコマンドを使用してIngressリソースを展開します。
      kubectl apply -f guestbook-ingress.yaml -n dsr

Tier-1とTier-2 ADC間のネットワーク接続を確立する

このセクションの手順を実行して、Tier-1とTier-2 ADC間のネットワーク接続を確立します。
  1. 以下のコマンドを使用してノードコントローラーを展開するためのYAMLをダウンロードします。
    wget https://raw.githubusercontent.com/citrix/citrix-k8s-node-controller/master/deploy/citrix-k8s-node-controller.yaml
  2. YAMLファイルを編集し、NS_IP、NS_USER、NS_PASSWORD、およびREMOTE_VTEPIP引数の値を指定します。詳細については、ノードコントローラーを参照してください。
  3. YAMLファイルを保存し、ノードコントローラーを展開します。
    kubectl create -f citrix-k8s-node-controller.yaml -n dsr

Tier-1 ADC 用のNetScaler Ingress Controllerを展開し、NetScaler CPXをサービスとして公開する

NetScaler Ingress Controllerをスタンドアロンポッドとして展開し、Tier-2 NetScaler CPXのIngressリソースを作成するには、次の手順を実行します。
  1. 次のコマンドを使用して、NetScaler Ingress ControllerのYAMLファイルをダウンロードします。
    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/citrix-k8s-ingress-controller.yaml
  2. YAMLファイルを編集し、NetScaler Ingress Controllerの次の値を更新します。
    • NS_IP
    • NS_USER
    • NS_PASSWORD
    詳細については、「YAMLを使用してNetScaler Ingress Controllerを展開する」を参照してください。
  3. YAMLファイルを保存し、NetScaler Ingress Controllerを展開します。
    kubectl create -f citrix-k8s-ingress-controller.yaml -n dsr
  4. Tier-2 NetScaler CPXのIngressリソースを作成して、Tier-1 ADCでDSR構成を作成します。
    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/vpx-ingress.yaml
  5. YAMLファイルを編集し、ingress.citrix.com/frontend-ip:アノテーションを使用してユーザーがアプリケーションにアクセスするDSRまたはパブリックIPアドレスを指定します。このIPアドレスは、手順2で指定したIPアドレスと同じである必要があります。
    kubectl apply -f vpx-ingress.yaml  -n dsr

DSR展開をテストする

DSR展開をテストするには、ingress.citrix.com/frontend-ip:アノテーションで指定されたIPアドレスを使用してブラウザからアプリケーションにアクセスします。ゲストブックページが表示されます。
サンプル出力は以下のとおりです。
アプリケーション出力

トラブルシューティング

アプリケーションをテストする際、必要な設定がすべて作成されていても、ページが表示されない場合があります。これは、ホスト上のrp_filterルールが原因です。このような問題が発生した場合は、すべてのホストで以下のコマンドを使用してルールを無効にしてください。
sysctl -w net.ipv4.conf.all.rp_filter=0
sysctl -w net.ipv4.conf.cni0.rp_filter=0
sysctl -w net.ipv4.conf.eth0.rp_filter=0
sysctl -w net.ipv4.conf.cni0.rp_filter=0
sysctl -w net.ipv4.conf.default.rp_filter=0