将 NetScaler CPX 部署为 Ingress 设备
在 Kubernetes 环境中,可以将 NetScaler CPX 实例部署为 Ingress 资源,以对 Kubernetes 服务的 Ingress 流量进行负载平衡。有关详细信息,请参阅NetScaler Ingress Controller 的工作原理。
可以部署 NetScaler CPX 容器作为群集内部的节点中的 Kubernetes 提供点,也可以在群集外部的主机上进行部署,前提是该主机加入了与其他 Kubernetes 节点相同的叠加网络。
必备条件
开始操作之前,请务必执行以下操作:
- 创建一个 Kubernetes 群集。有关详细信息,请参阅http://kubernetes.io/docs/。
- 部署 NetScaler MAS。有关如何部署 NetScaler MAS 的信息,请参阅 NetScaler Management and Analytics System 文档。
- 在 NetScaler MAS 中配置 Kubernetes 群集。相关说明,请参阅在 NetScaler MAS 中配置 Kubernetes 群集详细信息。。
- 记录 NetScaler MAS 服务器的指纹。请执行以下操作以获取指纹:
- 登录 NetScaler MAS。
- 导航到 System(系统)> System Administration(系统管理),然后单击 View SSL Certificate(查看 SSL 证书)。
- 在 Certificate Details(证书详细信息)页面上的 Fingerprint(指纹)字段中,复制 NetScaler MAS 服务器的指纹。
在 Kubernetes 群集外部部署 NetScaler CPX 作为 Ingress 资源
可以将 NetScaler CPX 部署为 Kubernetes 群集外部的 Ingress 负载平衡器。群集外部的主机必须加入与其他 Kubernetes 节点相同的叠加网络。
要在 Kubernetes 群集外部的主机上部署 NetScaler CPX 作为 Ingress 资源,请执行以下操作: 在该主机上,通过使用以下 docker run 命令在 Docker 容器上部署 NetScaler CPX 实例:
docker run -dt --privileged=true -p <port_number> -e NS_HTTP_PORT=<netscaler_HTTP_port> -e NS_HTTPS_PORT=<netscaler_HTTPS_port> -e EULA=yes -e NS_MGMT_SERVER=<MAS_IP_address> -e NS_MGMT_FINGER_PRINT="<MAS_finger_print>" -e NS_ROUTABLE=<True|False> -e NS_LB_ROLE=<lb_role> -e HOST=$HOSTNAME store/citrix/netscalercpx:12.0-53.6
示例:
docker run -dt --privileged=true -p 5080:80 -p 5443:443 -p 80:5080 -e NS_HTTP_PORT=5080 -p 443:5443 -e NS_HTTPS_PORT=5443 -e EULA=yes -e NS_MGMT_SERVER=10.217.212.226 -e NS_MGMT_FINGER_PRINT="74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4" -e NS_ROUTABLE=FALSE -e NS_LB_ROLE=SERVER -e HOST=$HOSTNAME store/citrix/netscalercpx:12.0-53.6
此命令将部署 NetScaler CPX Docker 容器。下表介绍了 docker run 命令中使用的各个选项和环境变量:
选项和 NetScaler 特有的环境变量 | 说明 |
---|---|
-dt | 指定以守护程序方式运行的 NetScaler CPX 容器。 |
-privileged = true | 指定 NetScaler CPX 容器在特权模式下运行。 |
-p | 映射 NetScaler CPX 与主机之间的端口。默认情况下,Kubernetes Ingress 对象假定群集使用端口 80 和 443 进行访问。 |
-p 5080:80 | 将容器的端口 80 绑定到主机的端口 5080。 |
-p 5443:443 | 将容器的端口 443 绑定到主机的端口 5443。 |
-p 443:5443 | 将容器的端口 5443 绑定到主机的端口 443。 |
-p 80:5080 | 将容器的端口 5080 绑定到主机的端口 80。 |
-e NS_HTTP_PORT 或 -e NS_HTTPS_PORT | NetScaler CPX 特有的环境变量,允许您分配自定义端口用于对 NetScaler CPX 进行管理访问。NetScaler MAS 使用这些端口来访问 NetScaler CPX。 |
-e NS_MGMT_SERVER | NetScaler CPX 特有的允许您定义 NetScaler MAS 服务器 IP 地址的环境变量。部署 NetScaler CPX 时,将自动在使用此 IP 地址的 NetScaler MAS 服务器中注册。 |
-e NS_MGMT_FINGER_PRINT | NetScaler CPX 特有的用于定义 NetScaler MAS 指纹的环境变量。 |
-e NS_ROUTABLE=FALSE | NetScaler CPX 特有的用于指定 NetScaler CPX 容器在非 IP-per-container 模式下运行的环境变量。 |
-e NS_LB_ROLE=SERVER | NetScaler CPX 特有的、允许您指定 NetScaler CPX 容器用作 Ingress 资源的 NetScaler CPX 和 NetScaler MAS 的环境变量。 |
-e HOST=$HOSTNAME | NetScaler CPX 特有的、用于指定 NetScaler MAS 可以用来访问 NetScaler CPX 容器的主机名的环境变量。请确保主机名可以通过 NetScaler MAS 解析,否则,请提供 IP 地址。 |
在主机上部署 NetScaler CPX 实例后,该实例将自动在 NetScaler Management and Analytics System (MAS) 中注册。可以在 NetScaler MAS 用户界面中查看已部署的 NetScaler CPX 实例:Networks(网络)> Instances(实例)> NetScaler CPX。
在 Kubernetes 群集内部部署 NetScaler CPX 作为 Ingress 负载平衡器
要在 Kubernetes 群集内部部署 NetScaler CPX 作为 Ingress 负载平衡器,请将其部署为 Kubernetes 群集中的节点上的 Kubernetes 提供点。
在 Kubernetes 群集内部部署 NetScaler CPX 作为 Ingress 负载平衡器 1. (可选)如果要将 NetScaler CPX 部署为群集中的特定节点上的 Kubernetes 提供点,可以使用标签来指定节点。要标记 Kubernetes 节点,请使用 kubectl 命令:
kubectl label nodes <node_IP_address> node-role=<label_name>
示例:
kubectl label nodes 10.217.222.224 node-role=ingress
标记节点后,可以在提供点规范中指定标签,以便在节点中部署该提供点。 2. 将 NetScaler CPX 的提供点规范定义为在 Kubernetes 群集中部署 NetScaler CPX 容器作为提供点。提供点规范在 YAML 文件或 JSON 脚本中定义。YAML 文件或 JSON 脚本应包含容器类型、CPX 映像文件名、NetScaler MAS 服务器 IP 地址和 NetScaler MAS 服务器指纹。 下面是一个 NetScaler CPX 的提供点规范示例:
apiVersion: v1
kind: Pod
metadata:
name: cpx-ingress
annotations:
NETSCALER_AS_APP: "True"
spec:
containers:
- name: cpx-ingress
image: "cpx:12.0-41.16"
securityContext:
privileged: true
env:
- name: "EULA"
value: "yes"
- name: "NS_MGMT_SERVER"
value: "10.217.212.226"
- name: "NS_MGMT_FINGER_PRINT"
value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"
- name: "NS_ROUTABLE"
value: "FALSE"
- name: "NS_HTTP_PORT"
value: "5080"
- name: "NS_HTTPS_PORT"
value: "5443"
- name: "NS_LB_ROLE"
value: "SERVER"
- name: "HOST"
value: ""
- name: "KUBERNETES_TASK_ID"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name:"HOST"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
ports:
- containerPort: 80
hostPort: 5080
- containerPort: 443
hostPort: 5443
- containerPort: 5080
hostPort: 80
- containerPort: 5443
hostPort: 443
imagePullPolicy: Always
nodeSelector:
node-role: ingress
此外,还可以将提供点规范定义为部署 NetScaler CPX 作为复制控制器,以便在 NetScaler CPX 关闭时,Kubernetes 能够在群集中重新创建 NetScaler CPX 容器。下面是一个示例规范:
apiVersion: v1
kind: ReplicationController
metadata:
name: cpx-ingress
spec:
replicas: 1
selector:
app: cpx-ingress-device
template:
metadata:
name: cpx-ingress
annotations:
NETSCALER_AS_APP: "True"
labels:
app: cpx-ingress-device
spec:
containers:
- name: cpx-ingress
image: "cpx:12.0-41.16"
securityContext:
privileged: true
env:
- name: "EULA"
value: "yes"
- name: "NS_MGMT_SERVER"
value: "10.217.212.226"
- name: "NS_MGMT_FINGER_PRINT"
value: "74:EA:04:90:2C:FA:BF:7A:31:C9:52:64:D3:9C:BC:D3:O8:9F:9A:O4"
- name: "NS_ROUTABLE"
value: "FALSE"
- name: "NS_HTTP_PORT"
value: "5080"
- name: "NS_HTTPS_PORT"
value: "5443"
- name: "NS_LB_ROLE"
value: "SERVER"
- name: "HOST"
value: ""
- name: "KUBERNETES_TASK_ID"
valueFrom:
fieldRef:
fieldPath: metadata.name
- name:"HOST"
valueFrom:
fieldRef:
fieldPath: spec.nodeName
ports:
- containerPort: 80
hostPort: 5080
- containerPort: 443
hostPort: 5443
- containerPort: 5080
hostPort: 80
- containerPort: 5443
hostPort: 443
imagePullPolicy: Always
nodeSelector:
node-role: ingress
下表介绍了上例中使用的各节、参数和环境变量:
部分 | 参数 | 说明 |
---|---|---|
containers | name | NetScaler CPX 容器的名称。 |
image | 指定容器创建的映像。 | |
securityContext | privileged: true | 指定 NetScaler CPX 容器在特权模式下运行。 |
env | name: “EULA” | NetScaler CPX 特有的环境变量,这是验证您已阅读并理解此处提供的最终用户许可协议 (EULA) 所必需的:https://www.citrix.com/products/netscaler-adc/cpx-express.html。 |
name: “NS_MGMT_SERVER” | 允许您定义 NetScaler MAS 服务器 IP 地址的 NetScaler CPX 环境变量。部署 NetScaler CPX 时,将自动在使用此 IP 地址的 NetScaler MAS 服务器中注册。 | |
name: “NS_MGMT_FINGER_PRINT” | 允许您定义 NetScaler MAS 指纹的 NetScaler CPX 环境变量。 | |
name: “NS_ROUTABLE” | 允许您指定 NetScaler CPX 容器在非 IP-per-container 模式下运行的 NetScaler CPX 环境变量。请务必将值设置为 FALSE。 | |
name: “NS_HTTP_PORT” 或 name: “NS_HTTPS_PORT” | NetScaler CPX 特有的环境变量,允许您分配自定义端口用于对 NetScaler CPX 进行管理访问。NetScaler MAS 使用这些端口来访问 NetScaler CPX 容器。 | |
name: “NS_LB_ROLE” | 允许您指定 NetScaler CPX 容器用作 Ingress 资源的 NetScaler CPX 和 NetScaler MAS 的 NetScaler CPX 环境变量。 | |
name: “HOST” | NetScaler CPX 容器运行时所在的节点的主机名。NetScaler MAS 可以使用此主机名访问 NetScaler CPX 容器。 | |
name: “KUBERNETES_TASK_ID” | 标识 Kubernetes 群集中的 NetScaler CPX ID。 | |
name: “HOST” | NetScaler CPX 容器运行时所在的节点的主机名。NetScaler MAS 可以使用此主机名访问 NetScaler CPX。 | |
端口 | containerPort: 或 hostPort: | 映射 NetScaler CPX 容器与主机之间的端口。默认情况下,Kubernetes Ingress 对象假定群集使用端口 80 和 443 进行访问。 |
imagePullPolicy | 指定 Kubernetes 拉取图像的方式。 | |
nodeSelector | node-role: | 要在其上部署提供点的节点的标签。 |
3. 请使用以下命令部署 NetScaler CPX 的提供点规范:
kubectl create –f (fileName | scriptName)
示例:
kubectl create –f sample.yaml
在主机上部署 NetScaler CPX 实例后,该实例将自动在 NetScaler Management and Analytics System (MAS) 中注册。可以在 NetScaler MAS 用户界面中查看已部署的 NetScaler CPX 实例:Networks(网络)> Instances(实例)> NetScaler CPX。