Application Delivery Management

实例角色

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

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

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

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

注意事项:

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

目标角色部分

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

此部分通常位于样书的“import-StyleBooks”部分之后和参数部分之前。

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

target-roles:

  -
   name: A
   name: B
     min-targets: 2
     max-targets: 5
<!--NeedCopy-->

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

尽管这两个子属性是可选的,但最小目标指定了从该样书创建配置包时应分配此角色的最小强制性ADC实例数,而最大目标则指定从该样书创建配置包时可以分配此角色的最大ADC实例数。

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

角色“默认”

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

具有角色的组件

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

  -
    name: C1
    type: ns::lbvserver
    roles:
      - A
    properties:
      name: lb1
      servicetype: HTTP
      ipv46: 1.1.1.1
      port: 80
<!--NeedCopy-->

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

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

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

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

本样书的组件部分转载如下:

components:
  -
    name: C1
    type: ns::lbvserver
    roles:
      - A
      - B
    properties:
      name: lb1
      servicetype: HTTP
      ipv46: 1.1.1.1
      port: 80
  -
    name: C2
    type: ns::lbvserver
    roles:
      - B
    properties:
      name: lb2
      servicetype: HTTP
      ipv46: 12.12.12.12
      port: 80
  -
    name: C3
    type: ns::lbvserver
    properties:
      name: lb3
      servicetype: HTTP
      ipv46: 13.13.13.13
      port: 80
  -
    name: C4
    type: ns::lbvserver
    roles:
      - default
    properties:
      name: lb4
      servicetype: HTTP
      ipv46: 14.14.14.14
      port: 80
<!--NeedCopy-->

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

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

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

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

本地化后的图片

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

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

构建您的样本

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

---
name: demo-target-roles
namespace: com.example.stylebooks
version: "1.2"
schema-version: "1.0"
import-stylebooks:
  -
    namespace: netscaler.nitro.config
    prefix: ns
    version: "10.5"
parameters:
  -
    name: appname
    type: string
    required: true
    key: true
target-roles:
  -
    name: A
  -
    name: B
    min-targets: 2
    max-targets: 5
components:
  -
    name: C1
    type: ns::lbvserver
    roles:
      - A
      - B
    properties:
      name: lb1
      servicetype: HTTP
      ipv46: 1.1.1.1
      port: 80
  -
    name: C2
    type: ns::lbvserver
    roles:
      - B
    properties:
      name: lb2
      servicetype: HTTP
      ipv46: 12.12.12.12
      port: 80
  -
    name: C3
    type: ns::lbvserver
    properties:
      name: lb3
      servicetype: HTTP
      ipv46: 13.13.13.13
      port: 80
  -
    name: C4
    type: ns::lbvserver
    roles:
      - default
    properties:
      name: lb4
      servicetype: HTTP
      ipv46: 14.14.14.14
      port: 80
<!--NeedCopy-->

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

本地化后的图片

使用 API

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

"targets": [
            {
             "id": "<ADC-UUID>",
             "roles": ["A"]
            },
           ]
<!--NeedCopy-->

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

POST /<ADM-IP>/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"]
        }
      ]
    }
}
<!--NeedCopy-->
实例角色