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