Citrix ADC ingress controller

ダイレクトサーバー返却の導入

一般的な負荷分散システムでは、ロードバランサは Web サーバーとクライアント間の仲介役として機能します。受信したクライアント要求はロードバランサによって受信され、データパケットにわずかな変更を加えて要求を適切なサーバに渡します。サーバは必要なデータでロードバランサに応答し、ロードバランサはその応答をクライアントに転送します。

Direct Server Return (DSR) 展開では、ロードバランサはクライアント要求をサーバーに転送しますが、バックエンドサーバーは応答をクライアントに直接送信します。リクエストとレスポンスに異なるネットワークパスを使用することで、余分なホップを回避し、レイテンシを削減できます。サーバーはクライアントに直接応答するため、DSRはクライアントとサーバー間の応答時間を短縮し、ロードバランサーから余分な負荷を軽減します。DSRの使用は、インフラストラクチャの変更をほとんどまたはまったく行わずに、アプリケーションのネットワークパフォーマンスを向上させるための透過的な方法です。 Citrix ADCを使用したDSRについて詳しくは、 Citrix ADC ドキュメントを参照してください

DSRソリューションは、次のような場合に役立ちます。

  • 低遅延 (応答時間) が重要なビデオストリーミングを配信するアプリケーションを処理します。
  • インテリジェントな負荷分散が不要な場合
  • ロードバランサーの出力容量がボトルネックになり得る場合

ただし、DSR Advanced Layer 7 を使用する場合、負荷分散機能はサポートされません。

Citrix ADCを使用したKubernetesのDSRネットワークトポロジー

このトポロジーには、Kubernetes クラスター内にデプロイされた入力 ADC (Tier 2 ADC) にオーバーレイ (L3 DSR IPIP) を介してトラフィックを分散する外部ロードバランサー (Tier-1 ADC) があります。Tier-2 ADC はパケットをピックアップし、パケットのカプセル化を解除し、サービス間の負荷分散を実行します。Tier-2 ADC は、サービスからのリターントラフィックを Tier-1 ADC 経由で送信するのではなく、クライアントに送信します。

DSR_Traffic_Flow

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

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

Citrix ADC CPXをティア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
    

    注:

    この例では、Citrix ノードコントローラーネットワークは 192.168.1.0/24 として構成されています。したがって、IP トンネルを作成するコマンドは、add iptunnel dsr 192.168.1.254 255.255.255.0 *として提供されます。CNC 構成に従って値を指定する必要があります。

  3. Citrix ADC CPX を名前空間dsrに展開します。

    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. 以下のコマンドを使用して guestbook アプリケーションをデプロイします。

    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 ADCとTier-2 ADC間のネットワーク接続の確立

このセクションの手順を実行して、Tier-1 ADC と Tier-2 ADC 間のネットワーク接続を確立します。

  1. 次のコマンドを使用して、YAML をダウンロードし、Citrix Node Controller をデプロイします。

    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 引数の値を指定します。詳しくは、「 Citrix ノードコントローラー」を参照してください。

  3. YAML ファイルを保存し、Citrix ノードコントローラーをデプロイします。

       kubectl create -f citrix-k8s-node-controller.yaml -n dsr
    

Tier-1 ADC用のCitrix ingress controller を展開し、Citrix ADC CPXをサービスとして公開する

Citrix ingress controller をスタンドアロンポッドとして展開し、Tier-2 Citrix ADC CPX 用のイングレスリソースを作成するには、次の手順を実行します。

  1. 次のコマンドを使用して、Citrix Ingress Controller YAML ファイルをダウンロードします。

        wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/example/dsr/KubernetesConfig/citrix-k8s-ingress-controller.yaml
    
  2. YAML ファイルを編集し、Citrix Ingress Controller 次の値を更新します。

    • NS_IP
    • NS_USER
    • NS_PASSWORD

    詳しくは、「 YAML を使用した Citrix ingress controller デプロイ」を参照してください。

  3. YAML ファイルを保存し、Citrix Ingress Controller をデプロイします。

       kubectl create -f citrix-k8s-ingress-controller.yaml -n dsr
    
  4. ティア2 Citrix ADC CPX用のイングレスリソースを作成して、ティア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アドレスを使用して、ブラウザからアプリケーションにアクセスします。ゲストブックページが読み込まれます。

出力例を以下に示します。

ApplicationOutput

トラブルシューティング

アプリケーションをテストすると、必要な設定がすべて作成されても、どのページにもデータが入力されないことがあります。これは、 ホスト上のrp_filter<!--NeedCopy--> ルールが原因です。このような問題が発生した場合は、すべてのホストで次のコマンドを使用してルールを無効にします。

    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
ダイレクトサーバー返却の導入