Application Delivery Management

インスタンスロール

NetScaler Consoleでは、単一のアプリケーションに対して複数のNetScalerインスタンスを設定する必要があるシナリオや、各NetScalerインスタンスに異なる設定を展開する必要があるシナリオが発生する場合があります。このようなケースの例として、デフォルトのMicrosoft Skype for Business StyleBookが挙げられます。

StyleBookは現在、設定パックを作成し、複数のNetScalerインスタンスに同じ設定を適用する機能をサポートしています。すべてのNetScalerインスタンスで設定が同一であるこのようなシナリオは、対称的な設定と呼ぶことができます。

StyleBookの「インスタンスロール」機能を使用すると、非対称な設定、つまり複数のNetScalerインスタンスに適用できるが、各NetScalerインスタンスで異なる設定を持つ設定パックを作成できます。

インスタンスロール機能を持つStyleBookを使用して設定パックを作成する場合、設定パック内の各NetScalerインスタンスに異なるロールを割り当てることができます。このロールによって、NetScalerインスタンスが受け取る設定パックの設定オブジェクトが決まります。

注意点:

  • StyleBook内のインスタンスロールのセットは、StyleBookの作成時に定義されます。
  • ロールは、設定パックの作成または更新時に特定のNetScalerインスタンスに割り当てられます。

ターゲットロールセクション

StyleBookに「target-roles」という新しいセクションが導入され、StyleBookでサポートされるすべてのロールが宣言されます。

このセクションは通常、StyleBookの「import-StyleBooks」セクションの後、およびパラメータセクションの前に配置されます。

次のStyleBookの例では、「target-roles」セクション内で2つのロール(AとB)が定義されています。

target-roles:

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

ロールBには、オプションのサブプロパティであるmin-targetsとmax-targetsも定義されていることがわかります。

これら2つのサブプロパティはオプションですが、min-targetsは、このStyleBookから設定パックを作成する際にこのロールを割り当てる必要があるNetScalerインスタンスの最小必須数を指定し、max-targetsは、このStyleBookから設定パックを作成する際にこのロールを割り当てることができるNetScalerインスタンスの最大数を指定します。

これらのサブプロパティが指定されていない場合、そのロールに設定できるNetScalerインスタンスの数に制限はありません。min-targets = 0の場合、そのロールに関連付けられた設定はオプションであり、min-targets = 1の場合、その設定は必須であり、少なくとも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-->

上記の例では、コンポーネントはロールAを果たすインスタンスに展開される「lbvserver」を生成します。コンポーネントのroles属性はリストであり、1つのコンポーネントに複数のロールを割り当てることができることに注意してください。これらのロールは、StyleBookの「target-roles」セクションで宣言されているはずです。

注: StyleBook内のコンポーネントがroles属性を指定しない場合、そのコンポーネントによって生成された設定オブジェクトは、ロールに関係なくすべてのNetScalerインスタンスに作成されます。この機能を効果的に使用して、設定パックのすべてのインスタンスに適用できる設定オブジェクトを作成できます。

ロールAとBが定義され、4つのコンポーネントを含むStyleBookがあると仮定しましょう。

  • コンポーネント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を使用して設定パックを作成し、5つの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
<!--NeedCopy-->
{
  "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-->
インスタンスロール