基本的なロードバランシング構成を作成するためのStyleBook
このセクションでは、ロードバランシング仮想サーバー、サービスグループ、およびサービスリストを含むロードバランシング構成を作成するStyleBookを設計します。StyleBookは、サービスをサービスグループにバインドし、サービスグループを仮想サーバーにバインドします。
基本的なロードバランシング構成を作成するには、ロードバランシング仮想サーバーを作成するためのStyleBookで作成したサンプルStyleBook lb-vserver を使用し、basic-lb-config.yaml として保存します。
ヘッダー
このStyleBookを構築するには、ヘッダーセクションを更新します。このセクションは、ロードバランシング仮想サーバーを作成するためのStyleBookで作成したヘッダーセクションと似ています。
name の値を basic-lb-config に変更します。description と display-name を更新して、StyleBookを説明します。namespace と version の値を変更する必要はありません。名前を変更したため、このStyleBookの一意の識別子がシステムに作成されます。
name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"
StyleBookのインポート
import-stylebooksセクションは変更されません。これは、NITRO構成オブジェクトを使用するために netscaler.nitro.config 名前空間を参照します。
import-stylebooks:
-
namespace: netscaler.nitro.config
prefix: ns
version: "10.5"
パラメータ
パラメータセクションを更新して、さらに2つのパラメータを追加します。
パラメータは、サービスまたはサーバーのリストと、サービスがリッスンするポートを定義します。最初の3つのパラメータ
name、ip、および lb-alg は変更されません。
parameters:
-
name: name
type: string
label: Application Name
description: Give a name to the application configuration.
required: true
-
name: ip
type: ipaddress
label: Application Virtual IP (VIP)
description: The Application VIP that clients access
required: true
-
name: lb-alg
type: string
label: LoadBalancing Algorithm
description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Application Server IPs
description: The IP addresses of all the servers of this application
required: true
-
name: svc-port
type: tcp-port
label: Server Port
description: The TCP port open on the application servers to receive requests.
default: 80
アプリケーションのバックエンドサーバーのIPアドレスのリストを受け入れるために、パラメータ svc-servers が追加されます。svc-servers は、required: true で示されるように必須パラメータです。
2番目のパラメータ svc-port は、サーバーがリッスンするポート番号を示します。ユーザーによって指定されない限り、デフォルトのポート番号は80です。
コンポーネント
また、コンポーネントセクションを更新して、2つの新しいパラメータを使用し、完全なロードバランシング構成を構築するように、より多くのコンポーネントを定義する必要があります。
この例では、コンポーネントセクションを次のように記述する必要があります。
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
components:
-
name: svcg-comp
type: ns::servicegroup
properties:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
components:
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver_servicegroup_binding
properties:
name: $parent.parent.properties.name
servicegroupname: $parent.properties.name
-
name: members-svcg-comp
type: ns::servicegroup_servicegroupmember_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: str($parameters.svc-port)
servicegroupname: $parent.properties.name
この例では、元のコンポーネント lbvserver-comp (前の例から) に、svcg-comp という子コンポーネントがあります。svcg-comp コンポーネントには、さらに2つの子コンポーネントが含まれています。コンポーネントを別のコンポーネント内にネストすると、ネストされたコンポーネントは親コンポーネントの属性を参照して構成オブジェクトを作成できます。ネストされたコンポーネントは、親コンポーネントで作成されたオブジェクトごとに1つ以上のオブジェクトを作成できます。
svcg-comp コンポーネントは、リソース
servicegroup の属性に指定された値を使用して、NetScalerインスタンス上にサービスグループを作成するために使用されます。この例では、servicetype に静的な値を指定していますが、name は入力パラメータから値を取得します。パラメータセクションで定義されているパラメータ name を、$parameters.name + "-svcgrp" という表記を使用して参照します。ここで、「-svcgrp」はユーザー定義の名前に付加(連結)されます。
コンポーネント svcg-comp には、lbvserver-svg-binding-comp と members-svcg-comp の2つの子コンポーネントがあります。
最初の子コンポーネントである lbvserver-svg-binding-comp は、その親コンポーネントによって作成されたサービスグループと、親の親コンポーネントによって作成された負荷分散仮想サーバー (
lbvserver) との間に構成オブジェクトをバインドするために使用されます。$parent 表記(親参照とも呼ばれます)は、親コンポーネント内のエンティティを参照するために使用されます。たとえば、servicegroupname: $parent.properties.name は親コンポーネント svcg-comp によって作成されたサービスグループを参照し、name: $parent.parent.properties.name は親の親コンポーネント lbvserver-comp によって作成された仮想サーバーを参照します。
members-svcg コンポーネントは、サービスリストと親コンポーネントによって作成されたサービスグループとの間に構成オブジェクトをバインドするために使用されます。バインディング構成オブジェクトの作成は、StyleBookの repeat 構造を使用して、パラメータ svc-servers で指定されたサーバーリストを反復処理することによって実現されます。反復処理中に、このStyleBookコンポーネントは、サービスグループ内の各サービス(repeat-item 構造では
srv と呼ばれます)に対して servicegroup_servicegroupmember_binding 型のNITRO構成オブジェクトを作成し、各NITRO構成オブジェクトの ip 属性を対応するサーバーのIPアドレスに設定します。
一般に、コンポーネントで repeat および repeat-item 構造を使用すると、そのコンポーネントが同じタイプの複数の構成オブジェクトを構築できるようになります。repeat-item 構造に変数名(例:
srv) を割り当てて、反復処理中の現在の値を指定できます。この変数名は、同じコンポーネントまたは子コンポーネントのプロパティで $<varname> として参照されます(例: $srv)。
上記の例では、コンポーネントのネストが構成の構築を容易にしています。次の例に示すように、ネストせずに構成を構築することもできます。
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
-
name: svcg-comp
type: ns::servicegroup
properties:
servicegroupname: $parameters.name + "-svcgrp"
servicetype: HTTP
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver_servicegroup_binding
properties:
name: $components.lbvserver-comp.properties.name
servicegroupname: $components.svcg-comp.properties.servicegroupname
-
name: members-svcg-comp
type: ns::servicegroup_servicegroupmember_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: 80
servicegroupname: $components.svcg-comp.properties.servicegroupname
ここでは、コンポーネントはネストされていませんが、生成されるNetScaler構成は、以前に使用されたネストされたコンポーネントの場合と同じです。
StyleBookでコンポーネントが宣言される順序は、構成オブジェクトの作成順序には影響しません。この例では、コンポーネント svcg-comp と lbvserver-comp は、最後に宣言されていますが、2番目のコンポーネント lbvserver-svg-binding-comp を構築する前に構築する必要があります。これは、2番目のコンポーネントにこれらのコンポーネントへの前方参照があるためです。
注
慣例として、StyleBook、パラメータ、置換、コンポーネント、および出力の名前は小文字で記述されます。複数の単語を含む場合は、「-」文字で区切られます。たとえば、
lb-bindings、app-name、rewrite-config などです。もう1つの慣例は、コンポーネント名に -comp 文字列を接尾辞として付けることです。
出力
このセクションでは、StyleBookが構成を作成した後にユーザー(または他のStyleBook)に公開するものを指定する必要があります。たとえば、このStyleBookによって作成された
lbvserver および servicegroup 構成オブジェクトを公開するように指定できます。
outputs:
-
name: lbvserver-comp
value: $components.lbvserver-comp
description: The component that builds the Nitro lbvserver configuration object
-
name: servicegroup-comp
value: $components.svcg-comp
description: The component that builds the Nitro servicegroup configuration object
StyleBookの出力セクションはオプションです。StyleBookは出力を返す必要はありません。ただし、一部の内部コンポーネントを出力として返すことで、このStyleBookをインポートするStyleBookはより柔軟になります。この機能は、複合StyleBookを作成する場合に役立ちます。
注
outputsセクションでは、コンポーネントの単一のプロパティだけでなく、StyleBookのコンポーネント全体を公開することが推奨されます (例えば、名前だけではなく、$components.lbvserver-comp.properties.nameではなく、$components.lbvserver-comp全体を公開します)。また、特定の出力が何を表しているかを説明する記述を出力に追加してください。
StyleBookを構築する
このStyleBookの必要なセクションをすべて定義したので、それらをすべて組み合わせて2番目のStyleBookを構築します。このStyleBookファイルはすでにbasic-lb-config.yamlとして保存されています。Citrixは、StyleBookに組み込まれているYAMLバリデーターを使用してYAMLコンテンツを検証およびインポートすることを推奨します。
ファイルbasic-lb-config.yamlの全コンテンツは以下のとおりです。
name: basic-lb-config
namespace: com.example.stylebooks
version: "0.1"
display-name: Load Balancing Configuration
description: This StyleBook defines a simple load balancing configuration.
schema-version: "1.0"
import-stylebooks:
-
namespace: netscaler.nitro.config
version: "10.5"
prefix: ns
parameters:
-
name: name
type: string
label: Application Name
description: Give a name to the application configuration.
required: true
-
name: ip
type: ipaddress
label: Application Virtual IP (VIP)
description: The Application VIP that clients access
required: true
-
name: lb-alg
type: string
label: LoadBalancing Algorithm
description: Choose the loadbalancing algorithm (method) used for loadbalancing client requests between the application servers.
allowed-values:
- ROUNDROBIN
- LEASTCONNECTION
default: ROUNDROBIN
-
name: svc-servers
type: ipaddress[]
label: Application Server IPs
description: The IP addresses of all the servers of this application
required: true
-
name: svc-port
type: tcp-port
label: Server Port
description: The TCP port open on the application servers to receive requests.
default: 80
components:
-
name: lbvserver-comp
type: ns::lbvserver
properties:
name: $parameters.name + "-lb"
servicetype: HTTP
ipv46: $parameters.ip
port: 80
lbmethod: $parameters.lb-alg
-
name: svcg-comp
type: ns::servicegroup
properties:
servicegroupname: $parameters.name + "-svcgrp"
servicetype: HTTP
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver_servicegroup_binding
properties:
name: $components.lbvserver-comp.properties.name
servicegroupname: $components.svcg-comp.properties.servicegroupname
-
name: members-svcg-comp
type: ns::servicegroup_servicegroupmember_binding
repeat: $parameters.svc-servers
repeat-item: srv
properties:
ip: $srv
port: 80
servicegroupname: $components.svcg-comp.properties.servicegroupname
outputs:
-
name: lbvserver-comp
value: $components.lbvserver-comp
description: The component that builds the Nitro lbvserver configuration object
-
name: servicegroup-comp
value: $components.svcg-comp
description: The component that builds the Nitro servicegroup configuration object
StyleBookを使用して構成を作成するには、NetScaler Consoleにインポートしてから使用する必要があります。詳細については、「ユーザー定義StyleBookの使用方法」を参照してください。
このStyleBookを他のStyleBookにインポートし、次のセクションで説明されているようにそのプロパティを使用することもできます。