Citrix Application Delivery Management

实例角色

在 Citrix Application Delivery Management (ADM) 中,可能存在一种情况:您必须为单个应用程序配置多个 Citrix ADC 实例,但每个 ADC 实例需要在其上部署不同的配置。这种情况下的一个示例是默认的 Microsoft Skype for Business 样本。

样书目前支持创建配置包并在多个 Citrix ADC 实例上应用相同配置的功能。在所有 ADC 实例上配置相同的情况下,可以称为对称配置。

现在,借助 StyleBooks 的 “实例角色” 功能,您可以创建不对称配置,即可应用于多个 ADC 实例的配置包,但在不同的 ADC 实例上使用不同的配置。

当使用带实例角色的样书功能创建配置包时,可以为配置包中的每个 ADC 实例分配不同的角色。此角色决定 ADC 实例将接收的配置包的配置对象。

注意事项:

  • 样本中的一组实例角色是在创建样本时定义的。
  • 创建或更新配置包时,角色会分配给特定 ADC 实例。

目标角色部分

在样书中引入了一个名为 “目标角色” 的新部分,其中声明了样书支持的所有角色。

此部分通常放在样书的 “导入样书” 部分之后和参数部分之前。

在以下样书示例中,在 “目标角色” 部分中定义了两个角色-A 和 B。

target-roles:-name:Aname:Bmin-targets:2max-targets:5<!——NeedCopy >

您可以看到角色 B 还定义了两个可选子属性,即最小目标和最大目标。

尽管这两个子属性是可选的,但最小目标指定在使用此样书创建配置包时应分配此角色的 ADC 实例的最小强制数量,而 max-target 则指定创建时可分配此角色的 ADC 实例的最大数量来自此样书的配置包。

如果未指定这些子属性,则可以为该角色配置的 ADC 实例数量没有限制。如果最小目标 = 0,则与该角色关联的配置是可选的,如果最小目标 = 1,则该配置是必需的,并且至少需要为该角色配置一个 ADC 实例。

角色 “默认”

除了明确定义的角色之外,还有一个所有样本都具有的隐式角色,并且该角色被称为默认角色。此角色可以像样本中的任何其他角色一样使用。创建配置包时,如果没有为 ADC 实例分配特定角色,则该实例将隐式分配给 “默认” 角色。实例现在将接收由具有 “默认” 角色的组件生成的任何配置对象。

具有角色的组件

定义样书可以支持的角色(包括角色 “默认”)后,可以在样书的组件部分中使用这些角色。如果希望仅在发挥特定角色的 ADC 实例上部署组件,则可以将角色属性指定为组件的一部分,如以下组件示例所示:

-name:C1type:ns::lbvserverroles:-Aproperties:name:lb1servicetype:HTTPipv46:1.1.1.1port:80<!——NeedCopy >

在上面的示例中,组件生成一个 “lbvserver”,该 “lbvserver” 将在扮演角色 A 的实例上部署。请注意,组件的角色属性是一个列表,可以为组件分配多个角色。这些角色将在样书的 “目标角色” 部分中声明。

注意:如果样书中的某个组件未指定角色属性,则无论其角色如何,都会在所有 Citrix ADC 实例上创建由该组件生成的配置对象。您可以有效地使用此功能创建可应用于配置包的所有实例的配置对象。

让我们假设有一个定义了两个角色的样书-A 和 B,其中包含四个组件。

  • 组件 C1 具有角色 A 和 B
  • 组件 C2 具有作用 B
  • 组件 C3 没有定义任何角色
  • 组件 C4 具有 “默认” 的角色

本样本的组成部分转载如下:

components:-name:C1type:ns::lbvserverroles:-A-Bproperties:name:lb1servicetype:HTTPipv46:1.1.1.1port:80-name:C2type:ns::lbvserverroles:-Bproperties:name:lb2servicetype:HTTPipv46:12.12.12.12port:80-name:C3type:ns::lbvserverproperties:name:lb3servicetype:HTTPipv46:13.13.13.13port:80-name:C4type:ns::lbvserverroles:-defaultproperties:name:lb4servicetype:HTTPipv46:14.14.14.14port:80<!——NeedCopy >

请注意,组件 C3 没有定义角色,这意味着组件将部署在所有实例上,无论其角色如何。另一方面,组件 C4 具有 “默认” 角色,这意味着它应用于没有分配明确角色的任何实例。

现在,考虑您想使用此样书创建一个配置包,然后将其部署在五个 ADC 实例上。在此阶段,您可以通过以下方式将角色分配给实例:

  • 角色 A 分配给实例 T1、T2、T3 和 T4
  • 角色 B 分配给实例 T2、T3 和 T4
  • 实例 T5 未分配任何角色

下图总结了角色分配,并显示了每个 ADC 实例将收到的结果配置:

本地化后的图片

请注意,组件 C3 部署在所有实例上,而不考虑角色如何,因为此组件没有角色属性。

下图显示了创建示例配置包时角色的分配:

本地化后的图片

在创建配置包时,您还可以使用 “Dry Run” 功能来查看和验证角色分配的正确性以及将在每个 ADC 实例上创建的配置对象。

构建您的样本

样本 “演示目标角色” 的全部内容如下:

---name:demo-target-rolesnamespace:com.example.stylebooksversion:"1.2"schema-version:"1.0"import-stylebooks:-namespace:netscaler.nitro.configprefix:nsversion:"10.5"parameters:-name:appnametype:stringrequired:truekey:truetarget-roles:-name:A-name:Bmin-targets:2max-targets:5components:-name:C1type:ns::lbvserverroles:-A-Bproperties:name:lb1servicetype:HTTPipv46:1.1.1.1port:80-name:C2type:ns::lbvserverroles:-Bproperties:name:lb2servicetype:HTTPipv46:12.12.12.12port:80-name:C3type:ns::lbvserverproperties:name:lb3servicetype:HTTPipv46:13.13.13.13port:80-name:C4type:ns::lbvserverroles:-defaultproperties:name:lb4servicetype:HTTPipv46:14.14.14.14port:80<!——NeedCopy >

下图显示了为示例配置包创建的对象:

本地化后的图片

使用 API

使用 REST API 时,您可以在创建或更新配置包时为每个 ADC 实例指定角色,如下所示。在 “目标” 块中,指定要在其上部署单个组件的特定 Citrix ADC 实例的 UUID。

"targets":[{"id":"","roles":["一个“]},]<!——NeedCopy >

我们提供了一个完整的示例 REST API 供您参考。

POST />/stylebook/nitro/v1/config/stylebooks/com.example.stylebooks/1.2/demo-target-roles/configpacks

{ "configpack": { "parameters": { "appname": "app1" }, "targets": [ { "id": "f53c35c3-a6bc-4619-b4b4-ad7ab6a94ddb", "roles": ["A"] }, { "id": "c08caa1c-1011-48aa-b8c7-9aed1cd38ed0", "roles": ["A", "B"] }, { "id": "88ac90cb-a5cb-445b-8617-f83d0ef6174e", "roles": ["A", "B"] }, { "id": "bf7b0f74-7a83-4856-86f4-dcc951d3141e", "roles": ["A", "B"] }, { "id": "fa5d97ab-ca29-4adf-b451-06e7a234e3da", "roles": ["default"] } ] } } 
实例角色