Application Delivery Management

实例角色

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

样书目前支持创建配置包并在多个 NetScaler 实例上应用相同配置的功能。在所有 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 实例的最小强制数量,而 max-target 则指定创建时可分配此角色的 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 的实例上。请注意,组件的角色属性是一个列表,可以为一个组件分配多个角色。这些角色本来可以在样书的“目标角色”部分中声明的。

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

让我们假设有一个定义了两个角色的样书-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 部署在所有实例上,而不考虑角色如何,因为此组件没有角色属性。

在创建配置包时,您还可以使用“Dry Run”功能来查看和验证角色分配的正确性以及将在每个 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 实例指定角色,如下所示。在“目标”块中,指定要在其上部署单个组件的特定 NetScaler 实例的 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-->
实例角色