Product Documentation

NetScaler CPXを使用したKubernetes環境でのEast-Westトラフィックの負荷分散

2017年10月5日

NetScaler CPXをKubernetesクラスターに展開して、クラスター内のコンテナー化されたアプリケーションを負荷分散できます。NetScaler CPXは、次のKubernetesバージョンでサポートされています:

  • 1.5.x
  • 1.6.x

Kubernetesについては、http://kubernetes.io/docs/を参照してください。

デフォルトでは、NetScaler CPXをKubernetesクラスターに展開すると、基本的な負荷分散機能を提供するKubernetesのkube-proxyに置き換えられます。負荷分散機能に加え、NetScaler CPXをkube-proxyに置き換えることで、NetScaler Management and Analytics System(MAS)を使用して以下が可能となります:

  • クラスター内のアプリケーション環境への可視性
  • クラスター内のNetScaler CPXインスタンスの管理と監視
  • StyleBook機能を使用して、アプリケーションの複雑なNetScaler構成の管理作業を簡略化

NetScaler MASについて詳しくは、 NetScaler Management and Analytics System製品のドキュメントを参照してください

Kubernetes環境でのNetScaler CPXによるEast-Westトラフィックフロー負荷分散の仕組み

Kubernetesクラスターを展開したら、NetScaler MASにKubernetes環境の詳細を提供して、クラスターとNetScaler MASを統合する必要があります。NetScaler MASは、サービス、エンドポイント、IngressルールなどのKubernetesリソースの変更を監視します。

NetScaler CPXインスタンスをKubernetesクラスターに展開すると、NetScaler MASに自動的に登録されます。NetScaler MASは登録プロセスの一環として、NetScaler CPXインスタンスのIPアドレスの情報と、NITRO REST APIを使用してNetScaler CPXインスタンスに到達し、構成を行うためのポートの情報を取得します。

NetScaler MASのStylebookエンジンは、サービス、エンドポイント、Ingressルールなど、NetScaler MASがKubernetesから収集するすべての情報を処理します。Stylebookエンジンは、既存のプロビジョニング済みStylebook(com.citrix.adc.stylebooks/1.0/cs-lb-mon)を使用して、負荷分散に必要な仮想サーバーやサービスグループなどのNetScaler固有の構成を生成し、その構成をNetScaler CPXインスタンスに適用します。StyleBookについて詳しくは、 「StyleBook」を参照してください

次の図は、Kubernetesクラスター内でNetScaler CPXがEast-Westトラフィックフローをどのように負荷分散するかを示しています。 ローカライズされた画像

この例では、Kubernetesクラスターのノード1とノード2に、フロントエンドサービスとバックエンドサービスのインスタンスが含まれています。ノード1とノード2にNetScaler CPXインスタンスを展開すると、NetScaler CPXインスタンスがNetScaler MASに自動的に登録されます。NetScaler MASにKubernetesクラスターの詳細を構成して、KubernetesクラスターとNetScaler MASを手動で統合する必要があります。

クライアントがフロントエンドサービスを要求すると、入力リソースは、2つのノード上にあるフロントエンドサービスのインスタンスの間で要求を負荷分散します。フロントエンドサービスのインスタンスがクラスター内のバックエンドサービスからの情報を必要とする場合、そのノードのNetScaler CPXインスタンスに要求が送信されます。そのNetScaler CPXインスタンスは、クラスター内のバックエンドサービスの間で要求を負荷分散し、それによりEast-Westトラフィックフローを提供します。

Kubernetesクラスター内のノードへのNetScaler CPXインスタンスの展開

Kubernetesクラスター内のノードに、NetScaler CPXインスタンスをKubernetesポッドとして展開できます。NetScaler CPXインスタンスは、デーモンセットまたはマニフェストとして展開できます。

  • デーモンセット - NetScaler CPXインスタンスをデーモンセットリソースとして展開すると、NetScaler CPXインスタンスをノード内のポッドとして展開できます。また、NetScaler CPXインスタンスはKubernetesクラスターに参加する新しいノードに展開されます。新しいノードがクラスターに参加すると、デーモンセットに指定されているNetScaler CPXインスタンスがノードに自動的にインストールされます。
  • マニフェスト - Kubernetesマニフェストは、Kubernetesオブジェクトの展開と構成の手順を含むYAMLまたはJSON形式のファイルです。NetScaler CPXインスタンスのKubernetesマニフェストを作成し、それをノード上の特定のディレクトリに配置できます。すべてのノード上のkubeletがこのディレクトリを監視し、マニフェストによって指定されたオブジェクト、つまりNetScaler CPXインスタンスを作成します。

前提条件

このタイプの展開では、必ず以下を確認してください:

ローカライズされた画像

NetScaler CPXインスタンスをデーモンセットとして展開する

デーモンセットの手法を使用すると、NetScaler CPXインスタンスをノード上にポッドとして展開し、Kubernetesクラスターに参加する新しい各ノードにポッドとして自動的に展開できます。

NetScaler CPXインスタンスをデーモンセットとして展開するには、YAMLファイルかJSONスクリプトを作成する必要があります。ファイルまたはスクリプトには、コンテナーの種類、CPXイメージファイル名、NetScaler MASサーバーのIPアドレス、およびNetScaler MASサーバーのフィンガープリントを指定します。

以下はYAMLファイルの例です:

    apiVersion: extensions/v1beta1

    kind: DaemonSet

    metadata:

      name: cpx

    spec:

      template:

        metadata:

          name: cpx

          labels:

            app: cpx-daemon

          annotations:

            NETSCALER_AS_APP: "True"

        spec:

          hostNetwork: true

          containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

              securityContext:

                 privileged: true

              env:

              - name: "EULA"

                value: "yes"

              - name: "NS_NETMODE"

                value: "HOST"

              - name: "kubernetes_url"

                value: "https://10.217.212.231:6443"

              - name: "NS_MGMT_SERVER"

                value: "10.217.212.226"

              - name: "NS_MGMT_FINGER_PRINT"

                value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"

              - name: "NS_ROUTABLE"

                value: "FALSE"

              - name: "KUBERNETES_TASK_ID"

                valueFrom:

                   fieldRef:

                      fieldPath: metadata.name

              volumeMounts:

              imagePullPolicy: Always

次の表では、サンプルデーモンセットで使用されているセクション、パラメーター、および環境変数について説明しています:

セクション パラメーター 説明
container name NetScaler CPXコンテナーの名前。
  image コンテナーを作成するためのイメージを指定します。
SecurityContext privileged: true NetScaler CPXコンテナーが特権モードで実行されるように指定します。
  name: “EULA” NetScaler CPX固有の環境変数で、https://www.citrix.com/products/netscaler-adc/cpx-express.htmlにあるエンドユーザーライセンス契約書(EULA)を読んで同意する必要があります。
  name: “NS_NETMODE” NetScaler CPX固有の環境変数で、NetScaler CPXインスタンスがホストモードで起動するように指定できます。インスタンスがホストモードで起動すると、インスタンスへの管理アクセスのために、ホストマシン上に4つのデフォルトiptable規則が構成されます。次のポートを使用します:HTTPは9995、HTTPSは9996、SSHは9997、SNMPは9998です。また、異なるポートを指定する場合は、-e NS_HTTP_PORT、-e NS_HTTPS_PORT、-e NS_SSH_PORT、-e NS_SNMP_PORTという環境変数を使用できます。
  name: “kubernetes_url” Kubernetes URLを指定するNetScaler CPX固有の環境変数。
  name: “NS_MGMT_SERVER” NetScaler MASサーバーのIPアドレスを記述するNetScaler CPX固有の環境変数。NetScaler CPXインスタンスが展開されると、このIPアドレスのNetScaler MASサーバーに自動的に登録されます。
  name: “NS_MGMT_FINGER_PRINT” NetScaler MASのフィンガープリントを定義するNetScaler CPX固有の環境変数。
  name: “NS_ROUTABLE” NetScaler CPXコンテナーが非IPコンテナーモードで実行されるかどうかを指定するNetScaler CPX固有の環境変数。値は必ずFALSEに設定してください。
  name: “KUBERNETES_TASK_ID” Kubernetesクラスター内のNetScaler CPX IDを識別します。
imagePullPolicy   Kubernetesがイメージをどのようにプルするかを指定します。

NetScaler CPXインスタンスをマニフェストを使用して展開する

Kubernetesマニフェストは、Kubernetesオブジェクトの展開と構成の手順を含むYAMLまたはJSON形式のファイルです。NetScaler CPXインスタンスのKubernetesマニフェストを作成し、それをノード上の特定のディレクトリに配置できます。すべてのノード上のkubeletがこのディレクトリを監視し、マニフェストによって指定されたオブジェクト、つまりNetScaler CPXインスタンスを作成します。

マニフェストの例は次のとおりです:

    apiVersion: v1

    kind: Pod

    metadata:

        name: cpx

    annotations:

        NETSCALER_AS_APP: "True"

    spec:

        hostNetwork: true

        containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

        securityContext:

        privileged: true

        env:

            - name: "EULA"

            value: "yes”

            - name: "NS_NETMODE"

            value: "HOST"

            - name: "kubernetes_url"

            value: "https://10.217.212.231:6443"

            - name: "NS_MGMT_SERVER"

            value: "10.217.212.226"

            - name: "NS_MGMT_FINGER_PRINT"

            value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"

            - name: "NS_ROUTABLE"

            value: "FALSE"

            - name: "KUBERNETES_TASK_ID"

            valueFrom:

                fieldRef:

                fieldPath: metadata.name

        imagePullPolicy: Always

次の表では、マニフェストの例で使用されているセクション、パラメーター、および環境変数について説明しています:

セクション パラメーター 説明
container name NetScaler CPXコンテナーの名前。
  image コンテナーを作成するためのイメージを指定します。
SecurityContext privileged: true NetScaler CPXコンテナーが特権モードで実行されるように指定します。
  name: “EULA” NetScaler CPX固有の環境変数で、https://www.citrix.com/products/netscaler-adc/cpx-express.htmlにあるエンドユーザーライセンス契約書(EULA)を読んで同意する必要があります。
  name: “NS_NETMODE” NetScaler CPX固有の環境変数で、NetScaler CPXインスタンスがホストモードで起動するように指定できます。インスタンスがホストモードで起動すると、インスタンスへの管理アクセスのために、ホストマシン上に4つのデフォルトiptable規則が構成されます。次のポートを使用します:HTTPは9995、HTTPSは9996、SSHは9997、SNMPは9998です。また、異なるポートを指定する場合は、-e NS_HTTP_PORT、-e NS_HTTPS_PORT、-e NS_SSH_PORT、-e NS_SNMP_PORTという環境変数を使用できます。
  name: “kubernetes_url” Kubernetes URLを指定するNetScaler CPX固有の環境変数。
  name: “NS_MGMT_SERVER” NetScaler MASサーバーのIPアドレスを記述するNetScaler CPX固有の環境変数。NetScaler CPXインスタンスが展開されると、このIPアドレスのNetScaler MASサーバーに自動的に登録されます。
  name: “NS_MGMT_FINGER_PRINT” NetScaler MASのフィンガープリントを定義するNetScaler CPX固有の環境変数。
  name: “NS_ROUTABLE” NetScaler CPXコンテナーが非IPコンテナーモードで実行されるかどうかを指定するNetScaler CPX固有の環境変数。値は必ずFALSEに設定してください。
  name: “KUBERNETES_TASK_ID” Kubernetesクラスター内のNetScaler CPX IDを識別します。
imagePullPolicy   Kubernetesがイメージをどのようにプルするかを指定します。

NetScaler CPXを使用したKubernetes環境でのEast-Westトラフィックの負荷分散