将 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 服务器的指纹。请执行以下操作以获取指纹:
    1. 登录 NetScaler MAS。
    2. 导航到 System(系统)> System Administration(系统管理),然后单击 View SSL Certificate(查看 SSL 证书)。
    3. 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

本地化后的图片