StyleBook para crear una configuración básica de equilibrio de carga
En el ejemplo anterior, creó un StyleBook básico para crear un servidor virtual de equilibrio de carga. Puede guardar este StyleBook con un nombre diferente y, a continuación, actualizarlo para incluir parámetros y componentes adicionales para una configuración básica de equilibrio de carga. Guarde este archivo de StyleBook como basic-lb-config.yaml.
En esta sección, diseñará un nuevo StyleBook que cree una configuración de equilibrio de carga compuesta por un servidor virtual de equilibrio de carga, un grupo de servicios y una lista de servicios. También vincula los servicios al grupo de servicios y enlaza el grupo de servicios al servidor virtual.
Header
Para crear este StyleBook, tiene que empezar por actualizar la sección del encabezado. Esta sección es similar a la que creó para el servidor virtual de equilibrio de carga StyleBook. En la sección del encabezado, cambie el valor del nombre a basic-lb-config. Además, actualice la descripción y el nombre de visualización para describir este StyleBook de forma adecuada. No es necesario cambiar los valores del espacio de nombres ni de la versión. Como ha cambiado el nombre, la combinación de nombre, espacio de nombres y versión crea un identificador único para este StyleBook en el sistema.
name: basic-lb-config
description: This StyleBook defines a simple load balancing configuration.
display-name: Load Balancing Configuration
namespace: com.example.stylebooks
schema-version: "1.0"
version: "0.1"
<!--NeedCopy-->
Importar StyleBooks
La sección Import-StyleBooks sigue siendo la misma. Hace referencia al espacio de nombres netscaler.nitro.config para usar los objetos de configuración de Nitro.
import-stylebooks:
-
namespace: netscaler.nitro.config
prefix: ns
version: "10.5"
<!--NeedCopy-->
Parámetros
Tiene que actualizar la sección de parámetros para agregar dos parámetros adicionales para definir la lista de servicios o servidores y el puerto en el que los servicios escuchan. Los tres primeros parámetros, name, ip y lb-alg, siguen siendo los mismos.
parameters:
-
name: name
type: string
label: Application Name
description: Name of the application configuration
required: true
-
name: ip
type: ipaddress
label: Application Virtual IP (VIP)
description: Application VIP that the clients access
required: true
-
name: lb-alg
type: string
label: LoadBalancing Algorithm
description: Choose the load balancing algorithm used for load balancing 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
<!--NeedCopy-->
En este ejemplo, se agrega el parámetro svc-servers para aceptar una lista de direcciones IP de los servicios que representan los servidores de fondo de la aplicación. Este es un parámetro obligatorio como se indica por requerido: True. El segundo parámetro, svc-port, indica el número de puerto en el que escuchan los servidores. El número de puerto predeterminado es 80 para el parámetro svc-port, si el usuario no lo ha especificado.
Componentes
También debe actualizar la sección de componentes para definir componentes adicionales de modo que utilicen los dos nuevos parámetros y creen la configuración completa de equilibrio de carga.
Para este ejemplo, debe escribir la sección de componentes de la siguiente manera:
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
<!--NeedCopy-->
En este ejemplo, el componente original lbvserver-comp (del ejemplo anterior) ahora tiene un componente secundario llamado svcg-comp. Además, el componente svcg-comp contiene dos componentes secundarios. Al anidar un componente dentro de otro componente, el componente anidado puede crear objetos de configuración haciendo referencia a los atributos del componente principal. El componente anidado puede crear uno o más objetos para cada objeto creado en el componente principal.
El componente svcg-comp se usa para crear un grupo de servicios en la instancia de NetScaler mediante los valores proporcionados para los atributos del recurso “servicegroup”. En este ejemplo, especificará un valor estático para el tipo de servicio, mientras que el nombre obtiene su valor del parámetro de entrada. Para hacer referencia al nombre del parámetro definido en la sección de parámetros, utilice la notación $parameters.name + “-svcgrp”, donde-svcgrp** se agrega (concatena) al nombre definido por el usuario.
El componente svcg-comp tiene dos componentes secundarios, lbvserver-svg-binding-comp y members-svcg-comp.
El primer componente secundario, lbvserver-svg-binding-comp, se usa para vincular un objeto de configuración entre el grupo de servicios creado por su componente principal y el servidor virtual de equilibrio de carga (lbvserver) creado por el componente principal del componente principal. La notación $principal, también llamada referencia principal, se utiliza para hacer referencia a entidades en los componentes principal. Por ejemplo, servicegroupname: $parent.properties.name hace referencia al grupo de servicios creado por el componente principal svcg-comp, y name: $parent.parent.properties.name hace referencia al servidor virtual creado por el componente principal lbvserver-comp.
El componente members-svcg se utiliza para vincular los objetos de configuración de la lista de servicios al grupo de servicios creado por el componente principal. La creación de múltiples objetos de configuración de enlace se logra mediante el uso de la construcción de repetición de StyleBook para iterar sobre la lista de servidores especificados en el parámetro svc-servers. Durante la iteración, este componente StyleBook crea un objeto de configuración Nitro de tipo servicegroup_servicegroupmember_binding para cada servicio (denominado srv en la construcción repeat-item) en el grupo de servicios, y establece el atributo ip en cada Nitro objeto de configuración a la dirección IP del servidor correspondiente.
Por lo general, puede utilizar las construcciones repeat yrepeat-item** de un componente para hacer que ese componente genere varios objetos de configuración del mismo tipo. Puede asignar un nombre de variable a la construcción **repeat-item, por ejemplo, srv, para designar el valor actual en la iteración. En las propiedades del mismo componente o en los componentes secundarios se hace referencia a este nombre de variable como $<varname>, por ejemplo, $srv.
En el ejemplo anterior, ha utilizado anidamiento de componentes dentro de otros para construir fácilmente esta configuración. En este caso concreto, el anidamiento de los componentes no era la única forma de crear la configuración. Podrías haber obtenido el mismo resultado sin anidar, como se muestra a continuación:
components:
-
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: $components.svcg-comp.properties.name
-
name: lbvserver-svg-binding-comp
type: ns::lbvserver_servicegroup_binding
properties:
name: $components.lbvserver-comp.properties.name
servicegroupname: $components.svcg-comp.properties.name
-
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:
name: $parameters.name + "-svcgrp"
servicetype: HTTP
<!--NeedCopy-->
Aquí, todos los componentes están al mismo nivel (es decir, no están anidados) pero el resultado obtenido (la configuración de NetScaler generada) es el mismo que el de los componentes anidados utilizados anteriormente. Además, el orden en el que se declaran los componentes en el StyleBook no afecta al orden de creación de los objetos de configuración. En este ejemplo, los componentes svcg-comp ylbvserver-comp**, aunque se declaren en último lugar, se deben crear antes de compilar el segundo componente **lbvserver-svg-binding-compporque hay referencias directas a estos componentes en el segundo componente.
Nota
Por convención, los nombres de los StyleBooks, los parámetros, las sustituciones, los componentes y las salidas aparecen en minúsculas. Cuando contienen varias palabras, están separadas por un carácter “-“. Por ejemplo, “lb-bindings”, “app-name”, “rewrite-config”, etc. Otra convención consiste en agregar el sufijo “-comp” a los nombres de los componentes.
Resultados
La última sección que puede agregar al nuevo StyleBook es la sección de salidas donde se especifica lo que este StyleBook expone a sus usuarios (o en otros StyleBooks) después de que se use para crear una configuración. Por ejemplo, puede especificar en la sección de salidas que se muestren los objetos de configuración lbvserver y servicegroup que crearía este StyleBook.
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
<!--NeedCopy-->
La sección de salidas de un StyleBook es opcional. No es necesario que un StyleBook devuelva las salidas. Sin embargo, al devolver algunos componentes internos como salidas, permite a los StyleBooks que importen este StyleBook una mayor flexibilidad, como se puede ver al crear un StyleBook compuesto.
Nota
Se recomienda exponer un componente completo del StyleBook en la sección de resultados, en lugar de una sola propiedad de un componente (por ejemplo, exponer el $components.lbvserver-comp completo en lugar de solo el nombre $components.lbvserver-comp.properties.name). Agregue también una descripción a la salida que explique lo que representa la salida específica.
Crea su StyleBook
Ahora que ha definido todas las secciones requeridas de este StyleBook, reúna todas para crear su segundo StyleBook. Ya ha guardado este archivo StyleBook como basic-lb-config.yaml. Citrix recomienda utilizar el validador de YAML integrado en la página StyleBooks para validar e importar el contenido de YAML.
El contenido completo del archivo basic-lb-config.yaml se reproduce a continuación:
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
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
<!--NeedCopy-->
Para comenzar a usar su StyleBook para crear configuraciones, debe importarlo a NetScaler ADM y luego usarlo. Para obtener más información, consulte Cómo utilizar StyleBooks definidos por el usuario.
También puede importar este StyleBook a otros StyleBooks y utilizar sus propiedades como se describe en la siguiente sección.