在 Docker 中部署 Citrix ADC CPX 实例

在 Quay 容器注册表中 Citrix ADC CPX 实例以 Docker 映像文件形式提供。要部署实例,请从 Quay 容器注册表下载 Citrix ADC CPX 映像,然后使用 docker run 命令或 Docker Compose 工具来部署实例。

必备条件

请确保:

  • Docker 主机系统至少具有:
    • 1 个 CPU

    • 2 GB RAM

      注意: 为了获得更加出色的 Citrix ADC CPX 性能,您可以定义希望 Citrix ADC CPX 实例启动的处理引擎数。对于您添加的每个附加处理引擎,请确保 Docker 主机包含相应数量的 vCPU 和内存量 (GB)。例如,如果您要添加 4 个处理引擎,则 Docker 主机必须包含 4 个 vCPU 和 4 GB 内存。

  • Docker 主机系统运行 Linux Ubuntu 版本 14.04 或更高版本。

  • Docker 版本 1.12 安装在主机系统上。有关在 Linux 上安装 Docker 的信息,请参阅 Docker 文档

  • Docker 主机有 Internet 连接。

    注意:Citrix ADC CPX 在 ubuntu 版本 16.04.5(内核版本 4.4.0-131-generic)上运行时出现问题。因此,不建议在 ubuntu 16.04.5 内核版本 4.4.0-131-generic 上运行 Citrix ADC CPX。

    注意:以下 kubelet 和 kube-proxy 版本存在一些安全漏洞, 建议不要 在这些版本中使用 Citric ADC 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 下载 Citrix ADC CPX 映像

可以使用 docker pull 命令从 Quay 容器注册表中下载 Citrix ADC CPX 映像,然后将其部署到您的环境中。使用以下命令可从 Quay 容器注册表中下载 Citrix ADC 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

使用以下命令可验证 Citrix ADC 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 容器注册表中部署最新的 Citrix ADC CPX 映像。

使用 docker run 命令部署 Citrix ADC CPX 实例

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

重要:

如果已从 CPX Express 下载 Citrix ADC CPX Express,请务必阅读并理解此处提供的最终用户许可协议 (EULA):CPX Express,并在部署 Citrix ADC CPX 实例时接受 EULA。

使用以下 docker run 命令在 Docker 容器中安装 Citrix ADC 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-->

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

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

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

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

--privileged=true 选项用于在特权模式下运行容器。如果您在部署的主机模式下运行 Citrix ADC CPX,则需要向 Citrix ADC CPX 提供所有系统权限。如果要在桥接模式下使用单个或多个内核运行 Citrix ADC CPX,则可以使用 --cap-add=NET_ADMIN 选项来代替此选项。--cap-add=NET_ADMIN 选项使您能够以完全网络权限运行 Citrix ADC CPX 容器。

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

注意

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

-e NS_NETMODE="HOST" 是 Citrix ADC CPX 特定的环境变量,允许您指定 Citrix ADC CPX 在主机模式下启动。Citrix ADC CPX 在主机模式下启动后,将在主机上配置 4 个默认 iptables 规则以便对 Citrix ADC 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=

注意

如果您要在桥接或无网络中运行 Citrix ADC CPX,则忽略此环境变量。

-e CPX_CORES 是 Citrix ADC CPX 特定的可选环境变量。您可以使用它来提高 Citrix ADC CPX 实例的性能,方法是定义希望 Citrix ADC CPX 容器启动的处理引擎数。

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

注意

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

-e EULA = yes 是必需的 Citrix ADC CPX 特定的环境变量,这是验证您已阅读并理解此处提供的最终用户许可协议 (EULA) 所必需的:CPX Express

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

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

注意

如果您在桥接网络中运行 Citrix ADC CPX,则可以更改容器网络,例如配置与容器的另一个网络的连接或者删除现有网络。然后确保重新启动 Citrix ADC 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 是 Citrix ADC CPX 特定的环境变量,通过它可以控制 Citrix ADC CPX 容器的吞吐量性能。Citrix ADC CPX 不接收任何传入流量进行处理时,它会在此闲置时间期间让出 CPU,从而导致吞吐量性能较低。在这种情况下,您可以使用 CPX_CONFIG 环境变量控制 Citrix ADC CPX 容器的吞吐量性能。需要以 JSON 格式向 CPX_CONFIG 环境变量提供以下值:

  • 如果您希望 Citrix ADC CPX 容器在闲置情况下让出 CPU,请定义 {"YIELD” : “Yes”}
  • 如果您希望 Citrix ADC 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 参数是可选参数,用于指定 Citrix ADC CPX 装载目录 /cpx 的装载点。装载点是主机上的一个目录,在此装载 /cpx 目录。/cpx 目录存储日志、配置文件、SSL 证书和内核转储文件。在该示例中,装载点是 /var/cpx,Citrix ADC 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 命令部署 Citrix ADC CPX 的简化版

Citrix 提供了 Citrix ADC CPX 的简化版,该版本消耗的运行时内存较少。Citrix ADC CPX 的简化版可以在服务网格部署中作为 sidecar 进行部署。

Citrix ADC CPX 的简化版支持以下功能:

  • 应用程序可用性
    • L4 负载平衡和 L7 内容交换
    • SSL 卸载
    • IPv6 协议转换
  • 应用程序安全性
    • L7 重写和响应程序
  • 简单可管理性
    • 网络日志记录
    • AppFlow

要实例化 Citrix ADC 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-->

以下示例基于 Citrix ADC CPX 映像创建轻量级容器。

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

默认情况下,在 Citrix ADC CPX 的简化版上禁止使用 newnslog 的日志记录。必须在启动 Citrix ADC CPX 的简化版时将 NS_ENABLE_NEWNSLOG 环境变量设置为 1,才能将其启用。

以下示例说明了如何在部署 Citrix ADC 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 部署 Citrix ADC CPX 实例

可以使用 Docker Compose 工具来预配一个 Citrix ADC CPX 实例或多个 Citrix ADC CPX 实例。必须首先编写一个 Compose 文件,才能使用 Docker Compose 配置 Citrix ADC CPX 实例。此文件指定 Citrix ADC CPX 映像、要为 Citrix ADC CPX 实例打开的端口以及 Citrix ADC CPX 实例的权限。

重要

请确保您已在主机上安装了 Docker Compose 工具。

要预配多个 Citrix ADC CPX 实例,请执行以下操作:

  1. 编写一个 Compose 文件,其中:
  • <service-name> 是要置备的服务的名称。
  • image:<repository>:<tag> 指示 Citrix ADC CPX 映像的存储库和版本。
  • privileged: true 提供对 Citrix ADC CPX 实例的所有 root 权限。
  • cap_add 提供对 Citrix ADC CPX 实例的网络权限。
  • <host_directory_path> 指示 Docker 主机上要为 Citrix ADC CPX 实例装载的目录。
  • <number_processing_engine> 是您希望 Citrix ADC 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:
    container_name: CPX_0
    image: cpx:13.0-x.x
    ports:
        -  9443
        -  22
        -  9080
        -  161/udp
        -  35021-35030
    tty: true
    cap_add:
        - NET_ADMIN
    ulimits:
        core: -1
    volumes:
        - /root/test:/cpx
    environment:
        -  CPX_CORES=2
        -  EULA=yes
<!--NeedCopy-->

如果要置备一个 Citrix ADC CPX 实例,必须将以下行添加到 compose 文件中:container_name:<name_of_container>

运行以下命令预配多个 Citrix ADC CPX 实例: docker-compose -f <compose_file_name> scale <service-name>=<number of instances> up –d docker-compose -f docker-compose.yml scale cpxlb=3 up –d

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

在 Docker 中部署 Citrix ADC CPX 实例