Amazon ELBとNetScaler Ingress Controllerを使用して、EKS環境でNetScaler VPXをアクティブ-アクティブ高可用性で展開する

最終公開日 : Oct 02, 2026
このトピックでは、AWS Elastic Container Service (EKS) プラットフォームの複数のアベイラビリティゾーンにNetScaler VPXをアクティブ-アクティブ高可用性モードで展開するソリューションについて説明します。このソリューションは、AWS Elastic Load Balancing (ELB) とNetScaler VPXを組み合わせて、EKSクラスターに展開されたマイクロサービスへのイングレストラフィックをロードバランシングします。AWS ELBはレイヤー4トラフィックを処理し、NetScaler VPXは高度なロードバランシング、キャッシング、コンテンツベースルーティングなどの高度なレイヤー7機能を提供します。

ソリューションの概要

EKSクラスターの基本的なアーキテクチャには、次の図に示すように、3つのアベイラビリティゾーンに展開された3つのパブリックサブネットと3つのプライベートサブネットが含まれます。
EKSアーキテクチャ(/en-us/netscaler-k8s-ingress-controller/media/eks-diagram.png)
このソリューションでは、EKSクラスターのアーキテクチャは次の図に示すようになります。
ソリューションアーキテクチャ(/en-us/netscaler-k8s-ingress-controller/media/eks-vpx-architecture.png)
AWSクラウドでは、AWS Elastic Load Balancing がレイヤー4 TCP接続を処理し、フローハッシュルーティングアルゴリズムを使用してトラフィックをロードバランシングします。ELBは、ネットワークロードバランサーまたはクラシックロードバランサーのいずれかです。
AWS ELBは、リスナーによって定義された受信接続をリッスンします。各リスナーは、新しい接続を利用可能なNetScaler VPXインスタンスのいずれかに転送します。NetScaler VPXインスタンスは、EKSポッドへのトラフィックをロードバランシングします。また、NetScaler VPXによって提供されるリライトポリシー、レスポンダーポリシー、SSLオフロードなどの他のレイヤー7機能も実行します。
各NetScaler VPXインスタンスに対して、NetScaler Ingress ControllerがEKSクラスターに展開されます。NetScaler Ingress Controllerは同じイングレスクラスで構成されます。そして、EKSクラスター内のイングレスオブジェクトをそれぞれのNetScaler VPXインスタンスに構成します。
AWS Elastic Load Balancing (ELB) には、IPアドレスが動的に割り当てられるDNS名があります。このDNS名は、EKSクラスターでホストされているアプリケーションにアクセスするために、Route53 でドメインのエイリアスAレコードとして追加できます。

展開プロセス

ソリューションを展開するには、以下を実行します。

NetScaler VPX インスタンスを展開する

NetScaler VPX は CloudFormation Template として利用できます。CloudFormation テンプレートは、指定されたサブネットに単一の ENI を持つ NetScaler VPX のインスタンスを展開します。また、NetScaler VPX インスタンスの NSIP、VIP、および SNIP も構成します。
このソリューションでは、NetScaler VPX のインスタンスを 2 つ展開する必要があります。同じ NetScaler VPX と異なるパブリックサブネットを指定して、2 つのアベイラビリティゾーンに NetScaler VPX インスタンスを展開します。
NetScaler VPX インスタンスを展開した後、次のスクリーンショットに示すように CloudFormation テンプレートの出力を確認することで、展開を検証できます。出力には、NetScaler VPX インスタンス用に構成されたさまざまな IP アドレス (VIP、SNIP、NSIP) が表示されている必要があります。
CloudFormation テンプレートの出力
注記:
CloudFormation テンプレートは、NetScaler VPX EC2 インスタンスのプライマリ IP アドレスを VIP として、セカンダリ IP アドレスを管理 IP アドレスとして NetScaler VPX インスタンスを展開します。
NetScaler VPX インスタンスが正常に展開されたら、セキュリティグループを編集して、EKS ノードグループのセキュリティグループからのトラフィックを許可する必要があります。また、VPX インスタンスからのトラフィックを許可するように EKS ノードグループのセキュリティグループを変更する必要があります。

NetScaler Ingress Controller を展開する

各 NetScaler VPX インスタンスに NetScaler Ingress Controller の個別のインスタンスを展開します。NetScaler Ingress Controller を展開するには、展開手順 に従ってください。
NetScaler VPX インスタンスが起動したら、NetScaler VPX インスタンスにシステムユーザーアカウントを設定する必要があります。システムユーザーアカウントは、NetScaler Ingress Controller が NetScaler VPX インスタンスにログインするために使用されます。システムユーザーアカウントの設定手順については、「NetScaler で CIC のシステムユーザーアカウントを作成する」を参照してください。
  1. NetScaler Ingress Controller の展開 YAML (citrix-ingress-controller.yaml) を編集します。
    NS_IP を、対応する NetScaler VPX インスタンスの Private NSIP アドレスに置き換えます。また、NetScaler VPX インスタンスで作成したシステムユーザーアカウントのユーザー名とパスワードを指定します。citrix-ingress-controller.yaml ファイルを編集したら、次のコマンドを使用して更新された YAML ファイルを展開します。
    kubectl apply -f citrix-ingress-controller .yaml
  2. 2番目のNetScaler Ingress Controllerインスタンスでステップ1を実行します。
  3. 両方のポッドが起動して実行されていることを確認します。また、ログを使用してNetScaler Ingress ControllerがそれぞれのNetScaler VPXインスタンスに接続できることを確認します。
    kubectl logs <cic_pod_name>
NetScaler Ingress ControllerポッドがEKSクラスターにデプロイされ、実行された後、citrix イングレスクラスで構成されたKubernetes Ingressリソースは、両方のNetScaler VPXインスタンスに自動的に構成されます。

エラスティックロードバランシングのセットアップ

要件に応じて、次のいずれかのロードバランサーを構成できます。
  • ネットワークロードバランサー
  • クラシックロードバランサー

ネットワークロードバランサーのセットアップ

ネットワークロードバランサー (NLB) は、TCP接続のロードバランシングを処理するのに適したオプションです。このソリューションでは、NLBは受信トラフィックを受け入れ、いずれかのNetScaler VPXインスタンスにルーティングするために使用されます。NLBは、プロトコル、送信元IPアドレス、送信元ポート、宛先IPアドレス、宛先ポート、およびTCPシーケンス番号に基づいてフローハッシュアルゴリズムを使用してロードバランシングを行います。
NLBをセットアップするには:
  1. AWS Management Console for EC2 にログオンします。
  2. 左側のナビゲーションバーで、ターゲットグループをクリックします。2つの異なるターゲットグループを作成します。1つはポート80でトラフィックをルーティングするためのターゲットグループ (Target-Group-80)、もう1つはポート443でトラフィックをルーティングするためのターゲットグループ (Target-Group-443) です。
    ターゲットグループ
  3. *Target-Group-80 という名前のターゲットグループを作成します。以下を実行します。
    1. ターゲットグループ名フィールドに、ターゲットグループ名として Target-Group-80 を入力します。
    2. 「ターゲットタイプ」フィールドで、「インスタンス」を選択します。
    3. 「プロトコル」リストから「TCP」を選択します。
    4. 「ポート」フィールドに「80」と入力します。
    5. 「VCP」リストから、EKSクラスターをデプロイしたVPCを選択します。
    6. 「ヘルスチェック設定」セクションで、ヘルスチェックにTCPを使用します。
    7. オプション。「詳細ヘルスチェック設定」を変更して、ヘルスチェックを設定できます。
      ターゲットグループ 80
  4. *Target-Group-443 という名前のターゲットグループを作成します。以下を実行します。
    1. 「ターゲットグループ名」フィールドに、ターゲットグループ名として***Target-Group-443***と入力します。
    2. 「ターゲットタイプ」フィールドで、「インスタンス」を選択します。
    3. 「プロトコル」リストから「TCP」を選択します。
    4. 「ポート」フィールドに「443」と入力します。
    5. 「VCP」リストから、EKSクラスターをデプロイしたVPCを選択します。
    6. 「ヘルスチェック設定」セクションで、ヘルスチェックにTCPを使用します。
    7. オプション。「詳細ヘルスチェック設定」を変更して、ヘルスチェックを設定できます。
      ターゲットグループ 80
  5. ターゲットグループを作成したら、ターゲットインスタンスを登録する必要があります。
    1. リストページで作成したターゲットグループを選択し、ターゲットタブをクリックして、編集を選択します。
    2. インスタンスタブで、2つのNetScaler VPXインスタンスを選択し、登録済みに追加をクリックします。
  6. 作成した他のターゲットグループについても、手順5を繰り返します。
  7. ネットワークロードバランサーを作成します。
    1. 左側のナビゲーションバーで、ロードバランサーを選択し、ロードバランサーの作成をクリックします。
    2. ロードバランサータイプの選択ウィンドウで、ネットワークロードバランサーパネルの作成をクリックします。
      ネットワークロードバランサーの作成
  8. ロードバランサーの設定ページで、次の操作を行います。
    1. 名前フィールドに、ロードバランサーの名前を入力します。
    2. スキームフィールドで、インターネット向けを選択します。
    3. リスナーセクションで、リスナーの追加をクリックし、ロードバランサープロトコルとしてTCP、ロードバランサーポートとしてそれぞれ80と443を持つ2つのエントリを、次の図に示すように追加します。
      リスナーの追加
    4. アベイラビリティーゾーンセクションで、NetScaler VPXインスタンスが展開されているVPC、アベイラビリティーゾーン、およびサブネットを選択します。
      「アベイラビリティゾーン」(/en-us/netscaler-k8s-ingress-controller/media/availability-zones-section.png)
  9. 「ルーティングの設定」ページで、以下を実行します。
    1. 「ターゲットグループ」リストで、「既存のターゲットグループ」をクリックします。
    2. 「名前」フィールドに「Target-Group-80」と入力します。
    3. 「ターゲットタイプ」フィールドで、「インスタンス」を選択します。
    4. 「プロトコル」リストで、「TCP」を選択します。
    5. 「ポート」フィールドに「80」と入力します。
    6. 次の図に示すように、「ヘルスチェック」セクションの「プロトコル」リストから「TCP」を選択します。
      「ルーティングの設定」(/en-us/netscaler-k8s-ingress-controller/media/configure-routing.png)
  10. 「確認」ページで、設定を確認し、「作成」をクリックします。
    「確認」(/en-us/netscaler-k8s-ingress-controller/media/review-nlb-settings.png)
  11. ネットワークロードバランサーが作成されたら、リストページ用に作成したロードバランサーを選択します。「リスナー」タブを選択し、「TCP : 444」を選択してから「編集」をクリックします。
    「リスナー」タブ(/en-us/netscaler-k8s-ingress-controller/media/listerners-tab.png)
  12. 「リスナー」ページで、デフォルトのアクションを削除し、「転送先」リストで「Target-Group-443」を選択します。
    「転送先」(/en-us/netscaler-k8s-ingress-controller/media/select-forward-to.png)
  13. 「更新」をクリックします。

クラシックロードバランサーのセットアップ

Amazon Network Load Balancer の代替として、Tier 1 TCP ロードバランサーとして Classic Load Balancer (CLB) をセットアップできます。
  1. AWS Management Console for EC2にログオンします。
  2. 左側のナビゲーションバーで、ロードバランサーを選択し、次に「ロードバランサーの作成」をクリックします。
    クラシックロードバランサーのセットアップ
  3. 「ロードバランサータイプの選択」ウィンドウで、Classic Load Balancer パネルの「作成」をクリックします。
    クラシックロードバランサーの作成
  4. 「ロードバランサーの定義」ページで、次の操作を行います。
    1. 「ロードバランサー名」フィールドに、ロードバランサーの名前を入力します。
    2. 「LB の作成場所」リストで、NetScaler VPX を選択します。
    3. 「リスナー設定」セクションで、「追加」をクリックし、ロードバランサープロトコルとしてTCP、ロードバランサーポートとしてそれぞれ80と443の2つのエントリを追加します。また、インスタンスプロトコルとしてTCP、インスタンスポートとしてそれぞれ80と443を選択します。次の図に示すとおりです。
      クラシックロードバランサーの定義
    4. 「サブネットの選択」セクションで、Classic Load Balancer がトラフィックをルーティングするために、2つの異なるアベイラビリティーゾーンにある2つのパブリックサブネットを選択します。これらのサブネットは、NetScaler VPX インスタンスをデプロイした場所と同じです。
      クラシックサブネットの選択
    5. セキュリティグループの割り当てページで、ELBインスタンスのセキュリティグループを選択します。セキュリティグループは、NetScaler VPX ENIにアタッチされているセキュリティグループと同じでも、新しいセキュリティグループでも構いません。 新しいセキュリティグループを使用する場合は、ELBセキュリティグループからNetScaler VPXセキュリティグループへのトラフィック、およびその逆のトラフィックを許可していることを確認してください。
      クラシックセキュリティグループの割り当て
    6. ヘルスチェックの設定ページで、ヘルスチェックの設定を選択します。デフォルトでは、ヘルスチェックはポート80でTCPとして設定されていますが、オプションでポート443でもヘルスチェックを実行できます。
      クラシックヘルスチェック
    7. EC2インスタンスの追加ページで、以前にデプロイした2つのNetScaler VPXインスタンスを選択します。
      ![Classic ADD EC2 Instances](https://docs.netscaler.com/content/dam/netscaler/us/en/netscaler-k8s-ingress-controller/media/classic-add-ec2.png)
    8. タグの追加ページで、要件に応じてタグを追加します。
    9. 確認ページで、設定を確認します。
    10. 作成をクリックします。

ソリューションの検証

NetScaler VPX、AWS ELB、およびNetScaler Ingress Controllerを正常にデプロイした後、サンプルサービスを使用してソリューションを検証できます。
次の操作を実行します。
  1. app.yamlを使用してサンプルサービスとイングレスをデプロイします。
    kubectl apply -f app.yaml
  2. NetScaler VPXインスタンスにログオンし、両方のNetScaler VPXインスタンスでコンテンツスイッチングvserverが正常に構成されていることを確認します。次の操作を実行します。
    1. NetScaler VPXインスタンスにログオンします。次の操作を実行します。
      1. PuTTyなどのSSHクライアントを使用して、NetScaler VPXインスタンスへのSSH接続を開きます。
      2. 管理者資格情報を使用してインスタンスにログオンします。
    2. 次のコマンドを使用して、コンテンツスイッチング (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 設定を作成するための十分な権限があることを確認します。
リソースクォータを超過していないことを確認します。
NetScaler Ingress Controller が NetScaler VPX インスタンスと通信できません。 citrix-ingress-controller.yaml ファイルのユーザー名とパスワードが正しいことを確認します。
NetScaler VPX セキュリティグループが、EKS ノードグループセキュリティグループからのポート 80 および 443 でのトラフィックを許可していることを確認します。
NetScaler VPXインスタンスのサービスがDOWNしています。 NetScaler VPXのトラフィックがEKSクラスターに到達できることを確認してください。EKSノードグループのセキュリティグループを変更し、NetScaler VPXセキュリティグループからのトラフィックを許可してください。
ELBからNetScaler VPXインスタンスへのトラフィックがルーティングされていません。 NetScaler VPXのセキュリティグループがELBセキュリティグループからのトラフィックを許可していることを確認してください。