实例角色

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

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

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

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

注意事项:

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

目标角色部分

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

此部分通常位于样本的 “导入样本” 部分之后,以及参数部分之前。

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

target-roles:

  -
   name: A
   name: B
     min-targets: 2
     max-targets: 5

您可以看到角色 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

在上面的示例中,组件生成一个 “lbvserver”,该 “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

请注意,组件 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

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

本地化后的图片

使用 API

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

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

提供了完整的 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"]
        }
      ]
    }
}