Configura el balanceo de cargas de HTTP(S)

En este documento, se indican los primeros pasos para configurar un balanceador de cargas HTTP(S). Antes de comenzar, asegúrate de estar familiarizado con los conceptos generales del balanceo de cargas de HTTP(S).

El balanceo de cargas de HTTP(S) de Google Cloud Platform ofrece balanceo de cargas global para las solicitudes HTTP(S) dirigidas a tus instancias.

El balanceo de cargas global requiere que uses el nivel Premium del servicio de red.

Puedes configurar reglas de URL que enruten algunas URL a un conjunto de instancias y el resto a otras. Las solicitudes siempre se enrutan al grupo de instancias más cercano al usuario, siempre que ese grupo tenga capacidad suficiente y sea apropiado para la solicitud. Si el grupo más cercano no tiene suficiente capacidad, la solicitud se envía al grupo más cercano que sí la tenga.

El balanceo de cargas de HTTP(S) admite direcciones IPv4 y también IPv6 para el tráfico de clientes. Las solicitudes de clientes de IPv6 se finalizan en la capa de balanceo de cargas y se redirigen mediante proxies IPv4 a tus backends.

Las cargas de las solicitudes HTTP se pueden balancear en el puerto 80 o en el 8080. Las cargas de las solicitudes HTTPS se pueden balancear en el puerto 443.

El balanceador de cargas actúa como capa de traducción HTTP/2 a HTTP/1.1, lo que significa que los servidores web siempre ven y responden solicitudes HTTP/1.1, pero las solicitudes que envía el navegador pueden ser HTTP/1.0, HTTP/1.1 o HTTP/2. No se admite la extracción de servidor HTTP/2.

Antes de comenzar

El balanceo de cargas de HTTP(S) organiza las instancias en grupos. Asegúrate de estar familiarizado con los grupos de instancias antes de usar el balanceo de cargas.

Configuración de ejemplo

Si quieres ir directo al grano y crear un balanceador de cargas funcional para hacer pruebas, los siguientes diagramas demuestran tres situaciones diferentes en las que se usa el servicio de balanceo de cargas de HTTP(S). La idea es brindarte un contexto práctico y demostrar la forma en la que puedes configurar el balanceo de cargas según tus necesidades específicas.

En el resto de esta página, se analizan en más detalle la construcción y el funcionamiento de los balanceadores de cargas.

Balanceo de cargas interregional

Representación del balanceo de cargas interregional

Puedes usar una dirección IP global que pueda redirigir a los usuarios de forma inteligente según su proximidad. Por ejemplo, si configuras instancias en América del Norte, Europa y Asia, los usuarios de todo el mundo serán enviados automáticamente a los servidores más cercanos, siempre y cuando esas instancias tengan capacidad suficiente. Si las instancias más cercanas no tienen capacidad suficiente, el balanceo de cargas interregional reenvía automáticamente a los usuarios a la siguiente región más cercana.


Balanceo de cargas según el contenido

Representación del balanceo de cargas según el contenido

El balanceo de cargas según el contenido usa el balanceo de cargas de HTTP(S) para distribuir el tráfico a diferentes instancias según la URL HTTP(S) entrante. Por ejemplo, puedes configurar un grupo de instancias para que maneje tu contenido de video y otro grupo para que maneje todo lo demás. Puedes configurar tu balanceador de cargas para que dirija el tráfico de example.com/video a los servidores de video y el de example.com/ a los servidores predeterminados.

También puedes usar el balanceo de cargas de HTTP(S) con depósitos de Google Cloud Storage. Una vez que hayas configurado tu balanceador de cargas, puedes agregarle depósitos de Cloud Storage.


Crea un balanceador de cargas combinado

Representación del balanceo de cargas interregional y según el contenido

El balanceo de cargas interregional y el balanceo de cargas según el contenido pueden funcionar en conjunto si usas varios servicios de backend y varias regiones. Puedes adaptar las situaciones que se describieron antes para crear tu propia configuración de balanceo de cargas que satisfaga tus necesidades. El instructivo sobre el balanceo de cargas de HTTP(S) muestra cómo generar una configuración de balanceo de cargas interregional y según el contenido.


Interfaces

Tu servicio de balanceo de cargas de HTTP(S) se puede configurar y actualizar mediante las siguientes interfaces:

  • La herramienta de línea de comandos de gcloud: una herramienta de línea de comandos incluida en el SDK de Cloud que se utiliza a menudo en la documentación del balanceo de cargas de HTTP(S) para realizar diversas tareas. Para obtener una descripción general completa de la herramienta, consulta la Guía de la herramienta de gcloud. Encontrarás comandos relacionados con el balanceo de cargas en el grupo de comandos de gcloud compute.

    También puedes obtener ayuda detallada para cualquier comando de gcloud si usas la marca --help:

    gcloud compute http-health-checks create --help
    
  • Google Cloud Platform Console: Las tareas de balanceo de cargas se pueden realizar a través de Google Cloud Platform Console.

  • API de REST: Todas las tareas de balanceo de cargas pueden realizarse con la API de Google Cloud Load Balancing. Los documentos de referencia de la API describen los recursos y métodos disponibles para ti.

Notas y restricciones

  • El balanceo de cargas de HTTP(S) admite la respuesta HTTP/1.1 100 Continue.
  • Si tus instancias de balanceo de cargas ejecutan una imagen de sistema operativo pública proporcionada por Google Cloud Platform, las reglas de firewall del sistema operativo estarán configuradas automáticamente para permitir el tráfico con balanceo de cargas. Si usas una imagen personalizada, tendrás que configurar el firewall del sistema operativo manualmente. Esto es independiente de la regla de firewall de GCP que debe crearse como parte de la configuración de un balanceador de cargas HTTP(S).
  • El balanceo de cargas no mantiene las instancias sincronizadas. Debes configurar tus propios mecanismos (por ejemplo, usar Deployment Manager) para asegurarte de que tus instancias tengan configuraciones y datos coherentes.

Soluciona problemas

El tráfico con balanceo de cargas no tiene la dirección de origen del cliente original

El tráfico del balanceador de cargas a tus instancias tiene una dirección IP en los rangos 130.211.0.0/22 y 35.191.0.0/16. Cuando visualices los registros de tus instancias de balanceo de cargas, no verás la dirección de origen del cliente original. En su lugar, verás direcciones de origen de este rango.

Aparece un error de permisos cuando intento ver un objeto en mi depósito de Cloud Storage

Para entregar objetos mediante el balanceo de cargas, los objetos de Cloud Storage deben ser de acceso público. Actualiza los permisos de los objetos que necesitas entregar para que puedan leerse públicamente.

La URL no entrega el objeto de Cloud Storage esperado

El objeto de Cloud Storage que se entrega se determina en función de tu mapa de URL y la URL que solicitas. Si la ruta de solicitud se mapea a un depósito de backend en tu mapa de URL, el objeto de Cloud Storage se determina agregando la ruta completa de la solicitud al depósito de Cloud Storage especificado en el mapa de URL.

Por ejemplo, si mapeas /static/* a gs://[EXAMPLE_BUCKET], la solicitud a https://<GCLB IP or Host>/static/path/to/content.jpg tratará de entregar gs://[EXAMPLE_BUCKET]/static/path/to/content.jpg. Si ese objeto no existe, aparecerá el siguiente mensaje de error en lugar del objeto:


NoSuchKey
The specified key does not exist.

La compresión no funciona

El balanceo de cargas de HTTP(S) no comprime ni descomprime las respuestas por su cuenta, pero puede entregar las respuestas que genera tu servicio de backend comprimidas mediante herramientas como gzip o DEFLATE.

Si las respuestas que entrega el balanceo de cargas de HTTP(S) no están comprimidas, pero deberían estarlo, verifica si el software del servidor web que se ejecuta en tus instancias está configurado para comprimir las respuestas. Hay software de servidor web que, en su configuración predeterminada, inhabilita automáticamente la compresión para las solicitudes que incluyen un encabezado Via, que indica que la solicitud se reenvió mediante un proxy. Dado que el balanceo de cargas de HTTP(S) es un proxy, agrega un encabezado Via a cada solicitud según se requiere en la especificación HTTP. Para habilitar la compresión, es posible que tengas que anular la configuración predeterminada del servidor web para indicarle que comprima las respuestas, incluso si la solicitud tenía un encabezado Via.

Si utilizas el software de servidor web nginx, modifica el archivo de configuración nginx.conf para habilitar la compresión. La ubicación de este archivo depende del lugar en el que está instalado nginx. En muchas distribuciones de Linux, el archivo se almacena en /etc/nginx/nginx.conf. Para permitir que la compresión de nginx funcione con el balanceo de cargas de HTTP(S), agrega las siguientes dos líneas a la sección http de nginx.conf:

gzip_proxied any;
gzip_vary on;

La primera línea habilita la compresión, incluso para las solicitudes reenviadas mediante un proxy como el balanceo de cargas de HTTP(S). La segunda línea agrega un encabezado Vary: Accept-Encoding a las respuestas. Vary: Accept-Encoding notifica a los proxies de almacenamiento en caché, como Cloud CDN, que deben mantener entradas de caché independientes para las variantes comprimidas y no comprimidas de los recursos que se pueden comprimir.

Después de modificar nginx.conf, es necesario que reinicies nginx antes de que utilice la configuración nueva. En muchas distribuciones Linux, nginx puede reiniciarse con solo ejecutar sudo service nginx restart o /etc/init.d/nginx restart.

Solución de problemas con HTTP/2 en los backends

Valor no válido en el campo resource.loadBalancingScheme: "EXTERNAL"

Aún no se admite el balanceo de cargas de red basado en servicios de backend.

Esto puede suceder si creas un servicio de backend sin seleccionar la opción global. Cuando emites un comando de gcloud como el siguiente, se te pide que especifiques una región o designes el balanceador de cargas como global:

gcloud beta compute backend-services create service-test \
    --health-checks=hc-test \
    --project=test1 \
    --protocol=http2

En el caso de este servicio de backend, se solicita lo siguiente:

- [service-test] choose a region or global:
[1] global
[2] region: [REGION_A_NAME]
[3] region: [REGION_B_NAME]
....
Please enter your numeric choice:

Para el balanceador de cargas HTTP(S), los servicios de backend deben ser globales, así que tienes que elegir la opción 1 o emitir el comando de gcloud con la opción --global:

gcloud beta compute backend-services create service-test \
    --health-checks=hc-test \
    --project=test \
    --protocol=http2 \
    --global

Errores 502 sin motivo

Asegúrate de que tu instancia de backend esté en buen estado y sea compatible con el protocolo HTTP/2. Para verificar esto, prueba la conectividad a la instancia de backend mediante HTTP/2. Cerciórate de que la VM utilice conjuntos de cifrado HTTP/2 que cumplan con las especificaciones. Por ejemplo, HTTP/2 no permite determinados conjuntos de cifrado de TLS 1.2. Consulta la lista negra de conjuntos de cifrado de TLS 1.2.

Una vez que hayas verificado que la VM utiliza el protocolo HTTP/2, asegúrate de que la configuración de tu firewall permita el paso del verificador de estado y el balanceador de cargas.

Si no hay problemas con la configuración del firewall, asegúrate de que el balanceador de cargas esté configurado para comunicarse con el puerto correcto de la VM.

Limitaciones de HTTP/2

  • En comparación con el protocolo HTTP(S), el uso de HTTP/2 entre el balanceador de cargas y la instancia puede requerir una cantidad significativamente mayor de conexiones TCP a la instancia. La agrupación de conexiones, una optimización que reduce la cantidad de conexiones cuando se usa el protocolo HTTP(S), no está disponible actualmente con HTTP/2.
  • El uso de HTTP/2 entre el balanceador de cargas y el backend no es compatible con lo siguiente:
    • Extracción del servidor
    • WebSockets

Pasos siguientes

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...