Application Delivery Management

实例角色

在 NetScaler Console 中,您可能需要为单个应用程序配置多个 NetScaler 实例,但每个 NetScaler 实例又需要部署不同的配置。默认的 Microsoft Skype for Business StyleBook 就是一个这样的示例。

StyleBook 目前支持创建配置包并将相同配置应用于多个 NetScaler 实例。这种在所有 NetScaler 实例上配置都相同的情况,可称为对称配置。

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

当使用具有实例角色功能的 StyleBook 创建配置包时,配置包中的每个 NetScaler 实例都可以分配一个不同的角色。此角色决定了 NetScaler 实例将接收的配置包的配置对象。

注意事项:

  • StyleBook 中的实例角色集在创建 StyleBook 时定义。
  • 在创建或更新配置包时,会将角色分配给特定的 NetScaler 实例。

“target-roles” 部分

StyleBook 中引入了一个名为“target-roles”的新部分,其中声明了 StyleBook 支持的所有角色。

此部分通常放置在 StyleBook 的“import-StyleBooks”部分之后和参数部分之前。

在以下 StyleBook 示例中,“target-roles”部分中定义了两个角色 - A 和 B。

target-roles:

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

您可以看到角色 B 还定义了两个可选子属性:min-targets 和 max-targets。

尽管这两个子属性是可选的,但 min-targets 指定了从该 StyleBook 创建配置包时应分配此角色的 NetScaler 实例的最小强制数量,而 max-targets 指定了从该 StyleBook 创建配置包时可分配此角色的 NetScaler 实例的最大数量。

如果未指定这些子属性,则可为该角色配置的 NetScaler 实例数量没有限制。如果 min-targets = 0,则与该角色关联的配置是可选的;如果 min-targets = 1,则该配置是强制性的,并且至少需要为该角色配置一个 NetScaler 实例。

“default” 角色

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

具有角色的组件

定义 StyleBook 可以支持的角色(包括“default”角色)后,可以在 StyleBook 的组件部分中使用这些角色。如果您希望组件仅部署到扮演特定角色的 NetScaler 实例上,则可以将 roles 属性指定为组件的一部分,如以下组件示例所示:

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

在上述示例中,该组件生成一个“lbvserver”,该“lbvserver”将部署到扮演角色 A 的实例上。请注意,组件的 roles 属性是一个列表,一个组件可以分配多个角色。这些角色应已在 StyleBook 的“target-roles”部分中声明。

注意:如果 StyleBook 中的组件未指定 roles 属性,则该组件生成的配置对象将在所有 NetScaler 实例上创建,无论其角色如何。您可以有效利用此功能来创建可应用于配置包所有实例的配置对象。

假设有一个 StyleBook,其中定义了两个角色 - A 和 B,并且包含四个组件。

  • 组件 C1 具有角色 A 和 B
  • 组件 C2 具有角色 B
  • 组件 C3 未定义任何角色
  • 组件 C4 具有“default”角色

此 StyleBook 的组件部分如下所示:

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 具有“default”角色,这意味着它将应用于未明确分配角色的任何实例。

现在,假设您要使用此 StyleBook 创建配置包,并将其部署到五个 NetScaler 实例上。在此阶段,您可以按以下方式将角色分配给实例:

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

下图总结了角色分配,并显示了每个 NetScaler 实例将接收的生成的配置:

实例角色分配图

请注意,组件 C3 部署到所有实例上,无论角色如何,因为此组件没有 roles 属性。

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

构建您的 StyleBook

StyleBook “demo-target-roles” 的完整内容如下:

---
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 时,您可以在创建或更新配置包时为每个 NetScaler 实例指定角色,如下所示。在“targets”块中,指定要部署单个组件的特定 NetScaler 实例的 UUID。

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

提供了完整的 REST API 示例供您参考。

POST /<Console-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-->
实例角色