Amazon EKSおよびMicrosoft AKSクラスターを使用したマルチクラウドおよびGSLBソリューション

最終公開日 : Oct 02, 2026
異なるクラウドプロバイダーが提供する複数のクラウドに、同じアプリケーションの複数のインスタンスを展開できます。このマルチクラウド戦略は、回復性、高可用性、および近接性を確保するのに役立ちます。マルチクラウドのアプローチにより、ベンダーロックインやクラウド障害などのリスクを軽減することで、各クラウドプロバイダーの最高の利点を活用することもできます。
NetScalerは、NetScaler Ingress Controllerの助けを借りて、マルチクラウドロードバランシングを実行できます。NetScalerは、異なるクラウドプロバイダーサイトでホストされているクラスターにトラフィックを誘導できます。このソリューションは、Amazon EKS (Elastic Kubernetes Service) およびMicrosoft AKS (Azure Kubernetes Service) クラスターで実行されているワークロード間でトラフィックをインテリジェントに分散することで、ロードバランシングを実行します。
Amazon EKSとMicrosoft AKSを使用して、マルチクラウドおよびGSLBソリューションを展開できます。

展開トポロジ

次の図は、Amazon EKSおよびMicrosoft AKSが提供するKubernetesサービス向けのマルチクラウドイングレスおよびロードバランシングソリューションの展開トポロジを示しています。
展開トポロジ(/en-us/netscaler-k8s-ingress-controller/media/multi-cloud-ingress-architecture.png)

前提条件

  • AWSとAzureに精通している必要があります。
  • NetScalerとNetScalerネットワーキングに精通している必要があります。
  • 同じアプリケーションのインスタンスは、Amazon EKSおよびMicrosoft AKS上のKubernetesクラスターに展開されている必要があります。
マルチクラウドおよびGSLBソリューションを展開するには、次のタスクを実行する必要があります。
  1. AWSにNetScaler VPXを展開します。
  2. AzureにNetScaler VPXを展開します。
  3. AWSおよびAKSに展開されたNetScaler VPXでADNSサービスを構成します。
  4. AWSおよびAKSにデプロイされたNetScaler VPXでGSLBサービスを設定します。
  5. AWSおよびAzure KubernetesクラスターにGTPおよびGSE CRDを適用します。
  6. GSLBコントローラーをデプロイします。

AWSへのNetScaler VPXのデプロイ

NetScaler VPXインスタンスがEKSクラスターと同じ仮想プライベートクラウド (VPC) にインストールされていることを確認する必要があります。これにより、NetScaler VPXはEKSワークロードと通信できます。既存のEKSサブネットを使用するか、サブネットを作成してNetScaler VPXインスタンスをインストールできます。
また、NetScaler VPXインスタンスを別のVPCにインストールすることもできます。その場合、EKS用のVPCがVPCピアリングを使用して通信できることを確認する必要があります。VPCピアリングの詳細については、VPCピアリングのドキュメントを参照してください。
高可用性 (HA) のために、NetScaler VPXの2つのインスタンスをHAモードでインストールできます。
  1. AWSにNetScaler VPXをインストールします。AWSへのNetScaler VPXのインストールについては、AWSへのNetScaler VPXインスタンスのデプロイを参照してください。
    NetScaler VPXは、GSLBサービス同期およびADNSサービスを実行するために、NSIP以外のセカンダリパブリックIPアドレスを必要とします。
  2. AWSコンソールを開き、EC2 > ネットワークインターフェース > VPXプライマリENI ID > IPアドレスの管理を選択します。新しいIPアドレスの割り当てをクリックします。
    IPアドレスの管理
    セカンダリパブリックIPアドレスがVPX ENIに割り当てられたら、それにElastic IPアドレスを関連付けます。
  3. EC2 > ネットワークインターフェース > VPX ENI ID - アクションを選択し、IPアドレスの関連付けをクリックします。セカンダリIPアドレスのElastic IPアドレスを選択し、関連付けをクリックします。
    Elastic IPアドレスの関連付け
  4. NetScaler VPXインスタンスにログインし、セカンダリIPアドレスをSNIPとして追加し、次のコマンドを使用して管理アクセスを有効にします。
    add ip 192.168.211.73 255.255.224.0 -mgmtAccess ENABLED -type SNIP
    注記:
    • NetScaler VPXにSSHを使用してログインするには、セキュリティグループでSSHポートを有効にする必要があります。ルートテーブルには、デフォルトトラフィック用にインターネットゲートウェイが構成されている必要があり、NACLはSSHポートを許可する必要があります。
    • NetScaler VPXを高可用性 (HA) モードで実行している場合は、両方のNetScaler VPXインスタンスでこの構成を実行する必要があります。
  5. 次のコマンドを使用して、NetScaler VPXでコンテンツスイッチング (CS)、ロードバランシング (LB)、グローバルサーバーロードバランシング (GSLB)、およびSSL機能を有効にします。
    enable feature *feature*
    注記:
    GSLBを有効にするには、追加のライセンスが必要です。
  6. NetScaler VPXがDNSトラフィックを受信できるように、VPXセキュリティグループでUDPおよびTCPのポート53を有効にします。また、SSH用にTCPポート22を、GSLBメトリック交換用にTCPポート範囲3008~3011を有効にします。
    セキュリティグループにルールを追加する方法については、「セキュリティグループへのルールの追加」を参照してください。
  7. 次のコマンドを使用して、NetScaler VPXにネームサーバーを追加します。
    add nameserver *nameserver IP*

AzureでのNetScaler VPXの展開

AKSクラスターでスタンドアロンのNetScaler VPXインスタンスを実行することも、AKSクラスターで2つのNetScaler VPXインスタンスを高可用性モードで実行することもできます。
インストール中に、AKSクラスターがVPXインスタンスとの接続性を持っていることを確認してください。接続性を確保するために、AKSクラスターと同じ仮想ネットワーク (VNet) に、別のリソースグループでNetScaler VPXをインストールできます。
NetScaler VPXのインストール中に、AKSクラスターがインストールされているVNetを選択します。あるいは、VPXがAKSクラスターとは異なるVNetに展開されている場合は、VNetピアリングを使用してAKSとNetScaler VPX間の接続性を確保できます。
  1. AWSにNetScaler VPXをインストールします。AKSにNetScaler VPXをインストールする方法については、「Microsoft AzureにNetScaler VPXインスタンスを展開する」を参照してください。
    GSLB同期およびADNSサービス用に、パブリックIPを持つSNIPが必要です。SNIPがすでに存在する場合は、それにパブリックIPアドレスを関連付けます。
  2. 関連付けるには、ホーム > リソース グループ > VPX インスタンス > VPX NIC インスタンスを選択します。次の図に示すように、パブリック IP アドレスを関連付けます。保存をクリックして変更を保存します。
    スニップ
  3. Azure NetScaler VPX インスタンスにログインし、次のコマンドを使用して、管理アクセスを有効にしたセカンダリ IP を SNIP として追加します。
    add ip 10.240.0.11 255.255.0.0 -type SNIP -mgmtAccess ENABLED
    リソースが存在する場合は、次のコマンドを使用して、既存のリソースで管理アクセスを有効に設定できます。
    set ip 10.240.0.11 -mgmtAccess ENABLED
  4. 次のコマンドを使用して、NetScaler VPX で CS、LB、SSL、および GSLB 機能を有効にします。
    enable feature *feature*
    SSH を介して NetScaler VPX インスタンスにアクセスするには、NetScaler VPX プライマリ インターフェイスにアタッチされている Azure ネットワーク セキュリティ グループで、SSH ポートのインバウンド ポート ルールを有効にする必要があります。
  5. Azure ポータルのネットワーク セキュリティ グループで、次のポートのインバウンド ルールを有効にします。
    • TCP: GSLB メトリック交換用の 3008~3011
    • TCP: SSH 用の 22
    • TCP および UDP: DNS 用の 53
  6. 次のコマンドを使用して、NetScaler VPX にネームサーバーを追加します。
    add nameserver *nameserver IP*

AWS および Azure に展開された NetScaler VPX で ADNS サービスを構成する

NetScaler VPX の ADNS サービスは、ドメインの権威 DNS として機能します。ADNS サービスの詳細については、「権威 DNS サービス」を参照してください。
  1. AWS NetScaler VPX にログインし、次のコマンドを使用して、セカンダリ IP アドレスとポート 53 で ADNS サービスを構成します。
    add service Service-ADNS-1 192.168.211.73 ADNS 53
    次のコマンドを使用して構成を確認します。
    show service Service-ADNS-1
  2. Azure NetScaler VPXにログインし、以下のコマンドを使用してセカンダリIPアドレスとポート53でADNSサービスを設定します。
    add service Service-ADNS-1 10.240.0.8 ADNS 53
    以下のコマンドを使用して設定を確認します。
    show service Service-ADNS-1
  3. ドメイン用に2つのADNSサービスを作成した後、ドメインのNSレコードを更新して、ドメインレジストラ内のADNSサービスを指すようにします。
    例えば、ADNSサービスのパブリックIPアドレスを指す「A」レコード ns1.domain.com を作成します。ドメインのNSレコードはns1.domain.comを指す必要があります。

AWSおよびAzureにデプロイされたNetScaler VPXでGSLBサービスを設定する

AWSおよびAzureにデプロイされたNetScaler VPX上にGSLBサイトを作成する必要があります。
  1. AWS NetScaler VPXにログインし、以下のコマンドを使用してセカンダリIPアドレスにGSLBサイトを設定します。また、–publicIP 引数を使用してパブリックIPアドレスを指定します。例:
    add gslb site aws_site 192.168.197.18 -publicIP 3.139.156.175

    add gslb site azure_site 10.240.0.11 -publicIP 23.100.28.121
  2. Azure NetScaler VPXにログインし、GSLBサイトを設定します。例:
    add gslb site aws_site 192.168.197.18 -publicIP 3.139.156.175

    add gslb site azure_site 10.240.0.11 -publicIP 23.100.28.121
  3. 以下のコマンドを使用して、いずれかのサイトから同期を開始し、GSLB同期が成功したことを確認します。
    sync gslb config –debug
注:
初期同期が失敗した場合は、AWSとAzureの両方でセキュリティグループを確認し、必要なポートを許可してください。

AWSおよびAzure KubernetesクラスターにGTPおよびGSE CRDを適用する

グローバル・トラフィック・ポリシー (GTP) およびグローバル・サービス・エントリ (GSE) CRDは、KubernetesアプリケーションでGSLBを実行するためのNetScalerの設定に役立ちます。これらのCRDは、分散Kubernetesクラスターにデプロイされたアプリケーション用のNetScaler GSLBコントローラーを設定するために設計されています。

GTP CRD

GTP CRDは、デプロイタイプ (カナリア、フェイルオーバー、ローカルファースト)、GSLBドメイン、イングレスのヘルスモニター、サービスタイプなど、NetScalerでGSLBを設定するためのパラメータを受け入れます。
GTP CRDの定義については、GTP CRDを参照してください。次のコマンドを使用して、AWSおよびAzure KubernetesクラスターにGTP CRD定義を適用します。
kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/gslb/Manifest/gtp-crd.yaml

GSE CRD

GSE CRDは、各クラスターのエンドポイント情報(クラスターにトラフィックをルーティングするKubernetesオブジェクトに関する情報)を指定します。グローバルサービスエントリは、クラスターにトラフィックをルーティングするアプリケーションの外部IPアドレスを自動的に選択します。ルートの外部IPアドレスが変更された場合、グローバルサービスエントリは新しく割り当てられたIPアドレスを選択し、それに応じてNetScalerのGSLBエンドポイントを構成します。
GSE CRDの定義については、GSE CRDを参照してください。次のコマンドを使用して、AWSおよびAzure KubernetesクラスターにGSE CRD定義を適用します。
kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/gslb/Manifest/gse-crd.yaml

GSLBコントローラーの展開

GSLBコントローラーは、マルチクラウド環境におけるクラスター間のアプリケーションの高可用性を確保するのに役立ちます。
GSLBコントローラーは、AWSおよびAzureクラスターにインストールできます。GSLBコントローラーは、GTPおよびGSE CRDをリッスンし、マルチクラウド環境の複数のリージョンで高可用性を提供するGSLB用にNetScalerを構成します。
GSLBコントローラーを展開するには、次の手順を実行します。
  1. AWSおよびAzure KubernetesクラスターにGSLBコントローラー用のRBACを作成します。
    kubectl apply -f https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/gslb/Manifest/gslb-rbac.yaml
  2. 次のコマンドを使用して、AWSおよびAzureクラスターにシークレットを作成します。
    注:
    シークレットにより、GSLBコントローラーはGSLBデバイスに接続し、構成をプッシュできます。
    kubectl create secret generic secret-1 --from-literal=username=<username> --from-literal=password=<password>
    注:
    add system userコマンドを使用して、NetScalerにユーザーを追加できます。
  3. gslb-controller.yamlからGSLBコントローラーのYAMLファイルをダウンロードします。
  4. 次のコマンドを使用して、AWS クラスターに gslb-controller.yaml を適用します。
    kubectl apply -f  gslb-controller.yaml
    AWS 環境では、LOCAL_REGION、LOCAL_CLUSTER、および SITENAMES 環境変数を定義するために gslb-controller.yaml を編集します。
    次の例では、環境変数 LOCAL_REGION を us-east-2、LOCAL_CLUSTER を eks-cluster、環境変数 SITENAMES を aws_site,azure_site として定義しています。
    name: "LOCAL_REGION"
    value: "us-east-2"
    name: "LOCAL_CLUSTER"
    value: "eks-cluster"
    name: "SITENAMES"
    value: "aws_site,azure_site"
    name: "aws_site_ip"
    value: "NSIP of aws VPX(internal IP)"
    name: "aws_site_region"
    value: "us-east-2"
    name: "azure_site_ip"
    value: "NSIP of azure_VPX(public IP)"
    name: "azure_site_region"
    value: "central-india"
    name: "azure_site_username"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: username
    name: "azure_site_password"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: password
    name: "aws_site_username"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: username
    name: "aws_site_password"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: password
    次のコマンドを使用して、Azure クラスターに gslb-controller.yaml を適用します。
    kubectl apply -f  gslb-controller.yaml
  5. Azure サイトでは、LOCAL_REGION、LOCAL_CLUSTER、および SITENAMES 環境変数を定義するために gslb-controller.yaml を編集します。
    次の例では、環境変数 LOCAL_REGION を central-india、LOCAL_CLUSTER を azure-cluster、SITENAMES を aws_site, azure_site として定義しています。
    name: "LOCAL_REGION"
    value: "central-india"
    name: "LOCAL_CLUSTER"
    value: "aks-cluster"
    name: "SITENAMES"
    value: "aws_site,azure_site"
    name: "aws_site_ip"
    value: "NSIP of AWS VPX(public IP)"
    name: "aws_site_region"
    value: "us-east-2"
    name: "azure_site_ip"
    value: "NSIP of azure VPX(internal IP)"
    name: "azure_site_region"
    value: "central-india"
    name: "azure_site_username"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: username
    name: "azure_site_password"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: password
    name: "aws_site_username"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: username
    name: "aws_site_password"
    valueFrom:
      secretKeyRef:
       name: secret-1
       key: password
    注記: GSLB サイト情報の順序は、すべてのクラスターで同じである必要があります。順序の最初のサイトは、構成をプッシュするためのマスターサイトと見なされます。マスターサイトがダウンすると、リストの次のサイトが新しいマスターになります。したがって、サイトの順序はすべての Kubernetes クラスターで同じである必要があります。

サンプルアプリケーションの展開

このサンプルアプリケーションの展開シナリオでは、apache の https イメージが使用されます。ただし、任意のサンプルアプリケーションを選択できます。
アプリケーションは、AWS および Azure クラスターの両方で LoadBalancer タイプとして公開されます。AWS および Azure Kubernetes クラスターの両方でコマンドを実行する必要があります。
  1. 次のコマンドを使用して、サンプル apache アプリケーションのデプロイを作成します。
    kubectl create deploy apache --image=httpd:latest port=80
  2. 次のコマンドを使用して、apache アプリケーションを LoadBalancer タイプのサービスとして公開します。
    kubectl expose deploy apache --type=LoadBalancer --port=80
  3. 次のコマンドを使用して、LoadBalancer タイプのサービスに外部 IP アドレスが割り当てられていることを確認します。
    kubectl get svc apache
    NAME     TYPE           CLUSTER-IP    EXTERNAL-IP     PORT(S)        AGE
    apache   LoadBalancer   10.0.16.231   20.62.235.193   80:32666/TCP   3m2s
AWS および Azure クラスターにアプリケーションをデプロイした後、マルチクラウドクラスターで高可用性を構成するために GTE カスタムリソースを構成する必要があります。
次の例に示すように、GTP YAML リソース gtp_isntance.yaml を作成します。
apiVersion: "citrix.com/v1beta1"
 kind: globaltrafficpolicy
 metadata:
   name: gtp-sample-app
   namespace: default
 spec:
   serviceType: 'HTTP'
   hosts:
   - host: <domain name>
     policy:
       trafficPolicy: 'FAILOVER'
       secLbMethod: 'ROUNDROBIN'
       targets:
       - destination: 'apache.default.us-east-2.eks-cluster'
         weight: 1
       - destination: 'apache.default.central-india.aks-cluster'
         primary: false
         weight: 1
       monitor:
       - monType: http
         uri: ''
         respCode: 200
   status:
     {}
この例では、トラフィックポリシーは FAILOVER として設定されています。ただし、マルチクラスターコントローラーは複数のトラフィックポリシーをサポートしています。詳細については、トラフィックポリシーのドキュメントを参照してください。
次のコマンドを使用して、両方のクラスターにGTPリソースを適用します。
kubectl apply -f gtp_instance.yaml
サービスステータスから導出された必要なエンドポイント情報とともに、GSEリソースが両方のクラスターに自動的に作成されていることを確認できます。次のコマンドを使用して確認してください。
kubectl get gse
kubectl get gse *name* -o yaml
また、NetScaler VPXにログインし、次のコマンドを使用してGSLB構成が正常に作成されていることを確認してください。
show gslb runningconfig
GTP CRDがトラフィックポリシーとして FAILOVER に設定されているため、NetScaler VPXインスタンスはプライマリクラスター(この例ではEKSクラスター)からトラフィックを処理します。
curl -v http://*domain_name*
ただし、EKSクラスターでエンドポイントが利用できない場合、アプリケーションは自動的にAzureクラスターから提供されます。プライマリクラスターでレプリカ数を 0 に設定することで、これを確実にすることができます。

Amazon EKSおよびMicrosoft AKSクラスターのイングレスおよびGSLBデバイスとしてのNetScaler VPX

Amazon EKSおよびMicrosoft AKSを使用し、NetScaler VPXをGSLBとして、また同じNetScaler VPXをイングレスデバイスとしても使用して、マルチクラウドおよびマルチクラスターのイングレスおよびロードバランシングソリューションを展開できます。
NetScaler VPXをイングレスデバイスとして使用してマルチクラウドマルチクラスターのイングレスおよびロードバランシングを展開するには、前のセクションで説明されている以下のタスクを完了する必要があります。
先行するタスクを完了した後、以下のタスクを実行します。
  1. NetScaler VPXをAWSのイングレスデバイスとして構成する
  2. NetScaler VPXをAzureのイングレスデバイスとして構成する

NetScaler VPXをAWSのイングレスデバイスとして構成する

以下の手順を実行します。
  1. Kubernetesシークレットを使用してNetScaler VPXのログイン資格情報を作成します
    kubectl create secret  generic nslogin --from-literal=username='nsroot' --from-literal=password='&lt;instance-id-of-vpx>'
    NetScaler VPXのパスワードは、変更していない限り、通常はVPXのインスタンスIDです。
  2. SSHを使用してNetScaler VPXに接続し、NetScaler VPXでSNIPを構成します。SNIPは、Citrix VPXのセカンダリIPアドレスであり、エラスティックIPアドレスが割り当てられていません。
    add ns ip 192.168.84.93 255.255.224.0
    この手順は、NetScalerがKubernetesクラスター内のポッドと対話するために必要です。
  3. NetScaler Ingress Controllerマニフェストで、NetScaler VPXの管理IPアドレスとVIPを更新します。
    wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/aws/quick-deploy-cic/manifest/cic.yaml
    注:
    wgetがインストールされていない場合は、fetchまたはcurlを使用できます。
  4. 以下のフィールドで、cic.yaml内のNetScaler VPXのプライマリIPアドレスを更新します。
    # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
     - name: "NS_IP"
       value: "X.X.X.X"
  5. 以下のフィールドで、cic.yaml内のNetScaler VPX VIPを更新します。これは、エラスティックIPアドレスを割り当てたプライベートIPアドレスです。
    # Set NetScaler® VIP for the data traffic
    - name: "NS_VIP"
      value: "X.X.X.X"
  6. 必要な値でYAMLファイルを編集したら、NetScaler Ingress Controllerを展開します。
    kubectl create -f cic.yaml

NetScaler VPX を Azure 用のイングレスデバイスとして構成する

次の手順を実行します。
  1. Kubernetes シークレットを使用して NetScaler VPX のログイン資格情報を作成します。
    kubectl create secret  generic nslogin --from-literal=username='&lt;azure-vpx-instance-username>' --from-literal=password='&lt;azure-vpx-instance-password>'
    注記:
    NetScaler VPX のユーザー名とパスワードは、Azure で NetScaler VPX を作成する際に設定した資格情報と同じである必要があります。
  2. SSH を使用して、NetScaler VPX に SNIP (NetScaler VPX のセカンダリ IP アドレス) を構成します。この手順は、NetScaler が Kubernetes クラスター内のポッドと通信するために必要です。
    add ns ip &lt;snip-vpx-instance-private-ip> &lt;vpx-instance-primary-ip-subnet>
    • snip-vpx-instance-private-ip は、NetScaler VPX インスタンスの作成中に SNIP を追加する際に割り当てられる動的プライベート IP アドレスです。
    • vpx-instance-primary-ip-subnet は、NetScaler VPX インスタンスのプライマリプライベート IP アドレスのサブネットです。
    プライベート IP アドレスのサブネットを確認するには、NetScaler VPX インスタンスに SSH で接続し、次のコマンドを使用します。
    show ip &lt;primary-private-ip-addess>
  3. NetScaler Ingress Controller YAML ファイルで、NetScaler VPX のイメージ URL、管理 IP アドレス、および VIP を更新します。
    1. NetScaler Ingress Controller YAML ファイルをダウンロードします。
      wget https://raw.githubusercontent.com/citrix/citrix-k8s-ingress-controller/master/deployment/azure/manifest/azurecic/cic.yaml
      注記:
      wget がインストールされていない場合は、fetch または curl コマンドを使用できます。
    2. cic.yaml ファイルで、NetScaler Ingress Controller イメージを Azure イメージ URL で更新します。
      - name: cic-k8s-ingress-controller
        # CIC Image from Azure
        image: "&lt;azure-cic-image-url>"
    3. cic.yaml で、NetScaler VPX のプライマリ IP アドレスを Azure VPX インスタンスのプライマリプライベート IP アドレスで更新します。
      # Set NetScaler NSIP/SNIP, SNIP in case of HA (mgmt has to be enabled)
      - name: "NS_IP"
        value: "X.X.X.X"
    4. cic.yamlで、NetScaler VPX VIPを、VPX Azureインスタンス作成時に割り当てられたVIPのプライベートIPアドレスで更新します。
      # Set NetScaler VIP for the data traffic
      - name: "NS_VIP"
        value: "X.X.X.X"
  4. 必要な値でNetScaler Ingress Controllerを設定したら、次のコマンドを使用してNetScaler Ingress Controllerを展開します。
    kubectl create -f cic.yaml