使用 StyleBook 创建基本负载平衡配置
在前面的示例中,您已构建了一个基本 StyleBook 来创建负载平衡虚拟服务器。您可以将此 StyleBook 另存为其他名称,然后更新它以包含用于基本负载平衡配置的其他参数和组件。将此 StyleBook 文件保存为 basic-lb-config.yaml。
在本节中,您将设计一个新的 StyleBook,它将创建一个包含负载平衡虚拟服务器、服务组和服务列表的负载平衡配置。它还将服务绑定到服务组,并将服务组绑定到虚拟服务器。
标头
要构建此 StyleBook,您必须首先更新标头部分。此部分与您为负载平衡虚拟服务器 StyleBook 创建的部分类似。在标头部分中,将 name 的值更改为 basic-lb-config。此外,请适当更新 description 和 display-name 以描述此 StyleBook。您无需更改 namespace 和 version 值。因为您已更改名称,所以名称、命名空间和版本的组合在此系统中为 StyleBook 创建了一个唯一标识符。
name: basic-lb-config
description: This StyleBook defines a simple load balancing configuration.
display-name: Load Balancing Configuration
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-->
参数
您必须更新 parameters 部分以添加两个附加参数,用于定义服务或服务器列表以及服务侦听的端口。前三个参数 name、ip 和 lb-alg 保持不变。
parameters:
-
name: name
type: string
label: Application Name
description: Name of the application configuration
required: true
-
name: ip
type: ipaddress
label: Application Virtual IP (VIP)
description: Application VIP that the clients access
required: true
-
name: lb-alg
type: string
label: LoadBalancing Algorithm
description: Choose the load balancing algorithm used for load balancing client requests between the application servers.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Application Server IPs
description: The IP addresses of all the servers of this application
required: true
-
name: svc-port
type: tcp-port
label: Server Port
description: The TCP port open on the application servers to receive requests.
default: 80
<!--NeedCopy-->
在此示例中,添加了参数 svc-servers 以接受表示应用程序后端服务器的服务 IP 地址列表。这是一个强制参数,如 required: true 所示。第二个参数 svc-port 表示服务器侦听的端口号。如果用户未指定,svc-port 参数的默认端口号为 80。
组件
您还必须更新 components 部分以定义附加组件,以便它们使用两个新参数并构建完整的负载平衡配置。
对于此示例,您必须按如下方式编写 components 部分:
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
components:
-
name: svcg-comp
type: ns::servicegroup
properties:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
components:
-
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” 符号引用 parameters 部分中定义的参数 name,其中 -svcgrp 附加(连接)到用户定义的名称。
svcg-comp 组件有两个子组件:lbvserver-svg-binding-comp 和 members-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 地址。
通常,您可以在组件中使用 repeat 和 repeat-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-comp 和 lbvserver-comp,即使最后声明,也必须在构建第二个组件 lbvserver-svg-binding-comp 之前构建,因为第二个组件中存在对这些组件的前向引用。
注意
按照惯例,StyleBook、参数、替换、组件和输出的名称都使用小写。当它们包含多个单词时,它们用“-”字符分隔。例如,“lb-bindings”、“app-name”、“rewrite-config”等。另一个约定是将组件名称后缀为“-comp”字符串。
输出
您可以添加到新 StyleBook 的最后一个部分是 outputs 部分,您可以在其中指定此 StyleBook 在用于创建配置后向其用户(或在其他 StyleBook 中)公开的内容。例如,您可以在 outputs 部分中指定公开将由 StyleBook 创建的 lbvserver 和 servicegroup 配置对象。
outputs:
-
name: lbvserver-comp
value: $components.lbvserver-comp
description: The component that builds the Nitro lbvserver configuration object
-
name: servicegroup-comp
value: $components.svcg-comp
description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->
StyleBook 的 outputs 部分是可选的。StyleBook 不需要返回输出。但是,通过将一些内部组件作为输出返回,它允许导入此 StyleBook 的任何 StyleBook 具有更大的灵活性,正如您在创建复合 StyleBook 时所看到的那样。
注意
最佳实践是在
outputs部分中公开 StyleBook 的整个组件,而不是仅仅公开组件的单个属性(例如,公开整个$components.lbvserver-comp而不是仅仅公开名称$components.lbvserver-comp.properties.name)。此外,请为输出添加描述,解释特定输出所代表的内容。
构建您的 StyleBook
现在您已经定义了此 StyleBook 的所有必需部分,将它们全部组合起来以构建您的第二个 StyleBook。您已经将此 StyleBook 文件保存为 basic-lb-config.yaml。我们建议您使用 StyleBooks 页面中内置的 YAML 验证器来验证和导入 YAML 内容。
文件 basic-lb-config.yaml 的完整内容如下:
name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"
import-stylebooks:
-
namespace: netscaler.nitro.config
version: "10.5"
prefix: ns
parameters:
-
name: name
type: string
label: Application Name
description: Give a name to the application configuration.
required: true
-
name: ip
type: ipaddress
label: Application Virtual IP (VIP)
description: The Application VIP that clients access
required: true
-
name: lb-alg
type: string
label: LoadBalancing Algorithm
description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Application Server IPs
description: The IP addresses of all the servers of this application
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: The component that builds the Nitro lbvserver configuration object
-
name: servicegroup-comp
value: $components.svcg-comp
description: The component that builds the Nitro servicegroup configuration object
<!--NeedCopy-->
要开始使用您的 StyleBook 创建配置,您必须将其导入到 NetScaler Console,然后使用它。有关更多信息,请参阅如何使用用户定义的 StyleBook。
您还可以将此 StyleBook 导入到其他 StyleBook 中,并使用其属性,如下一节所述。