Citrix ADC ingress controller

Amazon ELB および Citrix イングレスコントローラーを使用して、EKS 環境で Citrix ADC VPX をアクティブ/アクティブ高可用性でデプロイする

このトピックでは、AWS Elastic Container Service(EKS)プラットフォームの複数のアベイラビリティーゾーンに、Citrix ADC VPX をアクティブ/アクティブ高可用性モードでデプロイするソリューションについて説明します。このソリューションでは、AWS Elastic 負荷分散 (ELB) と Citrix ADC VPX を組み合わせて、EKS クラスターにデプロイされたマイクロサービスへの Ingress トラフィックの負荷を分散します。AWS ELB はレイヤー 4 トラフィックを処理し、Citrix ADC VPX は高度な負荷分散、キャッシュ、コンテンツベースのルーティングなどの高度なレイヤー 7 機能を提供します。

ソリューション概要

EKS クラスターの基本アーキテクチャには、次の図に示すように 3 つのアベイラビリティーゾーンにデプロイされた 3 つのパブリックサブネットと 3 つのプライベートサブネットが含まれます。

EKS

このソリューションでは、EKS クラスターのアーキテクチャは次の図のようになります。

ソリューションアーキテクチャ

AWS クラウドでは、AWS Elastic Load Balancing がレイヤー 4 TCP 接続を処理し、フローハッシュルーティングアルゴリズムを使用してトラフィックの負荷を分散します。ELB は、ネットワークロードバランサーまたはクラシックロードバランサーのいずれかになります。

AWS ELB は、リスナーの定義に従って着信接続をリッスンします。各リスナーは、使用可能なCitrix ADC VPXインスタンスのいずれかに新しい接続を転送します。Citrix ADC VPX インスタンスは、EKS ポッドへのトラフィックを負荷分散します。また、Citrix ADC VPXが提供する書き換えポリシー、レスポンダーポリシー、SSLオフロードなど、他のレイヤー7機能も実行します。

Citrix ingress controller は、Citrix ADC VPX インスタンスごとに EKS クラスターにデプロイされます。Citrix Ingressコントローラーは同じIngressクラスで構成されます。また、それぞれのCitrix ADC VPXインスタンス上のEKSクラスター内のIngressオブジェクトを構成します。

AWS Elastic Load Balancing (ELB) には、IP アドレスが動的に割り当てられる DNS 名があります。DNS 名を Route53 のドメインの Alias A レコードとして追加して、EKS クラスターでホストされているアプリケーションにアクセスできます。

導入プロセス

ソリューションを展開するには、次の手順を実行します。

  1. Citrix ADC VPX インスタンスを展開します

  2. Citrix ingress controller を展開します

  3. Amazon エラスティック負荷分散をセットアップします[ネットワークロードバランサーまたはクラシックロードバランサーのいずれかを設定できます](#set-up-classic-load-balancer)

  4. ソリューションを検証します

Citrix ADC VPX インスタンスの展開

Citrix ADC VPX は、 CloudFormation テンプレートとして利用できます。CloudFormation テンプレートは、単一のENIを持つCitrix ADC VPX インスタンスを特定のサブネットにデプロイします。また、Citrix ADC VPX インスタンスのNSIP、 [VIP](https://docs.citrix.com/en-us/netscaler/12/networking/ip-addressing/configuring-netscaler-owned-ip-addresses/configuring-and-managing-virtual-ip-addresses-vips.html)、およびSNIPも構成します

このソリューションでは、Citrix ADC VPX インスタンスを2つ展開する必要があります。同じCitrix ADC VPXと異なるパブリックサブネットを指定して、Citrix ADC VPXインスタンスを2つのアベイラビリティーゾーンに展開します。

Citrix ADC VPX インスタンスをデプロイした後、次のスクリーンショットに示すように CloudFormation テンプレートの出力を確認して、デプロイを検証できます。出力には、Citrix VPXインスタンスに構成されたさまざまなIPアドレス(VIP、SNIP、NSIP)が表示される必要があります。

CloudFormation テンプレートの出力

注:

CloudFormation テンプレートは、Citrix ADC VPX EC2 インスタンスのプライマリ IP アドレスをVIP、セカンダリ IP アドレスを管理 IP アドレスとして Citrix ADC VPX インスタンスをデプロイします。

Citrix ADC VPX インスタンスが正常に展開されたら、セキュリティグループを編集して、EKS ノードグループセキュリティグループからのトラフィックを許可する必要があります。また、VPXインスタンスからのトラフィックを許可するように、EKSノードグループのセキュリティグループを変更する必要があります。

Citrix ingress controller 展開

Citrix ADC VPXインスタンスごとにCitrixイングレスコントローラーの個別のインスタンスを展開します。 展開手順に従って 、Citrix ingress controller を展開します。

Citrix ADC VPXインスタンスが起動したら、Citrix ADC VPXインスタンスにシステムユーザーアカウントを設定する必要があります。システムユーザーアカウントは、Citrix ingress controller がCitrix ADC VPXインスタンスにログインするために使用されます。システムユーザーアカウントの設定手順については、 Citrix ADC での CIC のシステムユーザーアカウントの作成を参照してください

  1. Citrix ingress controller デプロイメント YAML(Citrix-ingress-controller.yaml)を編集します。

    Private NSIPをそれぞれのCitrix ADC VPXインスタンスのNS_IPアドレスに置き換えます。また、Citrix ADC VPXインスタンスで作成したシステムユーザーアカウントのユーザー名とパスワードも入力します。 citrix-ingress-controller.yaml ファイルを編集したら、次のコマンドを使用して、更新した YAML ファイルをデプロイします。

    kubectl apply -f citrix-ingress-controller .yaml
    
  2. 2 番目の Citrix ingress controller インスタンスでステップ 1 を実行します。

  3. 両方の Pod が稼働中であることを確認します。また、ログを使用して、Citrix ingress controller がそれぞれのCitrix ADC VPXインスタンスに接続できるかどうかを確認します。

    kubectl logs <cic_pod_name>
    

Citrix ingress controller ポッドが EKS クラスターにデプロイされ、実行された後。 citrixイングレス・クラスで構成されたKubernetes Ingressリソースは、両方のCitrix ADC VPXインスタンスで自動的に構成されます。

エラスティック負荷分散の設定

要件に応じて、次のロードバランサーを構成できます。

  • ネットワークロードバランサー
  • クラシックロードバランサー

ネットワークロードバランサーをセットアップする

ネットワークロードバランサー (NLB) は、TCP 接続の負荷分散を処理するのに適したオプションです。このソリューションでは、NLBを使用して着信トラフィックを受け入れ、Citrix ADC VPXインスタンスの1つにルーティングします。NLB 負荷分散では、プロトコル、送信元 IP アドレス、送信元ポート、宛先 IP アドレス、宛先ポート、および TCP シーケンス番号に基づいたフローハッシュアルゴリズムが使用されます。

NLB を設定するには:

  1. EC2 用 AWS マネジメントコンソールにログオンします

  2. 左側のナビゲーションバーで、[ Target Group] をクリックします。2 つの異なるターゲットグループを作成します。1 つのターゲットグループ (Target-Group-80) はポート 80 でトラフィックをルーティングし、もう 1 つのターゲットグループ (Target-Group-443) は 443 でトラフィックをルーティングします。

    対象グループ

  3. *Target-Group-80 という名前のターゲットグループを作成します。以下の手順に従います。

    1. [ ターゲットグループ名 ] フィールドに、ターゲットグループ名を Target-Group-80と入力します。
    2. [ ターゲットタイプ ] フィールドで [インスタンス] を選択します。
    3. [ プロトコル ] リストから [ TCP] を選択します。
    4. [ Port ] フィールドに 80と入力します。
    5. [ VPC ] リストから、EKS クラスターをデプロイした VPC を選択します。
    6. [ ヘルスチェックの設定] セクションで、ヘルスチェックに TCP を使用します。
    7. オプションです。[ Advance Health Check] 設定を変更して 、ヘルスチェックを設定できます。

      ターゲットグループ 80

  4. *Target-Group-443 という名前のターゲットグループを作成します。以下の手順に従います。

    1. [ ターゲットグループ名 ] フィールドに、ターゲットグループ名を Target-Group-443と入力します。
    2. [ ターゲットタイプ ] フィールドで [インスタンス] を選択します。
    3. [ プロトコル ] リストから [ TCP] を選択します。
    4. [ ポート ] フィールドに 443と入力します。
    5. [ VPC ] リストから、EKS クラスターをデプロイした VPC を選択します。
    6. [ ヘルスチェックの設定] セクションで、ヘルスチェックに TCP を使用します。
    7. オプションです。[ Advance Health Check] 設定を変更して 、ヘルスチェックを設定できます。

      ターゲットグループ 80

  5. ターゲットグループを作成したら、ターゲットインスタンスを登録する必要があります。
    1. リストページで作成したターゲットグループを選択し、[ Target ] タブをクリックし、[ edit] を選択します。
    2. インスタンス ]タブで、2つのCitrix ADC VPXインスタンスを選択し、[ 登録済みに追加]をクリックします。
  6. 作成した他のターゲットグループに対して、 ステップ 5 を繰り返します。

  7. ネットワークロードバランサーを作成します。

    1. 左側のナビゲーションバーで [ ロードバランサー] を選択し、[ ロードバランサーの作成] をクリックします。
    2. [ロードバランサタイプの選択] ウィンドウで、[ネットワークロードバランサ] パネルの [ 作成] をクリックします。

      ネットワークロードバランサーの作成

  8. [ロードバランサーの設定 ] ページで、次の操作を行います。

    1. [ Name ] フィールドに、ロードバランサーの名前を入力します。
    2. [スキーム] フィールドで、[ インターネット接続] を選択します
    3. [Listeners] セクションで、[ Add listener ] をクリックし、次の図に示すように、TCPをロードバランサプロトコルとして、80および443をロードバランサポートとしての 2 つのエントリをそれぞれ追加します。

      リスナーを追加

    4. [アベイラビリティーゾーン]セクションで、Citrix ADC VPX インスタンスがデプロイされている VPC、アベイラビリティーゾーン、サブネットを選択します。

      アベイラビリティーゾーン

  9. [ルーティングの設定] ページで、次の操作を行います。

    1. [ ターゲットグループ ] リストで、[ 既存のターゲットグループ] をクリックします。
    2. [ 名前 ] フィールドに、 Target-Group-80と入力します。
    3. [ ターゲットタイプ ] フィールドで [ インスタンス] を選択します。
    4. [ プロトコル ] リストで [ TCP] を選択します。
    5. [ Port ] フィールドに 80と入力します。
    6. 次の図に示すように、[ ヘルスチェック ] セクションの [ プロトコル ] リストから [ TCP ] を選択します。

      ルーティングを設定する

  10. [ Review ] ページで、設定を確認し、[ Create] をクリックします。

    確認

  11. ネットワークロードバランサーが作成されたら、作成したロードバランサーをリストページ用に選択します。[ リスナー ] タブで [ TCP: 444 ] を選択し、[ 編集] をクリックします。

    ![リスナー] タブ](/en-us/citrix-k8s-ingress-controller/media/listerners-tab.png)

  12. [ リスナー ] ページで、既定のアクションを削除し、[ 転送先 ] リストの [ Target-Group-443 ] を選択します。

    転送先

  13. [Update] をクリックします。

クラシックロードバランサーをセットアップする

Amazon ネットワークロードバランサーの代わりに、Classic Load Balancer (CLB) を Tier 1 TCP ロードバランサーとしてセットアップできます。

  1. EC2 用 AWS マネジメントコンソールにログオンします

  2. 左側のナビゲーションバーで [ ロードバランサー] を選択し、[ ロードバランサーの作成] をクリックします。

    Classic ロードバランサーの設定

  3. [ロードバランサータイプの選択] ウィンドウで、[Classic Load balancer] パネルの [ 作成 ] をクリックします。

    クラシックロードバランサー作成

  4. [ロードバランサーの定義 ] ページで、次の操作を行います。

    1. [ ロードバランサー名 ] フィールドに、ロードバランサーの名前を入力します。

    2. LB内部を作成 ]リストで、Citrix ADC VPXを選択します。

    3. [ Listener Configuration ] セクションで、[ Add ] をクリックし、TCPをロードバランサプロトコルとして、80および443をロードバランサポートとして 2 つのエントリを追加します。また、次の図に示すように、TCPをインスタンスプロトコルとして、80および443をそれぞれインスタンスポートとして選択します 。

      クラシック定義ロードバランサー

    4. [Select Subnets ] セクションで、Classic Load Balancer がトラフィックをルーティングするための 2 つの異なるアベイラビリティーゾーンにある 2 つのパブリックサブネットを選択しますこれらのサブネットは、Citrix ADC VPX インスタンスを展開した場所と同じです。

      クラシックセレクトサブネット

    5. [ Assign Security Groups ] ページで、ELB インスタンスのセキュリティグループを選択します。セキュリティグループは、Citrix ADC VPX ENI にアタッチされているセキュリティグループと同じにすることも、新しいセキュリティグループにすることもできます。 新しいセキュリティグループを使用している場合は、ELBセキュリティグループからCitrix ADC VPXセキュリティグループへのトラフィックを許可し、その逆も許可してください。

      クラシック割り当てセキュリティグループ

    6. [ ヘルスチェックの設定 ] ページで、ヘルスチェックの設定を選択します。デフォルトでは、ヘルスチェックはポート80TCP に設定されています。オプションで 、 ポート443でもヘルスチェックを実行できます。

      クラシックヘルスチェック

    7. [ EC2 インスタンスの追加 ] ページで、以前にデプロイされた Citrix ADC VPX インスタンスを2つ選択します。

      ![Classic ADD EC2 Instances](/en-us/citrix-k8s-ingress-controller/media/classic-add-ec2.png)
      
    8. [Add Tags] ページで、必要に応じてタグを追加します。

    9. [Review] ページで、設定を確認します。

    10. [Create] をクリックします。

ソリューションを検証する

Citrix ADC VPX、AWS ELB、Citrix ingress controller を正常にデプロイしたら、サンプルサービスを使用してソリューションを検証できます。

以下の手順に従います。

  1. app.yamlを使用してサンプルサービスとイングレスをデプロイします。

    kubectl apply -f app.yaml
    
  2. Citrix ADC VPXインスタンスにログオンし、両方のCitrix ADC VPXインスタンスでコンテンツスイッチング仮想サーバーが正常に構成されているかどうかを確認します。以下を実行します:

    1. Citrix ADC VPX インスタンスにログオンします。以下の手順に従います。
      1. PuTTY などのSSHクライアントを使用して、Citrix ADC VPXインスタンスへのSSH接続を開きます。

      2. 管理者の認証情報を使用してインスタンスにログオンします。

    2. 次のコマンドを使用して、Content Switching (cs) vserver がインスタンスに設定されているかどうかを確認します。

          sh cs vserver
      

      出力:

         1) k8s-10.0.139.87:80:http (10.0.139.87:80) - HTTP Type: CONTENT
                  State: UP
                  Last state change was at Fri Apr 12 14:24:13 2019
                  Time since last state change: 3 days, 03:09:18.920
                  Client Idle Timeout: 180 sec
                  Down state flush: ENABLED
                  Disable Primary Vserver On Down : DISABLED
                  Comment: uid=NNJRYQ54VM2KWCXOERK6HRJHR4VEQYRI7U3W4BNFQLTIAENMTHWA====
                  Appflow logging: ENABLED
                  Port Rewrite : DISABLED
                  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
                  Listen Policy: NONE
                  IcmpResponse: PASSIVE
                  RHIstate:  PASSIVE
                  Traffic Domain: 0 
      
    3. ELB インスタンスの DNS 名を使用してアプリケーションtest.example.comにアクセスします。

          # curl -H 'Host: test.example.com' <DNS name of the ELB>
      

      例:

          % curl -H 'Host: test.example.com' http://VPX-HA-829787521.us-west-2.elb.amazonaws.com
      
    4. デプロイメントを削除するには、以下のコマンドを使用します。

          kubectl delete -f app.yaml
      

トラブルシューティング

問題 [解像度]
CloudFormation スタックの失敗 IAM ユーザーまたはロールに EC2 インスタンスと Lambda 設定を作成するための十分な権限があることを確認します。
  リソースクォータを超えていないことを確認します。
Citrix ingress controller がCitrix ADC VPXインスタンスと通信できません。 citrix-ingress-controller.yaml ファイル内のユーザー名とパスワードが正しいことを確認します。
  Citrix ADC VPXセキュリティグループが、 ポート80上およびEKSノードグループセキュリティグループからの443トラフィックを許可していることを確認します。
Citrix ADC VPXインスタンスではサービスがダウンしています。 Citrix ADC VPX トラフィックがEKSクラスターに到達できることを確認します。Citrix ADC VPXセキュリティグループからのトラフィックを許可するように、EKSノードグループのセキュリティグループを変更します。
トラフィックがELBからCitrix ADC VPXインスタンスにルーティングされない。 Citrix ADC VPX セキュリティグループが、ELBセキュリティグループからのトラフィックを許可していることを確認します。
Amazon ELB および Citrix イングレスコントローラーを使用して、EKS 環境で Citrix ADC VPX をアクティブ/アクティブ高可用性でデプロイする