DockerへのNetScaler CPXインスタンスのデプロイ

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

前提条件

以下を確認してください。

  • Dockerホストシステムの最小要件:
    • 1 CPU
    • 2 GB RAM

      注記:

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

  • DockerホストシステムがLinux Ubuntuバージョン14.04以降で動作していること。

  • Dockerバージョン1.12がホストシステムにインストールされていること。LinuxへのDockerのインストールについては、Docker Documentationを参照してください。

  • Dockerホストがインターネットに接続されていること。

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

    注記: 以下の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イメージのダウンロード

QuayコンテナレジストリからNetScaler CPXイメージをdocker pullコマンドを使用してダウンロードし、お使いの環境にデプロイできます。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

最新のNetScaler CPXイメージは、Quayコンテナレジストリからデプロイできます。

docker runコマンドを使用したNetScaler CPXインスタンスのデプロイ

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

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

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 --name <cpx_container_name> <REPOSITORY>:<CPX-IMAGE_TAG_IN_QUAY>
<!--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 quay.io/citrix/citrix-k8s-cpx-ingress:14.1-x.x
<!--NeedCopy-->

この例では、NetScaler CPX Dockerイメージに基づいて、mycpxという名前のコンテナを作成します。

-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オプションを使用すると、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インスタンスのパフォーマンスを向上させることができます。

注記:

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

  • NetScaler CPXは1〜16コアをサポートできます。

-e EULA = yesは必須のNetScaler CPX固有の環境変数であり、The Citrix licensing system componentsで利用可能なエンドユーザーライセンス契約(EULA)を読み、理解したことを確認するために必要です。

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

Dockerをホストネットワークで実行している場合、-e CPX_NW_DEV環境変数を使用して、NetScaler CPXコンテナに専用のネットワークインターフェイスを割り当てることができます。空白で区切られたネットワークインターフェイスを定義する必要があります。定義したネットワークインターフェイスは、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です。

ライセンスを購入したか、評価ライセンスを持っている場合、ライセンスをライセンスサーバーにアップロードし、-e LS_IP=<LS_IP_ADDRESS> -e LS_PORT=<LS_PORT>パラメーターを使用してdocker runコマンドでライセンスサーバーの場所を指定できます。この場合、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の軽量バージョンをインスタンス化するには、Docker runコマンドの実行中にNS_CPX_LITE環境変数を設定します。

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 CPXの軽量バージョンではnewnslogを使用したロギングは無効になっています。これを有効にするには、NetScaler CPXの軽量バージョンを起動する際にNS_ENABLE_NEWNSLOG環境変数を1に設定する必要があります。

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

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インスタンスまたは複数のNetScaler CPXインスタンスをプロビジョニングできます。Docker Composeを使用してNetScaler CPXインスタンスをプロビジョニングするには、まずComposeファイルを作成する必要があります。このファイルには、NetScaler CPXイメージ、NetScaler CPXインスタンス用に開きたいポート、およびNetScaler CPXインスタンスの特権が指定されます。

重要

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

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

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

Composeファイルは通常、次の形式に従います。

<container_name>:
    image: <repository>:<tag>
    ports:
        -  9443
        -  22
        -  9080
        -  161/udp
    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インスタンスのデプロイ