Product Documentation

使用 NetScaler CPX 在 Kubernetes 环境中配置负载平衡东西向流量

2017 年 10 月 5 日

可以在 Kubernetes 群集中部署 NetScaler CPX 以对群集中容器化的应用程序进行负载平衡。以下 Kubernetes 版本支持 NetScaler CPX:

  • 1.5.x
  • 1.6.x

有关 Kubernetes 的信息,请参阅 http://kubernetes.io/docs/

默认情况下,在 Kubernetes 群集中部署 NetScaler CPX 时,它将替换 Kubernetes 的提供基础负载平衡功能的 kube 代理。除负载平衡功能外,使用 NetScaler CPX 替换 kube 代理后,还可以使用 NetScaler Management and Analytics System (MAS) 执行以下操作:

  • 查看群集中的应用程序环境
  • 管理和监视群集中的 NetScaler CPX 实例
  • 使用 Stylebook 功能简化为应用程序管理复杂 NetScaler 配置的任务

有关 NetScaler MAS 的详细信息,请参阅 NetScaler Management and Analytics System 产品文档

NetScaler CPX 如何对 Kubernetes 环境中的东西向流量进行负载平衡

部署 Kubernetes 群集后,必须通过提供 NetScaler MAS 中的 Kubernetes 环境的详细信息将群集与 NetScaler MAS 相集成。NetScaler MAS 监视 Kubernetes 资源中的变更,例如服务、端点和入口规则。

在 Kubernetes 群集中部署 NetScaler CPX 实例时,该实例会自动在 NetScaler MAS 中注册。在注册过程中,NetScaler MAS 会了解可以在其上访问 NetScaler CPX 实例的 NetScaler CPX 实例 IP 地址和端口,以使用 NITRO REST API 对其进行配置。

NetScaler MAS 中的 Stylebook 引擎处理 NetScaler MAS 从 Kubernetes 收集的所有信息,例如服务、端点和入口规则。使用现有已置备的 Stylebook (com.citrix.adc.stylebooks/1.0/cs-lb-mon) 时,Stylebook 引擎将生成 NetScaler 特定的配置(例如负载平衡所需的虚拟服务器和服务组),并将配置应用到 NetScaler CPX 实例。有关 Stylebook 的详细信息,请参阅 Stylebook

下图显示了 NetScaler CPX 如何对 Kubernetes 群集中的东西向流量进行负载平衡。 本地化后的图片

在此示例中,Kubernetes 群集的节点 1 和节点 2 中都包含前端服务和后端服务的实例。NetScaler CPX 实例部署在节点 1 和节点 2 中时,NetScaler CPX 实例将自动在 NetScaler MAS 中注册。必须通过在 NetScaler MAS 中配置 Kubernetes 群集详细信息来手动将 Kubernetes 群集与 NetScaler MAS 相集成。

客户端请求前端服务时,入口资源将对两个节点上的前端服务的实例之间的请求进行负载平衡。前端服务的实例需要来自群集中的后端服务的信息时,会将请求定向到其节点中的 NetScaler CPX 实例。该 NetScaler CPX 实例将对群集中的后端服务之间的请求进行负载平衡,从而提供东西向通信流。

在 Kubernetes 群集中的节点上部署 NetScaler CPX 实例

可以在 Kubernetes 群集中的节点上部署 NetScaler CPX 实例作为 Kubernetes 提供点。可以部署 NetScaler CPX 实例作为守护程序集或清单。

  • 守护程序集 - 部署 NetScaler CPX 实例作为守护程序集资源允许您将 NetScaler CPX 实例部署为节点中的提供点,还可以确保在加入 Kubernetes 群集的新节点上部署 NetScaler CPX 实例。新节点加入群集时,将在节点上自动安装在守护程序集中指定的 NetScaler CPX 实例。
  • 清单 – Kubernetes 清单是 YAML 或 JSON 格式的包含 Kubernetes 对象部署和配置说明的文件。可以创建 NetScaler CPX 实例的 Kubernetes 清单,并将其放置在节点上的特定目录中。每个节点上的 kubelet 将按照清单的指示监视此目录并创建对象(即,NetScaler CPX 实例)。

必备条件

对于此类型的部署,请确保:

本地化后的图片

部署 NetScaler CPX 实例作为守护程序集

使用守护程序集方法时,可以部署 NetScaler CPX 实例作为节点上的提供点,然后自动部署为加入到 Kubernetes 群集中的每个新节点上的提供点。

要部署 NetScaler CPX 实例作为守护程序集,必须编写 YAML 文件或 JSON 脚本。该文件或脚本指定容器类型、CPX 映像文件名、NetScaler MAS 服务器 IP 地址和 NetScaler MAS 服务器指纹。

下面是一个示例 YAML 文件:

    apiVersion: extensions/v1beta1

    kind: DaemonSet

    metadata:

      name: cpx

    spec:

      template:

        metadata:

          name: cpx

          labels:

            app: cpx-daemon

          annotations:

            NETSCALER_AS_APP: "True"

        spec:

          hostNetwork: true

          containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

              securityContext:

                 privileged: true

              env:

              - name: "EULA"

                value: "yes"

              - name: "NS_NETMODE"

                value: "HOST"

              - name: "kubernetes_url"

                value: "https://10.217.212.231:6443"

              - 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: "KUBERNETES_TASK_ID"

                valueFrom:

                   fieldRef:

                      fieldPath: metadata.name

              volumeMounts:

              imagePullPolicy: Always

下表介绍了示例守护程序集中使用的各节、参数和环境变量:

部分 参数 说明
container name NetScaler CPX 容器的名称。
  image 指定容器创建的映像。
SecurityContext privileged: true 指定在特权模式下运行的 NetScaler CPX 容器。
  name: “EULA” NetScaler CPX 特有的环境变量,这是验证您已阅读并理解此处提供的最终用户许可协议 (EULA) 所必需的:https://www.citrix.com/products/netscaler-adc/cpx-express.html
  name: “NS_NETMODE” NetScaler CPX 特有的、允许您指定 NetScaler CPX 实例在主机模式下启动的环境变量。实例在主机模式下启动后,将在主机上配置 4 个默认 iptable 规则以便对实例进行管理访问。它将使用以下端口:9995 用于 HTTP、9996 用于 HTTPS、9997 用于 SSH 以及 9998 用于 SNMP。此外,如果要指定其他端口,可以使用以下环境变量:-e NS_HTTP_PORT、-e NS_HTTPS_PORT、-e NS_SSH_PORT 和 -e NS_SNMP_PORT。
  name: “kubernetes_url” NetScaler CPX 特有的用于指定 Kubernetes URL 的环境变量。
  name: “NS_MGMT_SERVER” NetScaler CPX 特有的用于描述 NetScaler MAS 服务器 IP 地址的环境变量。部署 NetScaler CPX 实例时,将自动在使用此 IP 地址的 NetScaler MAS 服务器中注册。
  name: “NS_MGMT_FINGER_PRINT” NetScaler CPX 特有的用于定义 NetScaler MAS 指纹的环境变量。
  name: “NS_ROUTABLE” NetScaler CPX 特有的用于指定 NetScaler CPX 容器是否在非 IP-per-container 模式下运行的环境变量。请务必将值设置为 FALSE。
  name: “KUBERNETES_TASK_ID” 标识 Kubernetes 群集中的 NetScaler CPX ID。
imagePullPolicy   指定 Kubernetes 拉取图像的方式。

使用清单部署 NetScaler CPX 实例

Kubernetes 清单是 YAML 或 JSON 格式的包含 Kubernetes 对象部署和配置说明的文件。可以创建 NetScaler CPX 实例的 Kubernetes 清单,并将其放置在节点上的特定目录中。每个节点上的 kubelet 将按照清单的指示监视此目录并创建对象(即,NetScaler CPX 实例)。

下面是一个示例清单:

    apiVersion: v1

    kind: Pod

    metadata:

        name: cpx

    annotations:

        NETSCALER_AS_APP: "True"

    spec:

        hostNetwork: true

        containers:

            - name: cpx

              image: "<repository>/cpx:12.0-64"

        securityContext:

        privileged: true

        env:

            - name: "EULA"

            value: "yes”

            - name: "NS_NETMODE"

            value: "HOST"

            - name: "kubernetes_url"

            value: "https://10.217.212.231:6443"

            - 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: "KUBERNETES_TASK_ID"

            valueFrom:

                fieldRef:

                fieldPath: metadata.name

        imagePullPolicy: Always
部分 参数 说明
container name NetScaler CPX 容器的名称。
  image 指定容器创建的映像。
SecurityContext privileged: true 指定在特权模式下运行的 NetScaler CPX 容器。
  name: “EULA” NetScaler CPX 特有的环境变量,这是验证您已阅读并理解此处提供的最终用户许可协议 (EULA) 所必需的:https://www.citrix.com/products/netscaler-adc/cpx-express.html
  name: “NS_NETMODE” NetScaler CPX 特有的、允许您指定 NetScaler CPX 实例在主机模式下启动的环境变量。实例在主机模式下启动后,将在主机上配置 4 个默认 iptable 规则以便对实例进行管理访问。它将使用以下端口:9995 用于 HTTP、9996 用于 HTTPS、9997 用于 SSH 以及 9998 用于 SNMP。此外,如果要指定其他端口,可以使用以下环境变量:-e NS_HTTP_PORT、-e NS_HTTPS_PORT、-e NS_SSH_PORT 和 -e NS_SNMP_PORT。
  name: “kubernetes_url” NetScaler CPX 特有的用于指定 Kubernetes URL 的环境变量。
  name: “NS_MGMT_SERVER” NetScaler CPX 特有的用于描述 NetScaler MAS 服务器 IP 地址的环境变量。部署 NetScaler CPX 实例时,将自动在使用此 IP 地址的 NetScaler MAS 服务器中注册。
  name: “NS_MGMT_FINGER_PRINT” NetScaler CPX 特有的用于定义 NetScaler MAS 指纹的环境变量。
  name: “NS_ROUTABLE” NetScaler CPX 特有的用于指定 NetScaler CPX 容器是否在非 IP-per-container 模式下运行的环境变量。请务必将值设置为 FALSE。
  name: “KUBERNETES_TASK_ID” 标识 Kubernetes 群集中的 NetScaler CPX ID。
imagePullPolicy   指定 Kubernetes 拉取图像的方式。

使用 NetScaler CPX 在 Kubernetes 环境中配置负载平衡东西向流量