在 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 文档

  • Docker 主机有 Internet 连接。

    注意: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

    有关如何缓解此漏洞的信息,请参阅缓解此漏洞

从 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 容器注册表中部署最新的 NetScaler CPX 映像。

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

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

重要:

如果您已从 CPX Express 下载了 NetScaler CPX Express,请务必阅读并理解可在 CPX Express 处获得的最终用户许可协议 (EULA),并在部署 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>
<!--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 CPX Docker 映像的名为 mycpx 的容器。

-P 参数是必需的。 它让 Docker 映射 NetScaler CPX 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 在主机模式下启动后,它会在主机上配置 4 条默认 iptables 规则,用于管理对 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 容器启动的处理引擎数。

注意:NetScaler CPX 可以支持 1 到 16 个内核。

注意

对于您添加的每个附加处理引擎,请确保 Docker 主机包含相应数量的 vCPU 和内存量 (GB)。 例如,如果您要添加 4 个处理引擎,则 Docker 主机必须包含 4 个 vCPU 和 4 GB 内存。

-e EULA = yes 是 NetScaler CPX 特定的强制性环境变量,需要使用该变量来验证您是否已阅读和理解最终用户许可协议 (EULA),网址为:CPX Express

-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 容器的吞吐量性能。 需要以 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: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 重写和响应程序
  • 简单可管理性
    • 网络日志记录
    • 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 实例,必须先编写一个撰写文件。 此文件指定了 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
          -  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 实例