Application Delivery Management

使用 StyleBook 创建基本负载均衡配置

在前面的示例中,您已构建了一个基本的 StyleBook 来创建负载均衡虚拟服务器。您可以将此 StyleBook 另存为其他名称,然后对其进行更新,以包含用于基本负载均衡配置的其他参数和组件。将此 StyleBook 文件保存为 basic-lb-config.yaml

在本节中,您将设计一个新的 StyleBook,用于创建包含负载均衡虚拟服务器、服务组和服务列表的负载均衡配置。它还将服务绑定到服务组,并将服务组绑定到虚拟服务器。

标头

要构建此 StyleBook,您必须首先更新标头部分。此部分与您为负载均衡虚拟服务器 StyleBook 创建的部分类似。在标头部分中,将 name 的值更改为 basic-lb-config。此外,更新 descriptiondisplay-name 以适当描述此 StyleBook。您不必更改 namespaceversion 值。由于您已更改名称,因此名称、命名空间和版本的组合将为系统中的此 StyleBook 创建一个唯一标识符。

name: basic-lb-config
description: 此 StyleBook 定义了一个简单的负载均衡配置。
display-name: 负载均衡配置
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->

导入 StyleBook

import-stylebooks 部分保持不变。它引用 netscaler.nitro.config 命名空间以使用 Nitro 配置对象。

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  prefix: ns
  version: "10.5"
<!--NeedCopy-->

参数

您必须更新参数部分,以添加两个附加参数来定义服务或服务器列表以及服务侦听的端口。前三个参数 name、ip 和 lb-alg 保持不变。

parameters:
 -
  name: name
  type: string
  label: 应用程序名称
  description: 应用程序配置的名称
  required: true
 -
  name: ip
  type: ipaddress
  label: 应用程序虚拟 IP (VIP)
  description: 客户端访问的应用程序 VIP
  required: true
 -
  name: lb-alg
  type: string
  label: 负载均衡算法
  description: 选择用于在应用程序服务器之间负载均衡客户端请求的负载均衡算法。
  allowed-values:
  -  ROUNDROBIN
  -  LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: 应用程序服务器 IP
  description: 此应用程序所有服务器的 IP 地址
  required: true
 -
  name: svc-port
  type: tcp-port
  label: 服务器端口
  description: 应用程序服务器上用于接收请求的 TCP 端口。
  default: 80
<!--NeedCopy-->

在此示例中,添加了参数 svc-servers 以接受表示应用程序后端服务器的服务 IP 地址列表。如 required: true 所示,这是一个强制参数。第二个参数 svc-port 表示服务器侦听的端口号。如果用户未指定,svc-port 参数的默认端口号为 80。

组件

您还必须更新组件部分,以定义附加组件,使其使用这两个新参数并构建完整的负载均衡配置。

对于此示例,您必须按如下方式编写组件部分:

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   name: $parameters.name + "-svcgrp"
   servicetype: HTTP
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $parent.parent.properties.name
   servicegroupname: $parent.properties.name
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $parent.properties.name
<!--NeedCopy-->

在此示例中,原始组件 lbvserver-comp(来自上一个示例)现在有一个名为 svcg-comp 的子组件。svcg-comp 组件包含两个子组件。将一个组件嵌套在另一个组件中,允许嵌套组件通过引用父组件中的属性来创建配置对象。嵌套组件可以为父组件中创建的每个对象创建一个或多个对象。

svcg-comp 组件用于通过使用为资源“servicegroup”的属性提供的值,在 NetScaler 实例上创建服务组。在此示例中,您为 servicetype 指定了静态值,而 name 则从输入参数获取其值。您通过使用 $parameters.name + “-svcgrp” 符号来引用参数部分中定义的参数 name,其中 -svcgrp 附加(连接)到用户定义的名称。

组件 svcg-comp 包含两个子组件:lbvserver-svg-binding-compmembers-svcg-comp

第一个子组件 lbvserver-svg-binding-comp 用于在其父组件创建的服务组与父组件的父组件创建的负载均衡虚拟服务器 (lbvserver) 之间绑定配置对象。$parent 符号(也称为父引用)用于引用父组件中的实体。例如,servicegroupname: $parent.properties.name 引用父组件 svcg-comp 创建的服务组,而 name: $parent.parent.properties.name 引用父组件的父组件 lbvserver-comp 创建的虚拟服务器。

members-svcg 组件用于在服务列表与父组件创建的服务组之间绑定配置对象。通过使用 StyleBook 的 repeat 构造来迭代参数 svc-servers 中指定的服务器列表,可以实现多个绑定配置对象的创建。在迭代期间,此 StyleBook 组件会为服务组中的每个服务(在 repeat-item 构造中称为 srv)创建一个类型为 servicegroup_servicegroupmember_binding 的 Nitro 配置对象,并将每个 Nitro 配置对象中的 ip 属性设置为相应服务器的 IP 地址。

通常,您可以在组件中使用 repeatrepeat-item 构造,使该组件构建多个相同类型的配置对象。您可以为 repeat-item 构造分配一个变量名,例如 srv,以指定迭代中的当前值。此变量名在同一组件或子组件的属性中以 $<varname> 的形式引用,例如 $srv。

在上面的示例中,您使用了组件的相互嵌套来轻松构建此配置。在这种特定情况下,组件嵌套并不是构建配置的唯一方法。您可以在不嵌套的情况下实现相同的结果,如下所示:

components:
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: str($parameters.svc-port)
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.name
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   name: $parameters.name + "-svcgrp"
   servicetype: HTTP
<!--NeedCopy-->

此处,所有组件都处于同一级别(即未嵌套),但实现的结果(生成的 NetScaler 配置)与之前使用的嵌套组件的结果相同。此外,StyleBook 中声明组件的顺序不影响配置对象的创建顺序。在此示例中,组件 svcg-complbvserver-comp 即使最后声明,也必须在构建第二个组件 lbvserver-svg-binding-comp 之前构建,因为第二个组件中存在对这些组件的前向引用。

注意

按照惯例,StyleBook、参数、替换、组件和输出的名称均为小写。当它们包含多个单词时,它们用“-”字符分隔。例如,“lb-bindings”、“app-name”、“rewrite-config”等。另一个约定是为组件名称添加“-comp”字符串后缀。

输出

您可以添加到新 StyleBook 的最后一个部分是输出部分,您可以在其中指定此 StyleBook 在用于创建配置后向其用户(或在其他 StyleBook 中)公开的内容。例如,您可以在输出部分中指定公开此 StyleBook 将创建的 lbvserver 和 servicegroup 配置对象。

outputs:
 -
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: 构建 Nitro lbvserver 配置对象的组件
 -
  name: servicegroup-comp
  value: $components.svcg-comp
  description: 构建 Nitro servicegroup 配置对象的组件
<!--NeedCopy-->

StyleBook 的输出部分是可选的。StyleBook 不需要返回输出。但是,通过将一些内部组件作为输出返回,它允许任何导入此 StyleBook 的 StyleBook 具有更大的灵活性,这在创建复合 StyleBook 时可以看到。

注意

最佳实践是在输出部分中公开 StyleBook 的整个组件,而不仅仅是组件的单个属性(例如,公开整个 $components.lbvserver-comp,而不是仅公开名称 $components.lbvserver-comp.properties.name)。此外,为输出添加描述,解释特定输出所代表的内容。

构建您的 StyleBook

现在您已经定义了此 StyleBook 的所有必需部分,将它们组合在一起以构建您的第二个 StyleBook。您已将此 StyleBook 文件保存为 basic-lb-config.yaml。Citrix 建议您使用 StyleBooks 页面中内置的 YAML 验证器来验证和导入 YAML 内容。

文件 basic-lb-config.yaml 的完整内容如下所示:

name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: 负载均衡配置
description: 此 StyleBook 定义了一个简单的负载均衡配置。
schema-version: "1.0"

import-stylebooks:
 -
  namespace: netscaler.nitro.config
  version: "10.5"
  prefix: ns
parameters:
 -
  name: name
  type: string
  label: 应用程序名称
  description: 为应用程序配置指定名称。
  required: true
 -
  name: ip
  type: ipaddress
  label: 应用程序虚拟 IP (VIP)
  description: 客户端访问的应用程序 VIP
  required: true
 -
  name: lb-alg
  type: string
  label: 负载均衡算法
  description: 选择用于在应用程序服务器之间负载均衡客户端请求的负载均衡算法(方法)。
  allowed-values:
  -  ROUNDROBIN
  -  LEASTCONNECTION
  default: ROUNDROBIN
 -
  name: svc-servers
  type: ipaddress[]
  label: 应用程序服务器 IP
  description: 此应用程序所有服务器的 IP 地址
  required: true

components:
 -
  name: lbvserver-comp
  type: ns::lbvserver
  properties:
   name: $parameters.name + "-lb"
   servicetype: HTTP
   ipv46: $parameters.ip
   port: 80
   lbmethod: $parameters.lb-alg
 -
  name: svcg-comp
  type: ns::servicegroup
  properties:
   servicegroupname: $parameters.name + "-svcgrp"
   servicetype: HTTP
 -
  name: lbvserver-svg-binding-comp
  type: ns::lbvserver_servicegroup_binding
  properties:
   name: $components.lbvserver-comp.properties.name
   servicegroupname: $components.svcg-comp.properties.servicegroupname
 -
  name: members-svcg-comp
  type: ns::servicegroup_servicegroupmember_binding
  repeat: $parameters.svc-servers
  repeat-item: srv
  properties:
   ip: $srv
   port: 80
   servicegroupname: $components.svcg-comp.properties.servicegroupname
outputs:
-
  name: lbvserver-comp
  value: $components.lbvserver-comp
  description: 构建 Nitro lbvserver 配置对象的组件
-
  name: servicegroup-comp
  value: $components.svcg-comp
  description: 构建 Nitro servicegroup 配置对象的组件
<!--NeedCopy-->

要开始使用您的 StyleBook 创建配置,您必须将其导入 NetScaler ADM,然后使用它。有关详细信息,请参阅如何使用用户定义的 StyleBook

您还可以将此 StyleBook 导入其他 StyleBook,并使用其属性,如下一节所述。

使用 StyleBook 创建基本负载均衡配置