Conceptos del mapa de URL

Los balanceadores de cargas HTTP(S) de Google Cloud Platform usan un mapa de URL para dirigir solicitudes entrantes a servicios de backend y depósitos de backend.

Cada balanceador de cargas HTTP(S) que crees debe tener un mapa de URL. Cuando creas un balanceador de cargas HTTP(S) con GCP Console, el nombre del balanceador de cargas y el mapa de URL los mismos. Cada mapa de URL dirige el tráfico a un servicio de backend o depósito de backend predeterminados. Además de este valor predeterminado, puedes dirigir el tráfico a diferentes servicios y depósitos de backend según el nombre de host solicitado y la parte de la ruta de una URL.

Por ejemplo, puede enrutar solicitudes de https://example.com/video a un servicio de backend, a solicitudes de https://example.com/audio a un servicio de backend diferente y solicitudes de https://example.com/graphics a un depósito de backend de Cloud Storage, todo en un solo mapa de URL y en un balanceador de cargas HTTP(S).

Antes de leer este tema, asegúrate de estar familiarizado con los conceptos generales del balanceo de cargas HTTP(S).

En este documento, se describe cómo funcionan los mapas de URL con los balanceadores de cargas de HTTPS(S). Traffic Director, el plano de control de tráfico completamente administrado de GCP para mallas de servicio, usa mapas de URL y admite parámetros de configuración adicionales. Consulta la documentación de Traffic Director para obtener más información sobre estos parámetros.

Acerca de los mapas de URL

Cuando una solicitud llega al balanceador de cargas, este la enruta a un servicio o depósito de backend en particular según la configuración en un mapa de URL.

Por ejemplo, supón que tienes la configuración siguiente:

  • Una dirección IP. Todas las solicitudes a tu organización van a la misma dirección IP y al mismo balanceador de cargas. El tráfico se dirige a diferentes servicios de backend según la URL de la solicitud.
  • Dos dominios
    • example.net, que aloja videos de capacitación.
    • example.org, que aloja el sitio web de la organización.
  • Cuatro conjuntos de servidores
    • Uno aloja el sitio web de la organización (servicio de backend: org-site).
    • Uno aloja el sitio web general del video de capacitación (servicio de backend: video-site).
    • Uno aloja videos de capacitación en alta definición (HD) (servicio de backend: video-hd).
    • Uno aloja videos de capacitación en definición estándar (SD) (servicio de backend: video-sd).

Esto es lo que necesitas que ocurra:

  • Que las solicitudes a example.org (o a cualquier dominio que no sea example.org) se dirijan al servicio de backend de org-site.
  • Que las solicitudes a example.net que no coincidan con rutas de acceso más específicas se dirijan al servicio de backend de video-site.
  • Que las solicitudes a example.net/video/hd/* se dirijan al servicio de backend de video-hd.
  • Que las solicitudes a example.net/video/sd/* se dirijan al servicio de backend de video-sd.
Ejemplo de configuración del servicio (haz clic para ampliar)
Ejemplo de configuración del servicio (haz clic para ampliar)

Puedes crear un mapa de URL que lo configure. En la sección siguiente, se describen algunos de los componentes del mapa de URL con los que trabajarás.

Componentes del mapa de URL

Un mapa de URL es un recurso de configuración de GCP que dirige las solicitudes de URL a servicios o depósitos de backend. Para ello, usa el nombre de host y las partes de la ruta de cada URL que procesa:

  • nombre de host: es la parte del nombre de dominio de una URL; por ejemplo, la parte del nombre del host de la URL http://example.net/video/hd es example.net.
  • ruta: es la parte de una URL que sigue al nombre de host; por ejemplo, la parte de la ruta de la URL http://example.net/video/hd es /video/hd.

Para controlar qué servicios o depósitos de backend reciben solicitudes entrantes, usa los siguientes parámetros de configuración del mapa de URL:

Flujo básico del mapa de URL (haz clic para ampliar)
Flujo básico del mapa de URL (haz clic para ampliar)
  • Servicio predeterminado o depósito de backend predeterminado: cuando creas un mapa de URL, debes especificar un servicio de backend predeterminado o un depósito de backend predeterminado, pero no ambos. Este valor predeterminado representa el depósito o servicio de backend al que GCP dirigirá las solicitudes de URL con cualquier nombre de host, a menos que exista una regla del host aplicable.

  • Regla de host: dirige las solicitudes enviadas a uno o más nombres de host asociados a un comparador de rutas único. La parte del nombre de host de una URL coincide con exactitud con el conjunto de nombres de host configurados de la regla de host. Para dirigir las solicitudes de http://example.net/video/hd a un comparador de rutas, necesitas una sola regla de host que, al menos, incluya el nombre de host example.net. Esa misma regla de host también podría manejar solicitudes de otros nombres de host, pero los dirigiría al mismo comparador de rutas de acceso. Si necesitas dirigir solicitudes a diferentes comparadores de ruta, debes usar diferentes reglas de host. Dos reglas de host en un mapa de URL no pueden tener el mismo nombre de host. Es posible hacer coincidir todos los nombres de host si especificas el carácter comodín * en la regla de host. Por ejemplo, para las URL http://example.org, http://example.net/video/hd y http://example.com/audio, los tres nombres de host example.org, example.net y example.com pueden coincidir si se especifica * en la regla de host. También es posible hacer coincidir un nombre de host parcial mediante el carácter comodín *. Por ejemplo, una regla de host *.example.net se compara con los nombres de host foo.example.net y bar.example.net.

  • Comparador de rutas de acceso: un comparador de rutas de acceso es el parámetro de configuración al que hace referencia una regla de host. Este define la relación entre la parte de la ruta de acceso de una URL y el servicio o el depósito de backend que debe entregar la solicitud. Un comparador de rutas de acceso consta de dos elementos:

    • Un servicio predeterminado de comparador de rutas de acceso o un depósito de backend predeterminado de comparador de rutas de acceso: para cada comparador de rutas de acceso, debes especificar, al menos, un servicio de backend predeterminado o un depósito de backend predeterminado, pero no ambos. Este valor predeterminado representa el servicio o depósito de backend al que GCP dirigirá solicitudes de URL, cuyos nombres de host coinciden con una regla de host asociada al comparador de rutas y cuyas rutas de URL no coinciden con ninguna regla del comparador de rutas de acceso.

    • Reglas de ruta de acceso: para cada comparador de rutas de acceso, puedes especificar una o más reglas de ruta, que son pares clave-valor que asignan una ruta de URL a un solo servicio o depósito de backend. En la sección siguiente, Orden de las operaciones, encontrarás más información sobre cómo funcionan las reglas de la ruta de acceso.

Orden de las operaciones

Para un nombre de host y una ruta determinada en una URL solicitada, GCP usa el procedimiento siguiente a fin de dirigir la solicitud al servicio o depósito de backend correcto, como está configurado en tu mapa de URL:

  • Si el mapa de URL no contiene una regla de host para el nombre de host de la URL, GCP dirige las solicitudes al servicio o depósito de backend del mapa de URL predeterminado, según cuál definiste.

  • Si el mapa de URL contiene una regla de host que incluye el nombre del host de la URL, se consulta el comparador de rutas de acceso al que hace referencia esa regla de host.

    • Si el comparador de rutas de acceso contiene una regla de ruta que coincide con exactitud con la ruta de la URL, GCP dirige las solicitudes al servicio o depósito de backend para esa regla de ruta.

    • Si el comparador de rutas de acceso no contiene una regla de ruta que coincida con exactitud con la ruta de la URL, pero sí contiene una regla de ruta que termina en /*, cuyo prefijo coincide con la sección más larga de la ruta de la URL, GCP dirige las solicitudes al servicio o depósito de backend para esa regla de ruta. Por ejemplo, para el mapa de URL que contiene dos reglas del comparador de rutas /video/hd/movie1 y /video/hd/*, si la URL contiene la ruta exacta /video/hd/movie1, se compara con esa regla de ruta.

    • Si ninguna de las condiciones anteriores es verdadera, GCP dirige las solicitudes al servicio o depósito de backend predeterminado del comparador de rutas de acceso, según cuál definiste.

Restricciones del comparador de rutas de acceso

Los comparadores y las reglas de rutas tienen las restricciones siguientes:

  • Una regla de ruta solo puede incluir un carácter comodín (*) después de un carácter de barra diagonal (/). Por ejemplo, /videos/* y /videos/hd/* son válidos para las reglas de ruta, pero /videos* y /videos/hd* no.

  • Las reglas de ruta no usan expresiones regulares ni coincidencias de substrings. Por ejemplo, las reglas de ruta para /videos/hd o /videos/hd/* no se aplican a una URL con la ruta /video/hd-abcd. Sin embargo, una regla de ruta para /video/* se aplica a esa ruta.

  • Los comparadores de rutas de acceso (y los mapas de URL en general) no ofrecen características que funcionen como las directivas LocationMatch de Apache. Si tienes una aplicación que genera rutas de URL dinámicas que tienen un prefijo común, como /videos/hd-abcd y /videos/hd-pqrs, y necesitas enviar solicitudes realizadas a esas rutas a diferentes servicios de backend, es posible que no puedas lograrlo con un mapa de URL. Para casos simples que contienen solo algunas URL dinámicas posibles, quizás puedas crear un comparador de rutas de acceso con el conjunto limitado de reglas de ruta. Para casos más complejos, deberás generar una coincidencia de expresiones regulares con base en rutas en tus VM de backend.

Un nombre de host solo puede hacer referencia a una regla de host única, y una regla de host solo puede hacer referencia a un comparador de rutas de acceso único. Sin embargo, una sola regla de host puede procesar varios nombres de host, y varias reglas de host pueden hacer referencia a un solo comparador de rutas de acceso. Como consecuencia, cada URL única se dirige a un solo servicio o depósito de backend:

  • GCP usa la parte del nombre de host de una URL para seleccionar una sola regla de host y el comparador de rutas de acceso al que hace referencia.
  • En el comparador de rutas de acceso, no puedes crear más de una regla de ruta para la misma ruta. Por ejemplo, las solicitudes de /videos/hd no se pueden dirigir a más de un servicio ni a un depósito de backend. Ten en cuenta que los servicios de backend pueden tener grupos de instancias de backend o grupos de extremos de red de backend en diferentes zonas y regiones y puedes crear depósitos de backend que usen clases Multi-Regional Storage.

Protocolos y mapas de URL

Puedes usar el mismo mapa de URL, reglas de host y comparadores de rutas de acceso para procesar las solicitudes HTTP y HTTPS enviadas por los clientes, siempre que un proxy HTTP y HTTPS de destino hagan referencia al mapa de URL.

Los mapas de URL no proporcionan un redireccionamiento del protocolo para las conexiones entre los clientes y el balanceador de cargas. Por ejemplo, no puedes usar un mapa de URL para indicar a los sistemas cliente que cambien de HTTP a HTTPS. Debes implementar todos los redireccionamientos del protocolo del cliente en tus VM de backend.

Mapa de URL más simple

El mapa de URL más simple solo tiene un servicio de backend predeterminado o un depósito de backend predeterminado. No contiene reglas de host ni comparadores de rutas de acceso. El servicio o depósito de backend predeterminado controla todas las URL solicitadas, cualquiera que hayas definido.

Si defines un servicio de backend predeterminado, GCP dirige las solicitudes a sus grupos de instancias de backend o a los grupos de extremos de red de backend según la configuración del servicio de backend.

Mapa de URL sin reglas, excepto las predeterminadas (haz clic para ampliar)
Mapa de URL sin reglas, excepto las predeterminadas (haz clic para ampliar)

Ejemplo de mapa de URL

En el ejemplo siguiente, se ilustra el orden de las operaciones para un mapa de URL. Por simplicidad conceptual, solo usa los servicios de backend. Sin embargo, puedes sustituirlos por depósitos de backend.

Con los pasos siguientes, se configura el mapa de URL para un balanceador de cargas de HTTP(S) de GCP. Si quieres obtener un ejemplo sobre cómo crear los otros componentes del balanceador de cargas HTTP(S), consulta cómo crear un balanceo de cargas basados en el contenido y entre regiones. Cada servicio de backend que se analiza en el ejemplo cuenta con un esquema externo y usa el protocolo HTTP, HTTPS o HTTP/2.

  1. Crea un mapa de URL para el balanceador de cargas y especifica un servicio de backend predeterminado. En este ejemplo, se crea un mapa de URL llamado video-org-url-map que hace referencia a un servicio de backend existente llamado org-site.

    gcloud compute url-maps create video-org-url-map \
        --default-service=org-site
    
  2. Crea un comparador de rutas de acceso denominado video-matcher con las características siguientes:

    • El servicio de backend predeterminado es video-site, un servicio de backend existente.
    • Agrega reglas de ruta que dirijan solicitudes para la ruta de URL /video/hd exacta o al prefijo de ruta de URL /video/hd/* a un servicio de backend existente llamado video-hd.
    • Agrega reglas de ruta que dirijan solicitudes para la ruta de URL /video/sd exacta o al prefijo de ruta de URL /video/sd/* a un servicio de backend existente llamado video-sd.
    gcloud compute url-maps add-path-matcher video-org-url-map \
        --path-matcher-name=video-matcher \
        --default-service=video-site \
        --path-rules=/video/hd=video-hd,/video/hd/*=video-hd,/video/sd=video-sd,/video/sd/*=video-sd
    
  3. Crea una regla de host para el nombre de host de example.net que haga referencia al comparador de rutas de acceso video-matcher.

    gcloud compute url-maps add-host-rule video-org-url-map \
        --hosts=example.net \
        --path-matcher-name=video-matcher
    

El mapa de URL video-org-url-map dirige las URL solicitadas a backends de la manera siguiente:

Mapa de URL con una regla de ruta, comparadores de rutas y una regla de host (haz clic para ampliar)
Mapa de URL con una regla de ruta, comparadores de rutas de acceso y una regla de host (haz clic para ampliar)

GCP procesa las solicitudes de URL según la tabla siguiente:

Nombre de host Rutas de URL Servicio de backend seleccionado Motivo de la selección
Nombre de host
example.org y todos los demás nombres de host diferentes a
example.net
todas las rutas org-site El nombre de host no figura en ninguna regla de host del mapa de URL, por lo que la solicitud se dirige al servicio de backend predeterminado del mapa de URL.
Nombre del host:
example.net
/video
/video/examples
video-site La solicitud va al servicio de backend predeterminado, ya que no existe una regla de ruta para /video/ o /video/*. La regla de host para example.net hace referencia a un comparador de rutas de acceso, pero este no tiene ninguna regla de ruta que se aplique a estas rutas.
Nombre del host:
example.net
/video/hd
/video/hd/movie1
/video/hd/movies/movie2
Otras URL que comienzan con /video/hd/*
video-hd Una regla de host para example.net hace referencia a un comparador de rutas de acceso cuyas reglas de ruta dirigen solicitudes a rutas de URL que coinciden con exactitud con /video/hd o que comienzan con /video/hd/* al servicio de backend de video-hd.
Nombre del host:
example.net
/video/sd
/video/sd/show1
/video/sd/shows/show2
Otras URL que comienzan con /video/sd/*
video-sd Una regla de host para example.net hace referencia a un comparador de rutas de acceso cuyas reglas de ruta dirigen solicitudes a rutas de URL que coinciden con exactitud con /video/sd o que comienzan con /video/sd/* al servicio de backend video-sd.

** Notas adicionales

Algunas características del mapa de URL que se describen en la documentación de Traffic Director no están disponibles para los balanceadores de cargas.

Próximos pasos