Servicio Citrix Application Delivery Management

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
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"

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"

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: 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

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

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 agrega (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 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 primario 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 elemento en un componente para 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. 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: 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  

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-comp porque 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

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

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.

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