インスタンスの役割
NetScaler Application Delivery Management (ADM)では、単一のアプリケーションに対して複数のNetScalerインスタンスを構成する必要がある一方で、各ADCインスタンスに異なる構成を展開する必要があるシナリオが発生する可能性があります。このようなケースの例として、デフォルトのMicrosoft Skype for Business StyleBookがあります。
StyleBookは現在、構成パックを作成し、複数のNetScalerインスタンスに同じ構成を適用する機能をサポートしています。すべてのADCインスタンスで構成が同一であるこのようなシナリオは、対称構成と呼ばれます。
StyleBookの「インスタンスの役割」機能を使用すると、非対称構成、つまり複数のADCインスタンスに適用できるが、異なるADCインスタンスには異なる構成を持つ構成パックを作成できます。
インスタンスの役割機能を持つStyleBookを使用して構成パックを作成する場合、構成パック内の各ADCインスタンスに異なる役割を割り当てることができます。この役割によって、ADCインスタンスが受け取る構成パックの構成オブジェクトが決まります。
注意点:
-
StyleBookにおけるインスタンスの役割のセットは、StyleBookの作成時に定義されます。
-
役割は、構成パックの作成または更新時に特定のADCインスタンスに割り当てられます。
ターゲットロールセクション
StyleBookに「ターゲットロール」という新しいセクションが導入され、StyleBookでサポートされるすべての役割が宣言されます。
このセクションは通常、StyleBookの「import-StyleBooks」セクションの後、パラメータセクションの前に配置されます。
次のStyleBookの例では、「ターゲットロール」セクション内で2つの役割(AとB)が定義されています。
target-roles:
-
name: A
name: B
min-targets: 2
max-targets: 5
役割Bには、オプションの2つのサブプロパティ、min-targetsとmax-targetsも定義されていることがわかります。
これら2つのサブプロパティはオプションですが、min-targetsは、このStyleBookから構成パックを作成する際にこの役割を割り当てる必要があるADCインスタンスの最小必須数を指定し、max-targetsは、このStyleBookから構成パックを作成する際にこの役割を割り当てることができるADCインスタンスの最大数を指定します。
これらのサブプロパティが指定されていない場合、その役割に構成できるADCインスタンスの数に制限はありません。min-targets = 0の場合、その役割に関連付けられた構成はオプションであり、min-targets = 1の場合、その構成は必須であり、少なくとも1つのADCインスタンスがその役割に構成される必要があります。
ロール「default」
明示的に定義されたロールに加えて、すべてのStyleBookが持つ暗黙的なロールがあり、そのロールはデフォルトロールと呼ばれます。このロールは、StyleBook内の他のロールと同様に使用できます。構成パックを作成する際、ADCインスタンスに特定のロールが割り当てられていない場合、そのインスタンスは暗黙的に「default」ロールに割り当てられます。これにより、インスタンスは「default」ロールを持つコンポーネントによって生成された構成オブジェクトを受け取ります。
ロールを持つコンポーネント
StyleBookがサポートできるロール(「default」ロールを含む)が定義された後、それらのロールはStyleBookのコンポーネントセクションで使用できます。特定のロールを果たすADCインスタンスにのみコンポーネントをデプロイしたい場合は、コンポーネントの一部としてロール属性を指定できます。コンポーネントの以下の例で示します。
-
name: C1
type: ns::lbvserver
roles:
- A
properties:
name: lb1
servicetype: HTTP
ipv46: 1.1.1.1
port: 80
上記の例では、コンポーネントはロールAを果たすインスタンスにデプロイされる「lbvserver」を生成します。コンポーネントのロール属性はリストであり、コンポーネントには複数のロールを割り当てることができることに注意してください。これらのロールは、StyleBookの「target-roles」セクションで宣言されているはずです。
注: StyleBook内のコンポーネントがロール属性を指定しない場合、そのコンポーネントによって生成された構成オブジェクトは、ロールに関係なくすべてのNetScalerインスタンスに作成されます。この機能を効果的に使用して、構成パックのすべてのインスタンスに適用できる構成オブジェクトを作成できます。
ロールAとBの2つのロールが定義されており、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
コンポーネントC3にはロールが定義されていないことに注意してください。これは、コンポーネントがロールに関係なくすべてのインスタンスにデプロイされることを意味します。一方、コンポーネントC4は「default」ロールを持ちます。これは、明示的なロールが割り当てられていない任意のインスタンスに適用されることを意味します。
さて、このStyleBookを使用して構成パックを作成し、5つのADCインスタンスにデプロイするとします。この段階で、次のようにインスタンスにロールを割り当てることができます。
-
ロールAはインスタンスT1、T2、T3、T4に割り当てられます
-
ロールBはインスタンスT2、T3、T4に割り当てられています。
-
インスタンスT5にはどのロールも割り当てられていません。
次の図は、ロールの割り当てをまとめたもので、各ADCインスタンスが受け取る結果の構成を示しています。
コンポーネントC3にはロール属性がなかったため、ロールに関係なくすべてのインスタンスにデプロイされることに注意してください。
設定パックを作成する際に「ドライラン」機能を使用すると、ロールの正しい割り当てと、各ADCインスタンスで作成される設定オブジェクトを表示および確認することもできます。
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
次の図は、サンプル設定パック用に作成されたオブジェクトを示しています。
APIの使用
REST APIを使用する場合、設定パックの作成または更新時に、各ADCインスタンスのロールを次のように指定できます。「targets」ブロックで、個々のコンポーネントをデプロイする特定のNetScalerインスタンスの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"]
}
]
}
}