Configurar la conmutación de contenido de capa 7
Citrix Application Delivery Management (ADM) organiza con OpenStack para configurar las funciones de conmutación de capa 7 (L7) o de conmutación basada en contenido en instancias de Citrix ADC. La conmutación de contenido difiere del equilibrio de carga simple en que los tipos específicos de solicitudes se pueden dirigir a servidores específicos. Cuando las configuraciones de L7 se crean en OpenStack con una instancia de Citrix ADC como proveedor, Citrix ADM asigna una instancia de Citrix ADC e implementa configuraciones de conmutación de contenido y respondedor correspondientes a las configuraciones de L7. Las instancias Citrix ADC pueden distribuir y equilibrar la carga de las solicitudes de los usuarios basándose en las funciones de la capa 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 va a http://example-sports.com/about-us
es recibido por un grupo de servidores que alojan contenido sobre la empresa y los servicios, mientras que un usuario que va a http://example-sports.com/shopping-cart-football
es recibido 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 la conmutación de contenido le permite tener una entrada de un solo punto para acceder a una variedad de servicios back-end (por ejemplo, no solo aplicaciones web, portales de servicios web, correos web, sino también administración móvil, contenido en diferentes idiomas, etc.). Es decir, puede proporcionar una dirección IP pública para todos los servicios que está ofreciendo a sus usuarios.
A diferencia del equilibrio de carga de nivel inferior, la conmutación de nivel 7 no requiere que todos los servidores del grupo tengan el mismo contenido. Una configuración del equilibrador de carga que utiliza la conmutación L7 espera que los servidores de aplicaciones o back-end de diferentes grupos tengan 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”.
-
path: 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 value en la regla. El valor del campo de solicitud de cookie contiene un par de nombre y valor de información almacenada 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 de inicio con
-
ends_with: La cadena termina con
-
contiene: 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 de 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 lógicamente con un operador AND. Una solicitud debe coincidir con todas las reglas para que la directiva devuelva un valor “verdadero”. La acción realizada por el equilibrador de carga 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 puede contener las palabras “EJEMPLO-SPORTS”, “SPORTS-FOOTBALL” o “EJEMPLO-FOOTBALL”, de modo que el equilibrador de carga tome la acción adecuada de reenviar estas solicitudes al grupo de servidores de la instancia de empresa de comercio electrónico para servir 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 cualquiera de estas seis palabras clave, el equilibrador de carga reenvía la solicitud al servidor de Ejemplo-Deportes.
Dependiendo de las reglas definidas en la directiva, una directiva L7 puede realizar cualquiera de las siguientes acciones:
-
Redirigir al grupo: Reenvíe 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 equilibradores 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íe al cliente una respuesta HTTP de redirección en la que el encabezado de respuesta de ubicación contiene la nueva ubicación. El explorador actualizará la barra de direcciones con la nueva ubicación y emitirá una nueva solicitud. Los casos de uso son muchos. Por ejemplo, si una dirección de sitio web ha cambiado, puede redirigir las solicitudes a la nueva dirección en lugar de descartarse. 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 acción adicional. 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 ID de escucha se puede asignar como un grupo predeterminado de servidores virtuales a los que se desvía el tráfico. El grupo está enlazado libremente con un oyente y se asocia con un oyente solo a través de la implementación de una directiva L7. Un grupo también se puede crear directamente bajo un equilibrador de carga sin necesariamente estar vinculado a un oyente. En tal caso, el grupo se crea en un estado “pending_create”. Dado que las directivas de L7 están estrechamente vinculadas con los agentes de escucha, se debe crear e implementar una directiva de L7 que contenga el ID de grupo para que el grupo se “active” y comience a recibir solicitudes de tráfico.
Un grupo puede ser servido por varias directivas L7, pero permanece en el estado “activo” si al menos una directiva está asociada. Cuando se elimina la última directiva, el grupo vuelve al estado “pending_create” hasta que se crea otra directiva y se asocia 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 directivas de OpenStack L7 y entidades Citrix ADC
OpenStack | Entidad Citrix ADC | Descripción |
Directiva L7 con acción REDIRECT_TO_POOL | Directiva de conmutación de contenido > Acción de conmutación de contenido | Citrix ADM crea una directiva de conmutación de contenido enlazada al servidor virtual de conmutación de contenido y asociada a una acción de cambio de contenido que especifica el grupo de destino de servidores de aplicaciones 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 enlazada al servidor virtual de conmutación de contenido y asociada a una acción de respuesta que especifica la dirección URL de destino que se presentará a los usuarios. |
Directiva L7 con acción REJECT | Directiva de respuesta > Dejar caer la solicitud | Citrix ADM crea una directiva de respondedor enlazada al servidor virtual de conmutación de contenido y asociada a una acción de respondedor que descarta la solicitud. |
Si la acción de una directiva L7 que se evalúa como “true” 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 de directivas
La evaluación de las directivas de L7 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 creada primero tiene el número “1” y las directivas creadas posteriormente se numeran consecutivamente. Pero usted puede cambiar las prioridades de las directivas y asignarles diferentes prioridades. 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 directiva nueva la misma prioridad que a una directiva existente, la nueva directiva tomará esa prioridad. Se reduce la prioridad de la directiva existente. 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 se agregará a la lista.
-
Si crea una nueva directiva y le asigna una posición mayor que el número de directivas ya en la lista, la nueva directiva se anexará a la lista, es decir, la nueva directiva siempre toma 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 se convierte en 4.
-
Si agrega una directiva a la lista o elimina una directiva de la lista, los valores de posición de directiva se reordenan desde 1 sin omitir 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 Citrix ADM, siempre hay una directiva predeterminada asociada a un csvserver
con una prioridad de 1. Esta directiva predeterminada especifica el número de conexiones TCP que un lbvserver
procesa en un determinado momento. Por lo tanto, cuando se crean las directivas de respuesta correspondientes y las directivas de conmutación de contenido en Citrix 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 conmutación 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 Citrix 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 generalmente no causa ningún conflicto si las directivas de conmutación de contenido y respuesta son mutuamente excluyentes. 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, escriba 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 Citrix ADM, siempre hay una directiva predeterminada asociada a un csvserver
con una prioridad de 1. Esta directiva predeterminada especifica el número de conexiones TCP que un lbvserver
procesa en un determinado momento. Por lo tanto, cuando se crean las directivas de respuesta correspondientes y las directivas de conmutación de contenido en Citrix 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 conmutación 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 Citrix 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 generalmente no causa ningún conflicto si las directivas de conmutación de contenido y respuesta son mutuamente excluyentes. 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, escriba 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 de L7 se realizan a través de comandos LBaaS de Neutron.
Establezca las variables de entorno en OpenStack y cree el equilibrador de carga (por ejemplo, LB1). Una vez creado correctamente el equilibrador de carga, cree el listener 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 policy11, una directiva de respuesta, al servidor de conmutación de contenido para rechazar solicitudes. Dado que no se ha creado ninguna regla para esta directiva, la directiva se evalúa como “false” y se rechaza la solicitud.
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 L7, el comando anterior implementa P2 junto con LB1, crea la acción de redirección de conmutación 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.