创建基本负载平衡配置的样本
在上一个示例中,您已构建了一个基本样本来创建负载平衡虚拟服务器。可以用不同的名称保存此样本,然后对其更新以包含用于基本负载平衡配置的其他参数和组件。将此样本文件保存为basic-lb-config.yaml。
在本节中,将设计一个新样本,用于创建由负载平衡虚拟服务器、服务组和一组服务组成的负载平衡配置。它还将服务绑定至服务组,并将服务组绑定至虚拟服务器。
标题
要构建此样本,必须先更新标头部分。此部分与为负载平衡虚拟服务器样本创建的标头部分类似。在标头部分中,将name值更改为 basic-lb-config。此外,更新description和display-name以适当说明此样本。不必更改namespace和version值。因为已更改了名称,所以 name、namespace 和 version 组合构成了此样本在系统中的唯一标识符。
name:basic-lb-confignamespace:com.example.stylebooksversion:"0.1"display-name:Load Balancing Configurationdescription:This StyleBook defines a simple load balancing configuration.schema-version:"1.0"
导入样本
import-stylebooks 部分保持不变。它引用 netscaler.nitro.config 命名空间以使用 NITRO 配置对象。
import-stylebooks:-namespace:netscaler.nitro.configprefix:nsversion:"10.5"
参数
必须更新 parameters 部分以添加两个其他参数来定义一组服务或服务器以及服务侦听的端口。前三个参数name
、ip
和lb-alg
保持不变。
parameters:-name:nametype:stringlabel:Application Namedescription:Give a name to the application configuration.required:true-name:iptype:ipaddresslabel:Application Virtual IP (VIP)description:The Application VIP that clients accessrequired:true-name:lb-algtype:stringlabel:LoadBalancing Algorithmdescription:Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.allowed-values:-ROUNDROBIN-LEASTCONNECTIONdefault:ROUNDROBIN-name:svc-serverstype:ipaddress[]label:Application Server IPsdescription:The IP addresses of all the servers of this applicationrequired:true-name:svc-porttype:tcp-portlabel:Server Portdescription:The TCP port open on the application servers to receive requests.default:80
在此示例中,添加参数svc-server以接受代表应用程序后端服务器的服务的 IP 地址列表。这是必需参数,由required: true指明。第二个参数svc-port表示服务器侦听的端口号。如果用户未指定svc-port
参数,默认端口号为 80。
组件
必须还要更新 components 部分以定义其他组件,以便它们可以使用两个新参数并构建完整的负载平衡配置。
例如,必须按如下所示编写 components 部分:
components:-name:lbvserver-comptype:ns::lbvserverproperties:name:$parameters.name + "-lb"servicetype:HTTPipv46:$parameters.ipport:80lbmethod:$parameters.lb-algcomponents:-name:svcg-comptype:ns::servicegroupproperties:name:$parameters.name + "-svcgrp"servicetype:HTTPcomponents:-name:lbvserver-svg-binding-comptype:ns::lbvserver_servicegroup_bindingproperties:name:$parent.parent.properties.nameservicegroupname:$parent.properties.name-name:members-svcg-comptype:ns::servicegroup_servicegroupmember_bindingrepeat:$parameters.svc-serversrepeat-item:srvproperties:ip:$srvport:str($parameters.svc-port)servicegroupname:$parent.properties.name
在此示例中,原始组件lbvserver-comp(来自上一个示例)现在有一个名为svcg-comp的子组件。而且,svcg-comp组件中有两个子组件。通过在一个组件里面嵌套另一个组件,嵌套的组件可以通过引用父组件中的属性来创建配置对象。嵌套的组件可以为父组件中创建的每个对象创建一个或多个对象。
svcg-comp组件用于使用为资源属性提供的值在 Citrix ADC 实例上创建服务组servicegroup
。在此示例中,您正在为指定静态值servicetype
,而 name 从输入参数中获取其值。通过使用$parameters.name + “-svcgrp”表示法来引用在参数部分中定义的参数名称,其中 “-svcgrp” 附加(连接)到用户定义的名称。
组件svcg-comp有两个子组件,lbvserver-svg-binding-comp和members-svcg-comp。
第一个子组件lbvserver svg-binding-comp用于在父组件创建的服务组和父组件创建的负载平衡虚拟服务器 (lbvserver
) 之间绑定配置对象。$parent 表示法(也称为父引用)用于引用父组件中的实体。例如,服务组名称:$parent.properties.name指的是父组件svcg-comp创建的服务组,名称:$parent.parent.properties.name指的父组件lbvserver 创建的虚拟服务器-补偿。
成员 svcg组件用于将服务列表之间的配置对象绑定到父组件创建的服务组。创建多个绑定配置对象是通过使用样书的重复构造迭代参数svc-servers中指定的一组服务器来完成。在迭代期间,此 StyleBook 组件为服务组中的每个服务(在repeat-item构造中称为srv
)创建一个servicegroup_servicegroupmember_binding类型的 NITRO 配置对象,并将每个 NITRO 配置对象中的ip属性设置为相应服务器的 IP 地址。
通常,您可以使用组件中的重复项和重复项构造来使该组件构建同一类型的多个配置对象。例如,您可以为repeat-item构造指定变量名称,例如srv
,以指定迭代中的当前值。此变量名称在相同组件的属性或子组件中引用$
,例如 $srv。
在上述示例中,使用了在组件中相互嵌套组件来轻松构造此配置。在这种情况下,组件嵌套并不是构建配置的唯一方法。您可以在不嵌套的情况下获得相同的结果,如下所示:
components:-name:lbvserver-comptype:ns::lbvserverproperties:name:$parameters.name + "-lb"servicetype:HTTPipv46:$parameters.ipport:80lbmethod:$parameters.lb-alg-name:svcg-comptype:ns::servicegroupproperties:servicegroupname:$parameters.name + "-svcgrp"servicetype:HTTP-name:lbvserver-svg-binding-comptype:ns::lbvserver_servicegroup_bindingproperties:name:$components.lbvserver-comp.properties.nameservicegroupname:$components.svcg-comp.properties.servicegroupname-name:members-svcg-comptype:ns::servicegroup_servicegroupmember_bindingrepeat:$parameters.svc-serversrepeat-item:srvproperties:ip:$srvport:80servicegroupname:$components.svcg-comp.properties.servicegroupname
在这里,所有组件都处于同一级别(即它们未嵌套),但实现的结果(生成的 Citrix ADC 配置)与之前使用的嵌套组件的结果相同。此外,样本中组件的声明顺序不影响配置对象的创建顺序。在此示例中,组件svcg-comp和lbvserver-comp,即使声明为最后,也必须在构建第二个组件lbvserver-svg-binding comp之前构建,因为在第二个组件中存在对这些组件的正向引用。
注意
按约定,样本的名称、parameters、substitutions、components 和 outputs 采用小写。如果它们包含多个词语,词语以“-”字符分隔。例如
lb-bindings
、app-name
、rewrite-config
等。另一个惯例是用-comp
字符串作为组件名称的后缀。
输出
可以添加到新样本的最后一个部分是 outputs 部分,在其中指定在此样本用于创建配置后,此样本向其用户呈现的内容(或在其他样本中)。例如,您可以在输出部分中指定lbvserver
以显示将由此样书创建的和servicegroup
配置对象。
outputs:-name:lbvserver-compvalue:$components.lbvserver-compdescription:The component that builds the Nitro lbvserver configuration object-name:servicegroup-compvalue:$components.svcg-compdescription:The component that builds the Nitro servicegroup configuration object
样书的 outputs 部分是可选的。样本不必返回输出。但是,如果将一些内部组件作为输出返回,导入此样本的任何样本就可以有更大的灵活性,这在创建复合样本时可以看到。
注意
最好在 outputs 部分呈现样本的整个组件,而不仅仅是组件的单个属性(例如,呈现整个 $components.lbvserver-comp,而不仅仅是名称 $components.lbvserver-comp.properties.name)。另外在输出中添加说明,解释特定输出表示的内容。
构建您的样本
现在已定义了此样本的所有必要部分,将它们全部汇聚在一起即可构建您的第二个样本。已将此样本文件保存为basic-lb-config.yaml。Citrix 建议您使用样本中的内置 YAML 验证程序来验证和导入 YAML 内容。
basic-lb-config.yaml文件的完整内容再现如下:
name:basic-lb-confignamespace:com.example.stylebooksversion:"0.1"display-name:Load Balancing Configurationdescription:This StyleBook defines a simple load balancing configuration.schema-version:"1.0"import-stylebooks:-namespace:netscaler.nitro.configversion:"10.5"prefix:nsparameters:-name:nametype:stringlabel:Application Namedescription:Give a name to the application configuration.required:true-name:iptype:ipaddresslabel:Application Virtual IP (VIP)description:The Application VIP that clients accessrequired:true-name:lb-algtype:stringlabel:LoadBalancing Algorithmdescription:Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.allowed-values:-ROUNDROBIN-LEASTCONNECTIONdefault:ROUNDROBIN-name:svc-serverstype:ipaddress[]label:Application Server IPsdescription:The IP addresses of all the servers of this applicationrequired:true-name:svc-porttype:tcp-portlabel:Server Portdescription:The TCP port open on the application servers to receive requests.default:80components:-name:lbvserver-comptype:ns::lbvserverproperties:name:$parameters.name + "-lb"servicetype:HTTPipv46:$parameters.ipport:80lbmethod:$parameters.lb-alg-name:svcg-comptype:ns::servicegroupproperties:servicegroupname:$parameters.name + "-svcgrp"servicetype:HTTP-name:lbvserver-svg-binding-comptype:ns::lbvserver_servicegroup_bindingproperties:name:$components.lbvserver-comp.properties.nameservicegroupname:$components.svcg-comp.properties.servicegroupname-name:members-svcg-comptype:ns::servicegroup_servicegroupmember_bindingrepeat:$parameters.svc-serversrepeat-item:srvproperties:ip:$srvport:80servicegroupname:$components.svcg-comp.properties.servicegroupnameoutputs:-name:lbvserver-compvalue:$components.lbvserver-compdescription:The component that builds the Nitro lbvserver configuration object-name:servicegroup-compvalue:$components.svcg-compdescription:The component that builds the Nitro servicegroup configuration object
要开始使用样本创建配置,您必须将其导入 Citrix ADM,然后使用它。有关详细信息,请参阅如何使用用户定义的样本。
还可以将此样本导入其他样本并使用其属性,如下一节中所述。