StyleBook para crear una configuración básica de equilibrio de carga
En el ejemplo anterior, ha creado 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 StyleBook como basic-lb-config.yaml.
En esta sección, diseñará un nuevo StyleBook que crea una configuración de equilibrio de carga que incluye 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 vincula el grupo de servicios al servidor virtual.
Encabezado
Para construir este StyleBook, debe comenzar actualizando la sección de encabezado. Esta sección es similar a la que creó para el equilibrio de carga del servidor virtual StyleBook. En la sección de encabezado, cambie el valor de name a basic-lb-config. Además, actualice la descripción y el nombre para mostrar para describir este StyleBook correctamente. No es necesario cambiar el espacio de nombres y los valores de versión. Debido a que 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. Se refiere al espacio de nombres netscaler.nitro.config para utilizar los objetos de configuración 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 back-end 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 especifica.
Componentes
También debe actualizar la sección de componentes para definir componentes adicionales de modo que utilicen los dos nuevos parámetros y construyan 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. Y, el componente svcg-comp tiene dos componentes secundarios dentro de él. El anidamiento de un componente dentro de otro componente permite al componente anidado 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 utiliza para crear un grupo de servicios en la instancia de Citrix ADC mediante los valores proporcionados para los atributos del recurso “servicegroup”. En este ejemplo, está especificando el valor estático para servicetype, mientras que name 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 anexa (concatenado) 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 utiliza para enlazar 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 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 se refiere al grupo de servicios creado por el componente principal svcg-comp y name: $parent.parent.properties.name se refiere al servidor virtual creado por el componente principal del principal lbvserver-comp.
El componente members-svcg se utiliza para enlazar objetos de configuración entre 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 los componentes fijos de repetición y repeticiónde elementoen un componente para que ese componente genere varios objetos de configuración del mismo tipo. Puede asignar un nombre de variable a la construcciónrepeat-item, por ejemplo, srv, para designar el valor actual en la iteración. Este nombre de variable se hace referencia en las propiedades del mismo componente o en componentes secundarios 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 particular, el anidamiento de componentes no era la única forma de construir la configuración. Podría haber logrado 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 en el mismo nivel (es decir, no están anidados) pero el resultado obtenido (la configuración de Citrix ADC 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 y lbvserver-comp, aunque se hayan declarado en último lugar, deben construirse antes de construir el segundo componente lbvserver-svg-binding-compporque hay referencias directas a estos componentes en el segundo componente.
Nota
Por convención, los nombres de StyleBooks, parámetros, sustituciones, componentes y salidas están en minúsculas. Cuando contienen varias palabras, están separadas por un carácter “-“. Por ejemplo, “lb-bindings”, “nombreaplicación”, “rewrite-config”, etc. Otra convención es sufijar nombres de componentes con cadena “-comp”.
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 para exponer 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. Un StyleBook no necesita devolver salidas. Sin embargo, al devolver algunos componentes internos como salidas, permite a cualquier StyleBooks que importe este StyleBook más flexibilidad como se puede ver al crear un StyleBook compuesto.
Nota
Es una buena práctica exponer un componente completo del StyleBook en la sección de salidas, en lugar de solo una propiedad de un componente (por ejemplo, exponer todo el $components.lbvserver-comp en lugar de solo el nombre $components.lbvserver-comp.properties.name). También agregue una descripción a la salida explicando lo que representa la salida específica.
Crea su StyleBook
Ahora que has definido todas las secciones requeridas de este StyleBook, reúne todas para construir su segundo StyleBook. Ya ha guardado este archivo StyleBook como basic-lb-config.yaml. Citrix recomienda utilizar el validador YAML integrado en la página StyleBooks para validar e importar el contenido 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 Citrix ADM y luego usarlo. Para obtener más información, consulte Cómo usar StyleBooks definidos por los usuarios.
También puede importar este StyleBook a otros StyleBooks y utilizar sus propiedades como se describe en la siguiente sección.