En esta página se incluyen dos ejemplos de balanceadores de carga de aplicación clásicos:
- Configurar el enrutamiento basado en parámetros de consulta
- Configurar el enrutamiento basado en encabezados HTTP
Para configurar la gestión del tráfico del balanceador de carga de aplicación externo global y del balanceador de carga de aplicación externo regional, consulta las siguientes páginas:
- Configurar la gestión del tráfico para un balanceador de carga de aplicación externo global
- Configurar la gestión del tráfico de un balanceador de carga de aplicación externo regional
Antes de empezar
- Consulta la información general sobre la gestión del tráfico de los balanceadores de carga de aplicación externos.
- Familiarízate con la API de mapas de URLs.
Configurar el enrutamiento basado en parámetros de consulta
En este ejemplo se muestra cómo usar parámetros de consulta para hacer pruebas A/B buscando coincidencias en la cadena de consulta.
Añade dos grupos de instancias de backend
Para que el enrutamiento sea útil, debe tener varios back-ends.
Para configurar dos backends, tus VMs deben estar en dos grupos de instancias. En esta guía se describe cómo crear grupos de instancias gestionados con VMs Linux que tengan Apache en ejecución y, a continuación, configurar el balanceo de carga.
Los grupos de instancias gestionados proporcionan VMs que ejecutan los servidores backend de un balanceador de carga HTTP externo. Con fines de demostración, los backends sirven sus propios nombres de host.
Para simplificar, los backends se encuentran en la misma región. Si quieres configurar varias regiones, debes tener una plantilla de instancia configurada para la segunda región.
Consola
Crea una plantilla de instancia. En la Google Cloud consola, ve a la página Plantillas de instancia.
- Haz clic en Crear plantilla de instancia.
- En Nombre, escribe
lb-backend-template
. - Asegúrate de que el disco de arranque esté configurado con 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
. - Haz clic en Advanced options (Opciones avanzadas).
- Haz clic en Redes y configura el siguiente campo:
- En Etiquetas de red, introduzca
allow-health-check
.
- En Etiquetas de red, introduzca
Haz clic en Gestión. Introduce 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.
Crea un grupo de instancias gestionado. Ve a la página Grupos de instancias de la consola de Google Cloud Google Cloud.
- Haz clic en Crear grupo de instancias.
- Selecciona Nuevo grupo de instancias gestionado (sin reconocimiento del estado). Para obtener más información, consulta Grupos de instancias gestionados con o sin reconocimiento del estado.
- En Nombre, escribe
first-example-ig
. - En Ubicación, selecciona Una sola zona.
- En Región, selecciona la que prefieras. En este ejemplo se usa
us-east1
. - En Zona, selecciona
us-east1-b
. - En Plantilla de instancia, selecciona la plantilla de instancia
lb-backend-template
. - En Número máximo de instancias, introduce
2
. - En Modo de autoescalado, selecciona
Off:do not autoscale
. - Haz clic en Crear.
Crea otro grupo de instancias gestionado como este. Asigna el nombre second-example-ig
a la segunda y básala en la plantilla lb-backend-template
.
gcloud
Crea una plantilla de instancia.
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 gestionado a partir 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 gestionado a partir de la plantilla.
gcloud compute instance-groups managed create second-example-ig \ --template=lb-backend-template --size=2 --zone=us-east1-c
Configurar una regla de cortafuegos
En este ejemplo, se crea la regla de cortafuegos fw-allow-health-check
.
Se trata de una regla de entrada que permite el tráfico de los sistemas de comprobación del 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 VMs.
Consola
- En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Ve a Políticas de cortafuegos - Haz clic en Crear regla de cortafuegos para crear la segunda regla de cortafuegos:
- Asigne un Nombre de
fw-allow-health-check
. - En Red, selecciona
Default
. - En Objetivos, seleccione Etiquetas de destino especificadas.
- Rellene el campo Etiquetas de destino con
allow-health-check
. - En Filtro de origen, elija Intervalos de IPv4.
- Asigna los valores
130.211.0.0/22
y35.191.0.0/16
a Intervalos de IPv4 de origen. - En Protocolos y puertos, selecciona Protocolos y puertos especificados.
- Marca la casilla TCP e introduce
80
en 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
Reservar una dirección IP externa
Ahora que tus instancias están en funcionamiento, configura una dirección IP externa estática global que tus clientes usan para llegar a tu balanceador de carga.
Consola
- Ve a la página Direcciones IP externas de la Google Cloud consola.
Ve a la página Direcciones IP externas - Haz clic en Reservar dirección estática para reservar una dirección IPv4.
- Asigne un Nombre de
lb-ipv4-1
. - Configure el nivel de red como Estándar.
- Configura IPv4 (versión de IP) como IPv4.
- En Tipo, seleccione Global.
- Haz clic en Reservar.
- Compruebe que el Tipo sea Global.
- Haz clic en Reservar.
gcloud
gcloud compute addresses create lb-ipv4-1 \ --ip-version=IPV4 \ --network-tier=PREMIUM \ --global
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Configurar los backends del balanceador de carga
Consola
Actualmente, la consola Google Cloud no admite la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
- Crea una comprobación del estado.
gcloud compute health-checks create http http-basic-check \ --port 80
- Crea el primer servicio de backend.
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
load-balancing-scheme=EXTERNAL_MANAGED
. Este ajuste ofrece funciones avanzadas de gestión del tráfico. - En el caso de un balanceador de carga de aplicación 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
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI 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
- Añade tu primer grupo de instancias como backend al 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
- Añade el segundo grupo de instancias como backend al 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
Crear el mapa de URLs
Consola
Actualmente, la consola Google Cloud no admite 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
. SustituyePROJECT_ID
por el ID de tu 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 URLs.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Si las pruebas se superan y el comando muestra un mensaje de éxito, guarde los cambios en el mapa de URLs.
Actualiza el mapa de URLs.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Crear el proxy de destino y la regla de reenvío
Consola
Actualmente, la consola Google Cloud no admite 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 URLs.
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 entrantes al proxy.
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
load-balancing-scheme=EXTERNAL_MANAGED
. Este ajuste ofrece funciones avanzadas de gestión del tráfico. - En el caso de un balanceador de carga de aplicación 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
-
En el caso de un balanceador de carga de aplicación externo global, usa el comando de gcloud CLI con
Pruebas
Anota la dirección IPv4 que se ha reservado:
gcloud compute addresses describe lb-ipv4-1 \ --format="get(address)" \ --global
Para probar esta configuración, ejecuta el siguiente comando:
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
.
Configurar el enrutamiento basado en encabezados HTTP
En este ejemplo se muestra cómo añadir y quitar encabezados HTTP para hacer un enrutamiento inteligente.
Antes de empezar
Puede usar un balanceador de carga de aplicación externo que ya tenga o crear uno.
Puedes usar esta función con cualquiera de los tipos de backend admitidos. En este ejemplo, se presupone que usas VMs en un grupo de instancias.
Para configurar un balanceador de carga sencillo, consulta el ejemplo basado en parámetros de consulta que se muestra más arriba.
Actualizar el mapa de URLs
Consola
Actualmente, la consola Google Cloud no admite la configuración del enrutamiento basado en encabezados y parámetros. En su lugar, usa gcloud
o la API.
gcloud
En este ejemplo se muestra cómo usar encabezados de solicitud HTTP para hacer pruebas A/B. Para ello, se comparan los valores de los encabezados HTTP de la solicitud.
Crea un archivo YAML
/tmp/web-map-http.yaml
. SustituyePROJECT_ID
por el ID de tu 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 URLs.
gcloud compute url-maps validate --source /tmp/web-map-http.yaml
Si las pruebas se superan y el comando muestra un mensaje de éxito, guarde los cambios en el mapa de URLs.
Actualiza el mapa de URLs.
gcloud compute url-maps import web-map-http \ --source /tmp/web-map-http.yaml \ --global
Pruebas
Con la dirección IPv4 del balanceador de carga asociado, prueba esta configuración ejecutando el siguiente comando:
curl http://IP_ADDRESS -H "ABTest: A"
curl http://IP_ADDRESS -H "ABTest: B"