在 Docker 中部署 NetScaler CPX 实例
NetScaler CPX 实例以 Docker 镜像文件的形式在 Quay 容器注册表中提供。要部署实例,请从 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 实例。
使用以下 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
参数是强制性的。它告诉 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 实例的性能。
注意:
对于您添加的每个额外的处理引擎,请确保 Docker 主机包含等量的 vCPU 数量和 GB 内存。例如,如果您想添加 4 个处理引擎,则 Docker 主机必须包含 4 个 vCPU 和 4 GB 内存。
NetScaler CPX 支持 1 到 16 个核心。
-e EULA = yes
是一个强制性的 NetScaler CPX 特定的环境变量,它要求您确认已阅读并理解可在以下位置获取的最终用户许可协议 (EULA):Citrix 许可系统组件。
-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
。
如果您购买了许可证或拥有评估许可证,则可以通过使用 -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 可以作为 sidecar 部署在服务网格部署中。
轻量版 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。
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 实例:
- 编写一个 Compose 文件,其中:
- service-name 是您要预配的服务名称。
- image:repository:tag 表示 NetScaler CPX 镜像的存储库和版本。
- privileged: true 为 NetScaler CPX 实例提供所有 root 特权。
- cap_add 为 NetScaler CPX 实例提供网络特权。
- **
** 表示您希望为 NetScaler CPX 实例挂载的 Docker 主机上的目录。 - **
** 是您希望 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-->