DockerでのNetScaler CPXインスタンスの展開

NetScaler CPXインスタンスは、QuayコンテナレジストリのDocker イメージファイルとして利用できます。 インスタンスをデプロイするには、QuayコンテナレジストリからNetScaler CPXイメージをダウンロードし、 docker run コマンドまたはDocker Composeツールを使用してインスタンスをデプロイします。

前提条件

以下の点について確認してください:

  • Dockerホストシステムが少なくとも次のものを備えていること:
    • CPU 1つ

    • 2GBのRAM

注:NetScaler CPXのパフォーマンスを向上させるために、NetScaler CPXインスタンスを起動する処理エンジンの数を定義できます。 処理エンジンを追加するごとに、Dockerホストにエンジンと同じ数のvCPUとGBのメモリが備えられていることを確認してください。 たとえば、4つの処理エンジンを追加する場合は、Dockerホストは4つのvCPUと4GBのメモリを備えている必要があります。

  • DockerホストシステムがLinux Ubuntuのバージョン14.04以降を実行している。

  • Dockerバージョン1.12がLinuxホストシステムにインストールされている。 LinuxでのDockerのインストールについて詳しくは、Dockerのドキュメントを参照してください。

  • Dockerホストからインターネットに接続できる。

    :NetScaler CPXをubuntuバージョン16.04.5、カーネルバージョン4.4.0-131-genericで実行すると問題が発生します。 そのため、ubuntuバージョン16.04.5カーネルバージョン4.4.0-131-genericでNetScaler CPXを実行することはお勧めしません。

    注意: 次の kubelet および kube-proxy バージョンにはセキュリティ上の脆弱性があるため、これらのバージョンで NetScaler CPX を使用することは推奨されません。

    • kubelet/kube-proxy v1.18.0-1.18.3
    • kubelet/kube-proxy v1.17.0-1.17.6
    • kubelet/kube-proxy <=1.16.10

    この脆弱性を軽減する方法については、Mitigate this vulnerabilityを参照してください。

QuayからNetScaler CPXイメージをダウンロードする

docker pull コマンドを使用してQuayコンテナーレジストリからNetScaler CPXイメージをダウンロードし、環境にデプロイできます。 次のコマンドを使用して、QuayコンテナレジストリからNetScaler CPXイメージをダウンロードします:

      docker pull quay.io/citrix/citrix-k8s-cpx-ingress:13.0-xx.xx

たとえば、バージョン13.0-64.35をダウンロードする場合は、次のコマンドを使用します:

      docker pull quay.io/citrix/citrix-k8s-cpx-ingress:13.0-64.35

次のコマンドを使用して、NetScaler CPXイメージがDockerイメージにインストールされているかどうかを確認します:

      root@ubuntu:~# docker images | grep 'citrix-k8s-cpx-ingress'
      quay.io/citrix/citrix-k8s-cpx-ingress                  13.0-64.35          952a04e73101        2 months ago        469 MB

Quayコンテナレジストリから最新のNetScalerCPXイメージを展開できます。

docker runコマンドを使用したNetScaler CPXインスタンスの展開

ホストにロードしたNetScaler CPX Dockerイメージを使用して、ホスト上でDockerコンテナにNetScaler CPXインスタンスをインストールできます。 docker runコマンドを使用して、NetScaler CPXインスタンスをデフォルトのNetScaler CPX構成でインストールします。

重要:

CPX ExpressからNetScaler CPX Expressをダウンロードした場合は、 必ずCPX Expressで入手できるエンドユーザー使用許諾契約(EULA)を読んで 理解し 、NetScalerCPXインスタンスを展開する際に使用許諾契約書に同意してください

次のdocker runコマンドを使用して、NetScaler CPXインスタンスをDockerコンテナにインストールします:

  docker run -dt -P --privileged=true --net=host –e NS_NETMODE=”HOST” -e CPX_CORES=<number of cores> --name <container_name> --ulimit core=-1 -e CPX_NW_DEV='<INTERFACES>' -e CPX_CONFIG=’{“YIELD”:”NO”}’ -e LS_IP=<LS_IP_ADDRESS> -e LS_PORT=<LS_PORT> e PLATFORM=CP1000 -v <host_dir>:/cpx <REPOSITORY>:<TAG>
<!--NeedCopy-->
  docker run -dt --privileged=true --net=host -e NS_NETMODE="HOST" -e CPX_NW_DEV='eth1 eth2' -e CPX_CORES=5 –e CPX_CONFIG='{"YIELD":"No"}' -e LS_IP=10.102.38.134 -e PLATFORM=CP1000 -v /var/cpx:/cpx --name cpx_host cpx:13.0-x.x
<!--NeedCopy-->

この例では、NetScaler CPXmycpxDocker イメージに基づいて名前の付いたコンテナを作成します。

-Pパラメーターは必ず指定する必要があります。 NetScaler CPX Docker イメージによってコンテナ内で公開されているポートをマッピングするようにDocker に指示します。 つまり、ポート 9080、22、9443、161/UDP を、ユーザー定義の範囲からランダムに選択された Docker ホスト上のポートにマッピングすることになります。 このマッピングは競合を防ぐために行われます。 あとで同じDockerホストに複数のNetScaler CPXコンテナを作成する場合。 ポートマッピングは動的であり、コンテナが起動または再起動するごとに設定されます。 ポートは次のように使用されます:

  • 9080はHTTP用
  • 9443はHTTPS用
  • 22はSSH用
  • 161/UDPはSNMP用。

静的なポートマッピングを行う場合は、-pパラメーターを使用して手動でポートを設定します。

--privileged=trueオプションは、コンテナを特権モードで実行するために使用されます。 NetScaler CPXをホストモードのデプロイメントで実行している場合は、NetScaler CPXにすべてのシステム権限を与える必要があります。

NetScaler CPXを単一コアまたは複数コアのブリッジモードで実行するには、特権モードの代わりに--cap-add=NET_ADMINオプションを使用できます。 --cap-add=NET_ADMIN --cap-add=NET_ADMIN このオプションにより、NetScaler CPXコンテナを完全なネットワーク権限で実行できます。 --cap-add=NET_ADMINオプションでは、docker runコマンドの--sysctl kernel.shmmax=1073741824 --sysctl net.ipv6.conf.default.accept_dad=0 --sysctl kernel.core_pattern=/var/crash/core.%e.%p.%sオプションを使用して、追加のシステム制御設定を手動で行います。 これらの追加のシステム制御設定は、非特権モードでは自動的に行われません。

**--net=hostは標準的なdocker runコマンドオプションで、コンテナがホストネットワークスタックで実行され、すべてのネットワークデバイスへのアクセス権を持つよう指定します。

NetScaler CPXをブリッジまたはネットワークなしで実行している場合は、このオプションは無視してください。

-e NS_NETMODE="HOST" はNetScaler CPX固有の環境変数で、これを使用してNetScaler CPXをホストモードで起動するように指定できます。 NetScaler CPXがホストモードで起動すると、NetScaler CPXへの管理アクセス用に、ホストマシン上で4つのデフォルトiptablesルールを構成します。 この場合は次のポートを使用します:

  • 9995はHTTP用
  • 9996はHTTPS用
  • 9997はSSH用
  • 9998はSNMP用

異なるポートを指定する場合は、次の環境変数を使用できます。

  • -e NS_HTTP_PORT =
  • -e NS_HTTPS_PORT =
  • -e NS_SSH_PORT =
  • -e NS_SNMP_PORT =

NetScaler CPXをブリッジまたはネットワークなしで実行している場合は、この環境変数を無視してください。

-e CPX_CORESは、NetScaler CPX固有のオプションの環境変数です。 このオプションを使用して、NetScaler CPXコンテナを起動する処理エンジンの数を定義することで、NetScaler CPXインスタンスのパフォーマンスを改善できます。

:NetScaler CPXは、1コアから16コアまでサポートできます。

処理エンジンを追加するごとに、Dockerホストにエンジンと同じ数のvCPUとGBのメモリが備えられていることを確認してください。 たとえば、4つの処理エンジンを追加する場合は、Dockerホストは4つのvCPUと4GBのメモリを備えている必要があります。

-e EULA = yesは  NetScaler CPX固有の必須環境変数であり、CPX Expressで入手できるエンドユーザーライセンス契約(EULA)を読んで 理解していることを確認するために必要です。

-e PLATFORM=CP1000パラメーターは、NetScaler CPXライセンスの種類を指定します。

ホストネットワークでDocker を実行している場合は、環境変数を使用してNetScaler CPXコンテナに専用のネットワークインターフェイスを割り当てることができます。 -e CPX_NW_DEV ネットワークインターフェイスはスペースで区切って定義する必要があります。 定義したネットワークインターフェイスは、NetScaler CPXコンテナをアンインストールするまでNetScaler CPXコンテナによって保持されます。 NetScaler CPXコンテナがプロビジョニングされる際に、割り当てられたすべてのネットワークインターフェイスがNetScalerネットワーク名前空間に追加されます。

NetScaler CPXをブリッジネットワークで実行している場合は、コンテナへの別のネットワーク接続を設定したり、既存のネットワークを削除したりするなど、コンテナネットワークを変更できます。 次に、NetScaler CPXコンテナを再起動して、更新されたネットワークを使用するようにしてください。

  docker run -dt --privileged=true --net=host -e NS_NETMODE="HOST" -e EULA=yes -e CPX_NW_DEV='eth1 eth2' -e CPX_CORES=5 -e PLATFORM=CP1000 --name cpx_host cpx:13.0-x.x
<!--NeedCopy-->

-e CPX_CONFIGはNetScaler CPXコンテナのスループットパフォーマンスを制御可能にするNetScaler CPX固有の環境変数です。 NetScaler CPXが処理すべき受信トラフィックをまったく受け取らないときは、このアイドル時間中にCPUが解放されてスループットパフォーマンスが低下します。 このような場合は、CPX_CONFIG環境変数を使用して、NetScaler CPXコンテナのスループットパフォーマンスを制御できます。 CPX_CONFIG環境変数には、JSON形式で次のような値を入れる必要があります:

  • NetScaler CPXコンテナでアイドル時にCPUを解放する場合は、次のように定義します。 {"YIELD” : “Yes”}
  • NetScaler CPXコンテナがアイドル状態のCPUの解放を回避して高スループットのパフォーマンスを得ることができるようにする場合は、次のように定義します。 {“YIELD” : “No”}
  docker run -dt --privileged=true --net=host -e NS_NETMODE="HOST" -e EULA=yes -e CPX_CORES=5 –e CPX_CONFIG='{"YIELD":"No"}' -e PLATFORM=CP1000 --name cpx_host cpx:13.0-x.x
<!--NeedCopy-->
  docker run -dt --privileged=true --net=host -e NS_NETMODE="HOST" -e EULA=yes -e CPX_CORES=5 –e CPX_CONFIG='{"YIELD":"Yes"}' -e PLATFORM=CP1000 --name cpx_host cpx:13.0-x.x
<!--NeedCopy-->

–vパラメーターは、NetScaler CPXマウントディレクトリ/cpxのマウントポイントを指定するオプションパラメーターです。 マウントポイントはホスト上のディレクトリであり、そこに/cpxディレクトリをマウントします。 /cpxディレクトリには、ログ、構成ファイル、SSL証明書、コアダンプファイルが保存されています。 この例では、マウントポイントは/var/cpxで、NetScaler CPXマウントディレクトリは/cpxです。

ライセンスを購入した場合、または評価ライセンスを所有している場合は、そのライセンスをライセンスサーバーにアップロードして、docker runコマンドを-e LS_IP=<LS_IP_ADDRESS> -e LS_PORT=<LS_PORT>パラメーターを使用してライセンスサーバーの場所を指定できます。 この場合は、EULAを承認する必要はありません。

  docker run -dt --privileged=true --net=host -e NS_NETMODE="HOST" -e CPX_CORES=5 –e CPX_CONFIG='{"YIELD":"No"}' -e LS_IP=10.102.38.134 -e PLATFORM=CP1000 --name cpx_host cpx:13.0-x.x
<!--NeedCopy-->

各項目の意味は次のとおりです:

  • LS_IP_ADDRESSは、ライセンスサーバーのIPアドレスです。
  • LS_PORTは、ライセンスサーバーのポートです。

次のコマンドを使用すると、システムで実行されているイメージと、標準ポートにマップされたポートを表示できます: docker ps

docker run コマンドを使用してより軽量なバージョンのNetScaler CPXをデプロイする

NetScalerはNetScaler CPXの軽量版を提供しており、ランタイムメモリの消費量が少なくて済みます。 NetScaler CPXの軽量バージョンは、サービスメッシュ展開のサイドカーとして導入できます。

NetScaler CPXの軽量バージョンは、次の機能をサポートしています。

  • アプリケーションの可用性
    • L4の負荷分散およびL7のコンテンツスイッチ
    • SSLオフロード
    • IPv6プロトコル変換
  • アプリケーションのセキュリティ
    • L7の書き換えおよびレスポンダー
  • 簡単な管理機能
    • Webログ
    • AppFlow

NetScaler CPXの軽量バージョンをインスタンス化するには、 NS_CPX_LITE コマンドの実行中に環境変数を設定します。 Docker run

  docker run -dt -P --privileged=true -e NS_CPX_LITE=1 -e EULA=yes --name <container_name> --ulimit core=-1 <REPOSITORY>:<TAG>
<!--NeedCopy-->

次の例では、NetScaler CPXイメージに基づいて軽量コンテナを作成します。

  docker run –dt -P --privileged=true -e NS_CPX_LITE=1 -e EULA=yes -–name lightweight --ulimit core=-1 cpx:latest
<!--NeedCopy-->

デフォルトでは、軽量バージョンのNetScaler newnslog CPXではログの使用は無効になっています。 これを有効にするには、より軽量なバージョンのNetScaler CPXを起動するときに、 NS_ENABLE_NEWNSLOG 環境変数を1に設定する必要があります。

次の例は、軽量バージョンのNetScaler newnslog CPXを導入する際に使用してロギングを有効にする方法を示しています。

  docker run -dt --privileged=true --ulimit core=-1 -e EULA=yes -e NS_CPX_LITE=1 -e NS_ENABLE_NEWNSLOG=1 cpx:<tag>
<!--NeedCopy-->

注: CPXの軽量バージョンは、シングルコアのみをサポートします(CPX_CORES=1)。

Docker Composeを使用したNetScaler CPXインスタンスの展開

Docker Composeツールを使用して、単一または複数のNetScaler CPXインスタンスをプロビジョニングできます。 Docker Composeを使用してNetScaler CPXインスタンスをプロビジョニングするには、最初に構成ファイルを作成する必要があります。 このファイルには、NetScaler CPXイメージ、NetScaler CPXインスタンス用に開くポート、およびNetScaler CPXインスタンスの権限を指定します。

重要エクスプレッション値のタイプを指定するときは

Docker Composeツールをホストにインストールしていることを確認してください。

複数のNetScaler CPXインスタンスをプロビジョニングするには:

  1. 次の場所にComposeファイルを作成します:
  • <service-name> は、プロビジョニングするサービスの名前です。
  • image:<repository>:<tag>は、NetScaler CPXイメージのリポジトリとバージョンを示します。
  • privileged: trueは、NetScaler CPXインスタンスのすべてのroot特権を提供します。
  • cap_add は、NetScaler CPXインスタンスにネットワーク特権を提供します。
  • <host_directory_path> は、NetScaler CPXインスタンスをマウントするDockerホストのディレクトリを指定します。
  • <number_processing_engine> は、NetScaler CPXインスタンスを起動する処理エンジンの数です。 処理エンジンを追加するごとに、Dockerホストにエンジンと同じ数のvCPUとGBのメモリが備えられていることを確認してください。 たとえば、4つの処理エンジンを追加する場合は、Dockerホストは4つのvCPUと4GBのメモリを備えている必要があります。

Composeファイルは、一般的に次のような形式に従います:

      <service-name>:
      container_name:
      image: <repository>:<tag>
      ports:
          -  22
          -  9080
          -  9443
          -  161/udp
          -  35021-35030
      tty: true
      cap_add:
          -  NET_ADMIN
      ulimits:
          core: -1
      volumes:
          -  <host_directory_path>:/cpx
      environment:
          -  EULA=yes
          -  CPX_CORES=<number_processing_engine>
          -  CPX_CONFIG='{"YIELD":"Yes"}'
<!--NeedCopy-->
      CPX_0:
      image: quay.io/citrix/citrix-k8s-cpx-ingress:13.1-37.38
      ports:
          -  9443
          -  22
          -  9080
          -  161/udp
      tty: true
      cap_add:
          -  NET_ADMIN
      ulimits:
          core: -1
      volumes:
          -  /root/test:/cpx
    environment:
          -  CPX_CORES=2
          -  EULA=yes
<!--NeedCopy-->
DockerでのNetScaler CPXインスタンスの展開