Application Delivery Management

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.

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 ADC 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 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 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.

StyleBook para crear una configuración básica de equilibrio de carga