En esta página, se incluyen dos ejemplos de balanceador de cargas de aplicaciones clásico:
- Configura el enrutamiento basado en parámetros de consulta
- Configura el enrutamiento basado en encabezados HTTP
Si quieres configurar la administración del tráfico para el balanceador de cargas de aplicaciones externo global y el balanceador de cargas de aplicaciones externo regional, consulta las siguientes páginas:
- Configura la administración del tráfico en el balanceador de cargas de aplicaciones externo
- Configura la administración del tráfico en el balanceador de cargas de aplicaciones externo regional
Antes de comenzar
- Lee la descripción general de la administración del tráfico en los balanceadores de cargas de aplicaciones externos.
- Familiarízate con la API de mapas de URL.
Configura el enrutamiento basado en parámetros de consulta
En este ejemplo, se demuestra el uso de parámetros de consulta para hacer pruebas A/B mediante la coincidencia en la string de consulta.
Agrega dos grupos de instancias de backend
Para que el enrutamiento sea útil, debes tener varios backends.
Para configurar dos backends, tus VM deben estar en dos grupos de instancias. En esta guía, se describe cómo crear un grupo de instancias administrado con las VM de Linux en las que se ejecuta Apache y, luego, configurar el balanceo de cargas.
Los grupos de instancias administrados proporcionan VM que ejecutan los servidores de backend de un balanceador de cargas HTTP externo. A modo de demostración, los backends entregan sus propios nombres de host.
Para hacerlo más simple, los backends residen en la misma región. Si deseas una configuración multirregional, debes tener una plantilla de instancias configurada para la segunda región.
Console
Cree una plantilla de instancias. En la consola de Google Cloud, ve a la página Plantillas de instancia.
- Haz clic en Crear plantilla de instancias.
- En Nombre, ingresa
lb-backend-template
. - Asegúrate de que el disco de arranque esté configurado como
una imagen de Debian, como
Debian GNU/Linux 12 (bookworm). En estas instrucciones, se usan comandos que solo están disponibles en Debian, como
apt-get
. - Haga clic en Opciones avanzadas.
- Haz clic en Herramientas de redes y configura el siguiente campo:
- En Etiquetas de red, ingresa
allow-health-check
.
- En Etiquetas de red, ingresa
Haz clic en Administración. Ingresa la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio.
#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2
Haz clic en Crear.
Cree un grupo de instancias administrado. Ve a la página Grupos de instancias en la consola de Google Cloud.
- Haz clic en Crear grupo de instancias.
- Selecciona Nuevo grupo de instancias administrado (sin estado). Para obtener más información, consulta MIG sin estado o con estado.
- En Nombre, ingresa
first-example-ig
. - En Ubicación, selecciona Zona única.
- En Región, selecciona tu región preferida. En este ejemplo, se usa
us-east1
. - En Zona, selecciona
us-east1-b
. - En Plantilla de instancias, selecciona la plantilla de instancias
lb-backend-template
. - En Cantidad máxima de instancias, ingresa
2
. - En Modo de ajuste de escala automático, selecciona
Off:do not autoscale
. - Haz clic en Crear.
Crea otro grupo de instancias administrado como este. Nombra la segunda second-example-ig
y usa la plantilla lb-backend-template
como base.
gcloud
Cree una plantilla de instancias.
gcloud compute instance-templates create lb-backend-template \ --region=us-east1 \ --network=default \ --subnet=default \ --tags=allow-health-check \ --image-family=debian-12 \ --image-project=debian-cloud \ --metadata=startup-script='#! /bin/bash apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl vm_hostname="$(curl -H "Metadata-Flavor:Google" \ http://metadata.google.internal/computeMetadata/v1/instance/name)" echo "Page served from: $vm_hostname" | \ tee /var/www/html/index.html systemctl restart apache2'
Crea el primer grupo de instancias administrado en función de la plantilla.
gcloud compute instance-groups managed create first-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-b
Crea el segundo grupo de instancias administrado en función de la plantilla.
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
Configura una regla de firewall
En este ejemplo, se crea la regla de firewall fw-allow-health-check
.
Esta es una regla de entrada que permite el tráfico de los sistemas de verificación de estado de Google Cloud (130.211.0.0/22
y 35.191.0.0/16
). En este ejemplo, se usa la etiqueta de destino allow-health-check
para identificar las VM.
Console
- En la consola de Google Cloud, ve a la página Firewall.
Ir a Políticas de firewall - Haz clic en Crear regla de firewall para crear la segunda regla de firewall:
- Ingresa un Nombre de
fw-allow-health-check
. - En Red selecciona
Default
. - En Destinos, selecciona Etiquetas de destino especificadas.
- Propaga el campo Etiquetas de destino con
allow-health-check
. - Configura Filtro de fuente como Rangos de IPv4.
- Establece Rangos de IPv4 de origen en
130.211.0.0/22
y35.191.0.0/16
. - En Protocolos y puertos, selecciona Protocolos y puertos especificados.
- Selecciona la casilla de verificación TCP y, luego, ingresa
80
para los números de puerto. - Haz clic en Crear.
gcloud
gcloud compute firewall-rules create fw-allow-health-check \ --network=default \ --action=allow \ --direction=ingress \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --target-tags=allow-health-check \ --rules=tcp
Reserva una dirección IP externa
Ahora que tus instancias están en funcionamiento, configura una dirección IP externa, estática y global que tus clientes usarán para llegar al balanceador de cargas.
Console
- Ve a la página Direcciones IP externas en la consola de Google Cloud.
Ir a la página Direcciones IP externas - Haz clic en Reservar dirección estática para reservar una dirección IPv4.
- Asigna un Nombre de
lb-ipv4-1
. - Establece el nivel de red en Estándar.
- Configura la Versión de IP como IPv4.
- Configura el Tipo como Global.
- Haz clic en Reservar.
- Asegúrate de que el Tipo esté configurado como Global.
- Haz clic en Reservar.
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
Préstale atención a la dirección IPv4 que estaba reservada:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Configura los backends del balanceador de cargas
Console
Por el momento, la consola de Google Cloud no es compatible con la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
- Crea una verificación de estado.
gcloud compute health-checks create http http-basic-check \ --port 80
- Crea el primer servicio de backend.
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
load-balancing-scheme=EXTERNAL_MANAGED
. Esta configuración ofrece capacidad avanzada de administración de tráfico. - Para un balanceador de cargas de aplicaciones clásico, usa
load-balancing-scheme=EXTERNAL
.
gcloud compute backend-services create service-a \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
- Crea el segundo servicio de backend.
gcloud compute backend-services create service-b \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --global-health-checks \ --protocol HTTP \ --health-checks http-basic-check \ --global
- Agrega tu primer grupo de instancias como backend del primer servicio de backend.
gcloud compute backend-services add-backend service-a \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=first-example-ig \ --instance-group-zone=us-east1-b \ --global
- Agrega tu segundo grupo de instancias como backend del segundo servicio de backend.
gcloud compute backend-services add-backend service-b \ --balancing-mode=UTILIZATION \ --max-utilization=0.8 \ --capacity-scaler=1 \ --instance-group=second-example-ig \ --instance-group-zone=us-east1-c \ --global
Crea el mapa de URL
Console
Por el momento, la consola de Google Cloud no es compatible con la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
Crea un archivo YAML
/tmp/web-map-http.yaml
. ReemplazaPROJECT_ID
por el ID del proyecto.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a hostRules: - hosts: - '*' pathMatcher: path-matcher-1 name: web-map-http pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / queryParameterMatches: - name: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b selfLink: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/urlMaps/web-map-http tests: - description: Test routing for query ABTest with A host: example.com path: /?ABTest=A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a expectedOutputUrl: http://example.com/?ABTest=A - description: Test routing for query ABTest with B host: example.com path: /?ABTest=B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b expectedOutputUrl: http://example.com/?ABTest=B
Valida el mapa de URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Si las pruebas pasan y el comando genera un mensaje de éxito, guarda los cambios en el mapa de URL.
Actualiza el mapa de URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Crea el proxy de destino y la regla de reenvío
Console
Por el momento, la consola de Google Cloud no es compatible con la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
- Crea un proxy HTTP de destino para enrutar las solicitudes a tu mapa de URL.
gcloud compute target-http-proxies create http-lb-proxy \ --url-map web-map-http
- Crea una regla de reenvío global para enrutar las solicitudes de contenido nuevo al proxy.
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
load-balancing-scheme=EXTERNAL_MANAGED
. Esta configuración ofrece capacidad avanzada de administración de tráfico. - Para un balanceador de cargas de aplicaciones clásico, usa
load-balancing-scheme=EXTERNAL
.
gcloud compute forwarding-rules create http-content-rule \ --load-balancing-scheme=LOAD_BALANCING_SCHEME \ --network-tier=PREMIUM \ --address=lb-ipv4-1 \ --global \ --target-http-proxy=http-lb-proxy \ --ports=80
-
Para un balanceador de cargas de aplicaciones externo global, usa el comando de la CLI de gcloud con
Prueba
Préstale atención a la dirección IPv4 que se reservó:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Ejecuta el siguiente comando para probar esta configuración:
curl http://IP_ADDRESS?ABTest=A
curl http://IP_ADDRESS?ABTest=B
En un navegador, abre http://IP_ADDRESS?ABTest=A
y http://IP_ADDRESS?ABTest=B
.
Configura el enrutamiento basado en encabezados HTTP
En este ejemplo, se muestra cómo agregar y quitar encabezados HTTP para realizar un enrutamiento inteligente.
Antes de comenzar
Puedes usar un balanceador de cargas de aplicaciones externo existente o crear uno nuevo.
Puedes usar esta función con cualquiera de los tipos de backend compatibles. En este ejemplo, se supone que usas VM en un grupo de instancias.
Para configurar un balanceador de cargas simple, revisa el ejemplo anterior basado en parámetros de consulta.
Actualiza el mapa de URL
Console
Por el momento, la consola de Google Cloud no es compatible con la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
En este ejemplo, se demuestra el uso de encabezados de solicitud HTTP para hacer pruebas A/B mediante la coincidencia de valores en los encabezados HTTP de la solicitud.
Crea un archivo YAML
/tmp/web-map-http.yaml
. ReemplazaPROJECT_ID
por el ID del proyecto.defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a kind: compute#urlMap name: web-map-http hostRules: - hosts: - '*' pathMatcher: path-matcher-1 pathMatchers: - defaultService: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a name: path-matcher-1 routeRules: - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: A priority: 0 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - matchRules: - prefixMatch: / headerMatches: - headerName: ABTest exactMatch: B priority: 1 service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b tests: - description: Test routing for query ABTest with A host: example.com path: / headers: - name: ABTest value: A service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-a - description: Test routing for query ABTest with B host: example.com path: / headers: - name: ABTest value: B service: https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/backendServices/service-b
Valida el mapa de URL.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Si las pruebas pasan y el comando genera un mensaje de éxito, guarda los cambios en el mapa de URL.
Actualiza el mapa de URL.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Prueba
Con la dirección IPv4 del balanceador de cargas asociado, ejecuta el siguiente comando para probar esta configuración:
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"