Configurar la conmutación de contenido de capa 7
Citrix Application Delivery Management (ADM) se organiza con OpenStack para configurar las funcionalidades de conmutación de capa 7 (L7) o de conmutación basada en contenido en las instancias de Citrix ADC. El cambio de contenido difiere del simple equilibrio de carga en que se pueden dirigir tipos específicos de solicitudes a servidores específicos. Cuando las configuraciones L7 se crean en OpenStack con una instancia de Citrix ADC como proveedor, Citrix ADM asigna una instancia de Citrix ADC e implementa las configuraciones de respuesta y conmutación de contenido correspondientes a las configuraciones L7. A continuación, las instancias de Citrix ADC pueden distribuir y equilibrar la carga de las solicitudes de los usuarios en función de las características de nivel de aplicación de las solicitudes.
La función de equilibrio de carga de capa 7 (L7) de OpenStack combina equilibrio de carga y conmutación de contenido para proporcionar una entrega optimizada de tipos específicos de contenido. Esto mejora el rendimiento del equilibrador de carga mediante la ejecución solo de las directivas que son aplicables al contenido. El equilibrio de carga de la capa 7 también facilita una mayor eficiencia de la infraestructura de la aplicación. La capacidad de separar el contenido según el tipo, URI o datos permite una mejor asignación de recursos físicos en la infraestructura de la aplicación. Por ejemplo, un usuario final que navega http://example-sports.com/about-us
es servido por un grupo de servidores que alojan contenido sobre la empresa y los servicios, mientras que un usuario que navega http://example-sports.com/shopping-cart-football
es servido por un grupo diferente de servidores que permite a los usuarios realizar compras en línea.
En la conmutación de L7, un equilibrador de carga se implementa como un servidor virtual de conmutación de contenido que acepta solicitudes HTTP de los usuarios y las distribuye a los servidores de aplicaciones. La conmutación L7 o el cambio de contenido permiten tener una entrada de un solo punto para acceder a una variedad de servicios de fondo (por ejemplo, no solo las aplicaciones web, los portales de servicios web, los correos web, sino también la administración de dispositivos móviles, el contenido en diferentes idiomas, etc.). Es decir, puede proporcionar una dirección IP pública para todos los servicios que ofrece a sus usuarios.
A diferencia del equilibrio de carga de nivel inferior, la conmutación de capa 7 no requiere que todos los servidores del grupo tengan el mismo contenido. Una configuración de balanceador de carga que utiliza la conmutación L7 espera que los servidores de aplicaciones o back-end de diferentes grupos tengan un contenido diferente. Los conmutadores L7 pueden dirigir solicitudes sobre la base de URI, host, encabezados HTTP o cualquier otra cosa en el mensaje de la aplicación. Los servidores de aplicaciones sirven esencialmente tipos específicos de contenido. Por ejemplo, un servidor solo puede servir imágenes, otro podría ejecutar lenguajes de scripting del lado del servidor, como PHP y ASP, y otro puede servir contenido estático como HTML, CSS y JavaScript.
Reglas L7
Los siguientes atributos se definen en una regla para evaluar el tráfico y se comparan con los valores definidos en la regla:
-
Nombre de host: el nombre de host en la solicitud HTTP se compara con el parámetro value de la regla. Por ejemplo, “www.example-sports.com”.
-
ruta: la parte de ruta del URI HTTP se compara con el parámetro de valor de la regla. Por ejemplo, “www.example-sports.com/shopping-cart/football_pump.html”
-
file_type: La última parte del URI se compara con el parámetro value de la regla. Por ejemplo, txt, html, jpg, PNG, xls y otros.
-
header: El encabezado definido en el parámetro clave se compara con el parámetro value en la regla.
-
cookie: La cookie nombrada por el parámetro clave se compara con el parámetro de valor de la regla. El valor del campo del encabezado de la solicitud de la cookie contiene un par de información de nombre y valor almacenados para esa URL; la sintaxis general es la siguiente: Cookie: name=value. Por ejemplo, una regla que busca una cookie llamada “almacenes” con el valor que empieza por “football-“ se verá así: Type = Cookie, compare_type=StartsWith, key = stores value = football-.
Tipos de comparación
Al evaluar el tráfico, la directiva L7 compara las siguientes expresiones con los atributos definidos en la regla.
-
regex: coincidencia de expresiones regulares de tipo Perl
-
starts_with: Cadena que comienza con
-
ends_with: La cadena termina en
-
contiene: La cadena contiene
-
equal_to: Cadena es igual a
Nota
El nombre de host, la ruta, el encabezado y los atributos de cookie admiten todos los tipos de comparación, pero el atributo file_type solo admite expresiones regulares y equal_to.
Directivas L7
Una directiva L7 procesa el tráfico HTTP entrante y devuelve un valor “verdadero” cuando coinciden todas las reglas definidas en la directiva.
En cualquier directiva L7, todas las reglas se unen de forma lógica con un operador AND. Una solicitud debe cumplir con todas las reglas para que la directiva devuelva un valor “verdadero”. La acción que realiza el balanceador de cargas se basa en el valor devuelto por la directiva. Puede crear una segunda directiva con la misma acción para lograr una operación OR lógica entre las reglas.
Por ejemplo, puede crear una directiva en la que la solicitud HTTP entrante pueda contener las palabras “EXAMPLE-SPORTS”, “SPORTS-FOOTBALL” o “EXAMPLE-FOOTBALL”, de modo que el balanceador de cargas tome las medidas adecuadas de reenviar estas solicitudes al grupo de servidores de la empresa de comercio electrónico de Example-Sports para ofrecer el contenido solicitado. Puede crear otra directiva que realice la misma acción pero que coincida con “ejemplo-deportes”, “ejemplo-deportes-fútbol” o “ejemplo-fútbol”. Cuando un usuario envía una solicitud HTTP con alguna de estas seis palabras clave, el balanceador de carga reenvía la solicitud al servidor Example-Sports.
Según las reglas definidas en la directiva, una directiva L7 puede realizar cualquiera de las siguientes acciones:
-
Redirigir al grupo: reenvía la solicitud al grupo de servidores de aplicaciones identificado por las reglas asociadas a la directiva L7. Es decir, puede crear una regla de aplicación para dirigir las solicitudes a un grupo de balanceadores de carga específico según el nombre de dominio. Por ejemplo, puede crear una regla que dirija algunas solicitudes a example-football.com a pool_1 y otras solicitudes a example-sports-online_purchase.com a pool_2.
-
Redirigir a URL: envía al cliente una respuesta HTTP de redireccionamiento en la que el encabezado de la respuesta de ubicación contenga la nueva ubicación. El navegador actualizará la barra de direcciones con la nueva ubicación y emitirá una nueva solicitud. Los casos de uso son muchos. Por ejemplo, si la dirección de un sitio web ha cambiado, puede redirigir las solicitudes a la nueva dirección en lugar de eliminarlas. O bien, durante el mantenimiento del sitio web, puede redirigir a los usuarios a un sitio de solo lectura.
-
Rechazar: rechaza la solicitud y no realiza ninguna otra acción. Por ejemplo, puede devolver una respuesta 401 no autorizada para denegar el acceso a los usuarios de páginas web restringidas.
Una configuración de conmutación de contenido consiste en un servidor virtual de conmutación de contenido, una configuración de equilibrio de carga que consiste en servidores y servicios virtuales de equilibrio de carga y directivas de conmutación de contenido. Después de crear el servidor virtual y las directivas de conmutación de contenido, enlaza cada directiva al servidor virtual de conmutación de contenido. Al vincular la directiva al servidor virtual de conmutación de contenido, se especifica el servidor virtual de equilibrio de carga de destino. Cuando una solicitud llega al servidor virtual de conmutación de contenido, el servidor virtual aplica las directivas de conmutación de contenido asociadas a esa solicitud. La prioridad de la directiva define el orden en que se evalúan las directivas vinculadas al servidor virtual de conmutación de contenido.
Cualquier grupo que tenga el identificador de escucha se puede asignar como grupo predeterminado de servidores virtuales a los que se desvía el tráfico. El grupo está vinculado vagamente a un oyente y solo se asocia a un oyente mediante la implementación de una directiva L7. También se puede crear un grupo directamente debajo de un balanceador de carga sin estar necesariamente vinculado a un oyente. En tal caso, el grupo se crea en el estado “pending_create”. Como las directivas de L7 están estrechamente vinculadas a los oyentes, se debe crear e implementar una directiva de L7 que contenga el ID del grupo para que el grupo se vuelva “activo” y comience a recibir solicitudes de tráfico.
Varias directivas de L7 pueden prestar servicio a un grupo, pero permanece en estado “activo” si tiene al menos una directiva asociada. Cuando se elimina la última directiva, el grupo vuelve al estado “pending_create” hasta que se cree otra directiva y se asocie a ella. Si se elimina el grupo en sí, todas las solicitudes HTTP que de otro modo habría recibido se redirigen al grupo predeterminado.
Asignación entre las políticas L7 de OpenStack y las entidades Citrix ADC
OpenStack | Entidad Citrix ADC | Descripción |
Directiva L7 con acción REDIRECT_TO_POOL | Directiva de cambio de contenido > Acción de cambio de contenido | Citrix ADM crea una directiva de conmutación de contenido que está enlazada al servidor virtual de conmutación de contenido y asociada a una acción de conmutación de contenido que especifica el grupo de servidores de aplicaciones de destino para la recuperación y presentación de contenido al usuario. |
Directiva L7 con acción REDIRECT_TO_URL | Directiva de respuesta > Acción de respuesta | Citrix ADM crea una directiva de respuesta que está enlazada al servidor virtual de conmutación de contenido y asociada a una acción de respuesta que especifica la URL de destino que se presentará a los usuarios. |
Directiva L7 con acción RECHAZAR | Directiva de respuesta > Eliminar la solicitud | Citrix ADM crea una directiva de respuesta que está enlazada al servidor virtual de conmutación de contenido y asociada a una acción de respuesta que descarta la solicitud. |
Si la acción de una directiva L7 que se evalúa como «verdadera» redirige el tráfico a un grupo que está en estado «create_pending», Citrix ADM implementa el grupo especificado junto con un servidor virtual de equilibrio de carga. Citrix ADM crea una directiva de conmutación de contenido a partir de la directiva L7 y utiliza la acción de conmutación de contenido correspondiente para redirigir las solicitudes al servidor virtual de equilibrio de carga asociado a ese grupo. Si una segunda directiva L7 redirige al mismo grupo, Citrix ADM crea una directiva de conmutación de contenido y una acción de conmutación de contenido para redirigir el tráfico al servidor virtual de equilibrio de carga existente asociado al grupo.
Posicionamiento político
La evaluación de las directivas de nivel 7 en OpenStack está determinada por sus prioridades. En OpenStack, de forma predeterminada, a las directivas se les asignan prioridades en el orden en que se crean. La directiva que se creó primero lleva el número “1” y las directivas que se crean posteriormente se numeran consecutivamente. Sin embargo, puede cambiar las prioridades de las directivas y asignarles prioridades diferentes. Las directivas siempre se evalúan en el orden de sus prioridades. La primera directiva que coincide con una solicitud específica siempre se ejecutará primero.
Al crear directivas, tenga en cuenta los siguientes puntos:
-
Si asigna a una nueva directiva la misma prioridad que a una directiva existente, la nueva directiva tendrá esa prioridad. Se reduce la prioridad de la directiva actual. Si es necesario, las prioridades de otras directivas también se reducen para mantener el orden en que se evalúan las directivas.
-
Si crea una nueva directiva sin especificar una posición, la nueva directiva simplemente se agregará a la lista.
-
Si crea una nueva directiva y le asigna una posición superior a la cantidad de directivas que ya figuran en la lista, la nueva directiva se anexará a la lista, es decir, la nueva directiva siempre tendrá la siguiente prioridad disponible. Por ejemplo, si hay tres directivas A, B y C con prioridades 1, 2 y 3, y si crea una directiva y asigna una prioridad de 8, la prioridad de la nueva directiva pasa a ser 4.
-
Si agrega una directiva a la lista o elimina una directiva de la lista, los valores de posición de la directiva se reordenan desde el 1 sin omitir los números. Por ejemplo, si la directiva A, B, C y D tienen valores de posición de 1, 2, 3 y 4, y si elimina la directiva B de la lista, la directiva C ahora toma la segunda posición y la directiva D toma la tercera posición.
En NetScaler ADM, siempre hay una directiva predeterminada asociada a una csvserver
con una prioridad de 1. Esta directiva predeterminada especifica el número de conexiones TCP que lbvserver
procesa un determinado punto de tiempo. Por lo tanto, cuando se crean las directivas de respuesta correspondientes y las directivas de conmutación de contenido en NetScaler ADC, siempre se les asigna una prioridad 1 mayor que la prioridad de la directiva L7 correspondiente. Por ejemplo, cuando se evalúa una directiva L7 con una prioridad de 1 y se crea una directiva de cambio de contenido con una prioridad de 2. Del mismo modo, cuando se evalúa una directiva L7 con una prioridad de 2 y se crea una directiva de respuesta con una prioridad de 3.
En OpenStack, primero se evalúa la directiva “rechazar” o “redirect_to_url” y, a continuación, se evalúa la directiva “redirect_to_pool”. En una instancia de NetScaler ADC, las directivas de respuesta siempre se evalúan primero para descartar la solicitud o presentar al usuario una dirección web redirigida, y las directivas de cambio de contenido se evalúan en último lugar. Este orden de evaluación no suele causar ningún conflicto si las directivas de cambio de contenido y de respuesta se excluyen mutuamente. Es decir, dos directivas L7 no deben tener expresiones idénticas. Las expresiones derivadas se agregan en las directivas de cambio de contenido y respondedor para evitar tales conflictos. Por ejemplo, escribe una expresión para rechazar todas las solicitudes a “sports-football.com” y otra expresión para permitir las solicitudes a “example-sports-football.com”. Cree las directivas de L7 para que todas las directivas de respondedor para rechazar la solicitud se organicen en la parte superior de la lista de evaluación, seguidas de las directivas de respondedor para Web Direct, seguidas de las directivas de conmutación de contenido.
En NetScaler ADM, siempre hay una directiva predeterminada asociada a una csvserver
con una prioridad de 1. Esta directiva predeterminada especifica el número de conexiones TCP que lbvserver
procesa un determinado punto de tiempo. Por lo tanto, cuando se crean las directivas de respuesta correspondientes y las directivas de conmutación de contenido en NetScaler ADC, siempre se les asigna una prioridad 1 mayor que la prioridad de la directiva L7 correspondiente. Por ejemplo, cuando se evalúa una directiva L7 con una prioridad de 1 y se crea una directiva de cambio de contenido con una prioridad de 2. Del mismo modo, cuando se evalúa una directiva L7 con una prioridad de 2 y se crea una directiva de respuesta con una prioridad de 3.
En OpenStack, primero se evalúa la directiva “rechazar” o “redirect_to_url” y, a continuación, se evalúa la directiva “redirect_to_pool”. En NetScaler ADC, las directivas de respuesta siempre se evalúan primero para descartar la solicitud o presentar al usuario una dirección web redirigida, y las directivas de cambio de contenido se evalúan en último lugar. Este orden de evaluación no suele causar ningún conflicto si las directivas de cambio de contenido y de respuesta se excluyen mutuamente. Es decir, no hay dos directivas L7 que tengan expresiones similares. Se agregan expresiones derivadas similares en las directivas de respuesta y cambio de contenido para evitar tales conflictos. Por ejemplo, escribe una expresión para rechazar todas las solicitudes a “sports-football.com” y otra expresión para permitir las solicitudes a “example-sports-football.com”. Cree las directivas de L7 para que todas las directivas de respondedor para rechazar la solicitud se organicen en la parte superior de la lista de evaluación, seguidas de las directivas de respondedor para Web Direct, seguidas de las directivas de conmutación de contenido.
Tareas de configuración
Las implementaciones de directivas y acciones del L7 se realizan mediante los comandos LBaaS de Neutron.
Configure las variables de entorno en OpenStack y cree el balanceador de carga (por ejemplo, LB1). Una vez creado correctamente el balanceador de cargas, cree el oyente y los grupos (por ejemplo, L1, P1 y P2) y agregue miembros y monitores a los grupos. Por ejemplo, P1 es el grupo predeterminado para L1, mientras que P2 es el grupo vinculado a LB1 y que administra los servidores de aplicaciones.
Para obtener más información sobre cómo configurar LBaaS V2 mediante la línea de comandos, consulte Configuración de LBaaS V2 mediante la línea de comandos.
Los siguientes comandos crean las directivas y definen las acciones específicas:
Crear directiva L7 para eliminar solicitudes
neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action<action-name>
Ejemplo:
neutron lbaas-l7policy-create –name policy11 –action REJECT –listener L1
El comando anterior crea y vincula la policy11, una directiva de respuesta, al servidor de conmutación de contenido para rechazar las solicitudes. Como no se creó ninguna regla para esta directiva, la directiva se evalúa como “falsa” y la solicitud se rechaza.
Crear una directiva L7 para redirigir solicitudes a una URL determinada
neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-url <redirect-url>
Ejemplo:
neutron lbaas-l7policy-create –name policy12 –action REDIRECT_TO_URL –listener admin-list1 –redirect-url http://example-sports/about-us.html
El comando anterior crea una acción de respuesta para redirigir las solicitudes a una dirección URL, crea una directiva de respuesta con acción y vincula esta directiva al servidor virtual de conmutación de contenido.
neutron lbaas-l7rule-create --type HOST_NAME --compare-type CONTAINS --value <value-string> <L7 policy name>
neutron lbaas-l7rule-create --type PATH --compare-type CONTAINS --value <value-string> <L7 policy name>
Las dos reglas anteriores se pueden conectar con un operador AND para derivar la expresión de la directiva de respuesta.
Crear una directiva L7 para redirigir solicitudes a un grupo
neutron lbaas-l7policy-create --name <L7 policy name> --listener <listener name> --action <action-name> --redirect-pool <redirect-pool>
Ejemplo:
neutron lbaas-l7policy-create –name policy13 –action REDIRECT_TO_POOL –listener admin-list1 –redirect-pool admin-pool2
Si esta es la primera directiva de L7, el comando anterior implementa P2 junto con LB1, crea la acción de redireccionamiento de cambio de contenido y redirige las solicitudes a LB1. Si P2 ya existe, el comando crea la acción de redirección de conmutación de contenido y redirige las solicitudes a LB1.