在 Docker 中部署 NetScaler CPX 实例

2017 年 8 月 30 日

在 Docker Store 中 NetScaler CPX 实例以 Docker 映像文件形式提供。要部署实例,请从 Docker Store 下载 NetScaler CPX 映像,然后使用 docker run 命令或 Docker Compose 工具来部署实例。

开始部署 NetScaler CPX 实例之前,请先查看必备条件部分。

必备条件

请确保:

  • 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 的信息,请参阅https://docs.docker.com/engine/installation/ubuntulinux/
  • Docker 主机有 Internet 连接。

从 Docker Store 下载 NetScaler CPX 映像

从 Docker Store 下载 NetScaler CPX Docker 映像文件,然后上载 NetScaler CPX Docker 映像。为此,请在您的 Docker 主机中,运行以下命令:

docker pull store/citrix/netscalercpx:12.0-53.xx

下载 NetScaler CPX Docker 映像后,可以使用以下命令来查看映像的详细信息:

    docker images

例如:

    root@ubuntu:~# docker images


    REPOSITORY    TAG         IMAGE ID       CREATED    VIRTUAL SIZE


       cpx       12.0-53.xx  2e97aadf918b  43 hours ago  414 MB

在此示例中,注意输出中的以下字段:

  • REPOSITORY。指定存储映像的命名空间。
  • TAG。指示安装的 NetScaler CPX 映像版本。
  • IMAGE ID。指示 Docker 主机中映像的唯一 ID。

使用 docker run 命令部署 NetScaler CPX 实例

在主机上,可以使用您加载到主机中的 NetScaler CPX Docker 映像在 Docker 容器中安装 NetScaler CPX 实例。使用 docker run 命令,采用默认 NetScaler CPX 配置安装 NetScaler CPX 实例。

重要:

如果已从 https://www.citrix.com/products/netscaler-adc/cpx-express.html 下载 NetScaler CPX Express,请务必阅读并理解此处提供的最终用户许可协议 (EULA):https://www.citrix.com/products/netscaler-adc/cpx-express.html,并在部署 NetScaler CPX 实例时接受 EULA。

使用以下 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 <REPOSITORY>:<TAG>
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:12.0-51.xx

此示例基于 NetScaler CPX Docker 映像创建一个名为 mycpx 的容器。

-P 参数是必需的。它告知 Docker 将 NetScaler CPX Docker 映像在容器中公开的端口(即,端口 80、22、443 和 161/UDP)映射到 Docker 主机上从用户定义的范围中随机选择的端口。这样做是为了避免冲突。如果您以后在同一 Docker 主机上创建多个 NetScaler CPX 容器。端口映射是动态的,并在每次启动或重新启动容器时设置。端口使用情况如下:

  • 80 用于 HTTP
  • 443 用于 HTTPs
  • 22 用于 SSH
  • 161/UDP 用于 SNMP。

如果您需要静态端口映射,请使用 -p 参数手动设置它们。

--privileged=true 选项用于以特权模式运行容器,如果您要运行采用多个核心的 NetScaler CPX,则需要提供对 NetScaler CPX 的所有系统权限。如果您要运行采用单个核心的 NetScaler CPX,则不是使用此选项,而是必须使用 --cap-add=NET_ADMIN 选项,以便您能够以完整网络权限运行 NetScaler CPX 容器。

--net=host 是标准 docker run 命令选项,用于指定容器在主机网络堆栈中运行,并有权访问所有网络设备。

注意

如果您要在桥接或无网络中运行 NetScaler CPX,则忽略此选项。

-e NS_NETMODE="HOST" 是 NetScaler CPX 特定的环境变量,用于允许您指定 NetScaler CPX 以主机模式启动,一旦 NetScaler CPX 以主机模式启动,它就在主机上配置 4 个默认 iptable 规则用于对 NetScaler CPX 的管理访问。它使用以下端口:

  • 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 内存。

-e EULA = yes 是必需的 NetScaler CPX 特定的环境变量,这是验证您已阅读并理解此处提供的最终用户许可协议 (EULA) 所必需的:https://www.citrix.com/products/netscaler-adc/cpx-express.html

-e PLATFORM=CP1000 参数指定 NetScaler CPX 许可证类型。

如果您要在主机网络中运行 Docker ,可以使用 -e CPX_NW_DEV 环境变量向 NetScaler CPX 容器分配专用网络接口。您需要定义以空格分隔的网络接口。您定义的网络接口由 NetScaler CPX 容器保留,直到您卸载 NetScaler CPX 容器。置备 NetScaler CPX 容器时,会向 NetScaler 网络命名空间添加所有分配的网络接口。

注意

如果您要在桥接或无网络中运行 NetScaler CPX,并且您更改 Docker 或容器网络(例如,向容器配置另一个网络连接,或删除现有网络),请务必重新启动 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:12.0-53.x

-e CPX_CONFIG 是 NetScaler CPX 特定的环境变量,通过它可以控制 NetScaler CPX 容器的吞吐量性能。NetScaler CPX 不接收任何传入流量进行处理时,它会在此闲置时间期间让出 CPU,从而导致吞吐量性能较低。在这种情况下,您可以使用 CPX_CONFIG 环境变量控制 NetScaler CPX 容器的吞吐量性能。需要以 JSON 格式向 CPX_CONFIG 环境变量提供以下值:

  • 如果您希望 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:12.0-51.x
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:12.0-51.xx

–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:12.0-51.xx

其中:

  • <LS_IP_ADDRESS> 是许可证服务器的 IP 地址。
  • <LS_PORT> 是许可证服务器的端口。

可以使用以下命令来查看您的系统上运行的映像以及映射到标准端口的端口:docker ps

使用 Docker Compose 部署 NetScaler CPX 实例

可以使用 Docker Compose 工具来置备一个 NetScaler CPX 实例或多个 NetScaler CPX 实例。要使用 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> 指示 Docker 主机上要为 NetScaler CPX 实例装载的目录。
  • <number_processing_engine> 是您希望 NetScaler CPX 实例启动的处理引擎数。对于每个附加处理引擎,请确保 Docker 主机包含相应数量的 vCPU 和内存量 (GB)。例如,如果您要添加 4 个处理引擎,则 Docker 主机必须包含 4 个 vCPU 和 4 GB 内存。

编写文件的格式通常类似于:

<service-name>:


container_name:


image: <repository>:<tag>


ports:


    - 22


    - 80


    - 443


    - 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"}'
CPX_0:
container_name: CPX_0
image: cpx:12.0-53.xx
ports:
    -  443
    -  22
    -  80
    -  161/udp
    -  35021-35030
    tty: true
cap_add:
    - NET_ADMIN
ulimits:
    core: -1
volumes:
    - /root/test:/cpx
environment:
    -  CPX_CORES=2
    -  EULA=yes

注意: 如果要置备一个 NetScaler CPX 实例,则必须将以下行添加到 Compose 文件中:container_name:\<name_of_container\> 运行以下命令可置备多个 NetScaler CPX 实例: docker-compose -f <compose_file_name> scale <service-name>=<实例数>up –d docker-compose -f docker-compose.yml scale cpxlb=3 up –d\

如果要置备一个 NetScaler CPX 实例,请运行以下命令:docker-compose -f \<compose_file_name\> up –d