En este documento se explica cómo crear un balanceador de carga de aplicaciones interno entre regiones para enrutar solicitudes de contenido estático a cubos de Cloud Storage.
Antes de empezar
Asegúrate de que tu configuración cumpla los siguientes requisitos previos.
Instalar Google Cloud CLI
Algunas de las instrucciones de esta guía solo se pueden llevar a cabo con la CLI de Google Cloud. Para instalarla, consulta el documento Instalar gcloud CLI.
Puedes encontrar comandos relacionados con el balanceo de carga en el documento de referencias de la API y de la interfaz de línea de comandos de gcloud.
Permisos
Para seguir esta guía, debes crear segmentos de Cloud Storage y recursos de red en tu proyecto. Debes ser propietario o editor de un proyecto, o bien tener los siguientes roles de gestión de identidades y accesos de Compute Engine:
Tarea | Rol necesario |
---|---|
Crear redes, subredes y componentes de balanceador de carga | Rol Administrador de red de Compute (roles/compute.networkAdmin )
|
Añadir y eliminar reglas de cortafuegos | Rol Administrador de seguridad de Compute (roles/compute.securityAdmin )
|
Crear segmentos de Cloud Storage | Rol Administrador de objetos de Storage (roles/storage.objectAdmin )
|
Para obtener más información, consulta las siguientes guías:
Configurar un recurso de certificado SSL
En el caso de un balanceador de carga de aplicaciones interno entre regiones que use HTTPS como protocolo de solicitud y respuesta, crea un recurso de certificado SSL con Certificate Manager, tal como se describe en uno de los siguientes documentos:
- Desplegar un certificado gestionado por Google entre regiones emitido por tu instancia de Servicio de AC
- Desplegar un certificado gestionado por Google entre regiones con autorización de DNS
- Desplegar un certificado autogestionado entre regiones
Una vez que hayas creado el certificado, podrás adjuntarlo al proxy de destino HTTPS.
Te recomendamos que uses un certificado gestionado por Google.
Limitaciones
Se aplican las siguientes limitaciones a los segmentos de Cloud Storage cuando actúan como back-ends de un balanceador de carga de aplicaciones interno entre regiones:
No se admite el acceso privado a los segmentos, por lo que el segmento de backend debe ser accesible públicamente a través de Internet.
No se admiten URLs firmadas.
La integración de Cloud CDN no está disponible al crear cubos de backend para un balanceador de carga de aplicaciones interno entre regiones.
Cuando se usa un balanceador de carga de aplicaciones interno entre regiones para acceder a segmentos de backend, solo se admite el método HTTP
GET
. Puedes descargar contenido del segmento, pero no subir contenido al segmento a través del balanceador de carga de aplicaciones interno entre regiones.No puedes configurar un balanceador de carga de aplicación interno entre regiones con contenedores de Cloud Storage en un entorno de VPC compartida.
Descripción general de la configuración
Puede configurar un balanceador de carga de aplicaciones interno entre regiones en varias regiones, como se muestra en el siguiente diagrama:
Como se muestra en el diagrama de arquitectura, en este ejemplo se crea un balanceador de carga de aplicaciones interno multirregional en una red de nube privada virtual (VPC) con dos cubos de backend, donde cada cubo de backend hace referencia a un cubo de Cloud Storage. Los segmentos de Cloud Storage se encuentran en las regiones us-east1
y asia-east1
.
Esta arquitectura de implementación ofrece alta disponibilidad. Si falla el balanceador de carga de aplicación interno entre regiones de una región, las políticas de enrutamiento de DNS dirigen el tráfico a un balanceador de carga de aplicación interno entre regiones de otra región.
Configurar la red y las subredes
En la red de VPC, configura una subred en cada región en la que se vaya a configurar la regla de reenvío de tus balanceadores de carga. Además, configure un proxy-only-subnet
en cada región en la que quiera configurar el balanceador de carga.
En este ejemplo se usan la siguiente red VPC, región y subredes:
Red La red es una red de VPC en modo personalizado llamada
lb-network
.Subredes del balanceador de carga. Una subred llamada
subnet-us
en la regiónus-east1
usa10.1.2.0/24
para su intervalo de IP principal. Una subred llamadasubnet-asia
en la regiónasia-east1
usa10.1.3.0/24
para su intervalo de IP principal.Subred para proxies Envoy. Una subred llamada
proxy-only-subnet-us-east1
en la regiónus-east1
usa10.129.0.0/23
como intervalo de IP principal. Una subred llamadaproxy-only-subnet-asia-east1
en la regiónasia-east1
usa10.130.0.0/23
para su intervalo de IP principal.
Se puede acceder a los balanceadores de carga de aplicaciones internos entre regiones desde cualquier región de la VPC. De esta forma, los clientes de cualquier región pueden acceder a los backends de tu balanceador de carga a nivel mundial.
Configurar las subredes de la regla de reenvío del balanceador de carga
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En Nombre, escribe
lb-network
.En la sección Subredes, selecciona Personalizado en Modo de creación de subredes.
En la sección Nueva subred, introduce la siguiente información:
- Nombre:
subnet-us
- Selecciona una región:
us-east1
- Intervalo de direcciones IP:
10.1.2.0/24
- Nombre:
Haz clic en Listo.
Haz clic en Añadir subred.
Crea otra subred para la regla de reenvío del balanceador de carga en otra región. En la sección Nueva subred, introduce la siguiente información:
- Nombre:
subnet-asia
- Región:
asia-east1
- Intervalo de direcciones IP:
10.1.3.0/24
- Nombre:
Haz clic en Listo.
Haz clic en Crear.
gcloud
Crea una red VPC personalizada llamada
lb-network
con el comandogcloud compute networks create
.gcloud compute networks create lb-network --subnet-mode=custom
Crea una subred en la red de VPC
lb-network
de la regiónus-east1
con el comandogcloud compute networks subnets create
.gcloud compute networks subnets create subnet-us \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-east1
Crea una subred en la red de VPC
lb-network
de la regiónasia-east1
con el comandogcloud compute networks subnets create
.gcloud compute networks subnets create subnet-asia \ --network=lb-network \ --range=10.1.3.0/24 \ --region=asia-east1
Configurar las subredes de solo proxy
Una subred de solo proxy proporciona un conjunto de direcciones IP que Google Cloud usa para ejecutar proxies de Envoy en tu nombre. Los proxies terminan las conexiones del cliente y crean nuevas conexiones con los back-ends.
Todos los balanceadores de carga regionales basados en Envoy de la misma región que la red de VPC usan esta subred de solo proxy. Solo puede haber una subred solo proxy activa para un propósito determinado por región y por red. En este ejemplo, creamos dos subredes de solo proxy: una en la región us-east1
y otra en la región asia-east1
.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haga clic en el nombre de la red VPC que ha creado.
En la pestaña Subred, haz clic en Añadir subred.
Introduce la siguiente información:
- En Nombre, escribe
proxy-only-subnet-us
. - En Región, escribe
us-east1
. - En Propósito, selecciona Proxy gestionado entre regiones.
- En Intervalo de direcciones IP, introduce
10.129.0.0/23
.
- En Nombre, escribe
Haz clic en Añadir.
Crea otra subred de solo proxy en la región
asia-east1
. En la pestaña Subred, haz clic en Añadir subred.Introduce la siguiente información:
- En Nombre, escribe
proxy-only-subnet-asia
. - En Región, escribe
asia-east1
. - En Propósito, selecciona Proxy gestionado entre regiones.
- En Intervalo de direcciones IP, introduce
10.130.0.0/23
.
- En Nombre, escribe
Haz clic en Añadir.
gcloud
Crea una subred de solo proxy en la región
us-east1
con el comandogcloud compute networks subnets create
.gcloud compute networks subnets create proxy-only-subnet-us \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=us-east1 \ --network=lb-network \ --range=10.129.0.0/23
Crea una subred de solo proxy en la región
asia-east1
con el comandogcloud compute networks subnets create
.gcloud compute networks subnets create proxy-only-subnet-asia \ --purpose=GLOBAL_MANAGED_PROXY \ --role=ACTIVE \ --region=asia-east1 \ --network=lb-network \ --range=10.130.0.0/23
Configurar una regla de cortafuegos
En este ejemplo se usa la siguiente regla de cortafuegos:
Una regla de entrada que permite el acceso SSH en el puerto
22
a la VM cliente. En este ejemplo, la regla de cortafuegos se llamafw-allow-ssh
.
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Haz clic en Crear regla de cortafuegos para crear la regla que permita las conexiones SSH entrantes en la VM cliente:
- Nombre:
fw-allow-ssh
- Red:
lb-network
- Sentido del tráfico: entrada
- Acción tras coincidencia: Permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-ssh
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
0.0.0.0/0
- Protocolos y puertos:
- Elige Protocolos y puertos especificados.
- Selecciona la casilla TCP y, a continuación, introduce
22
como número de puerto.
- Nombre:
Haz clic en Crear.
gcloud
Crea la regla de cortafuegos
fw-allow-ssh
para permitir la conectividad SSH a las VMs con la etiqueta de redallow-ssh
. Si omite--source-ranges
, Google Cloud interpreta que la regla se aplica a cualquier fuente.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Configurar los segmentos de Cloud Storage
El proceso para configurar los segmentos de Cloud Storage es el siguiente:
- Crea los segmentos.
- Copia el contenido en los segmentos.
Crear segmentos de Cloud Storage
En este ejemplo, creas dos segmentos de Cloud Storage: uno en la región us-east1
y otro en la región asia-east1
. Para las implementaciones de producción, le recomendamos que elija un cubo multirregional, que replica automáticamente los objetos en varias regiones. Google Cloud De esta forma, puede mejorar la disponibilidad de su contenido y la tolerancia a fallos de su aplicación.
Consola
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
Haz clic en
Crear.En el cuadro Ponle nombre al segmento, escribe un nombre único a nivel global que cumpla las directrices de nomenclatura.
Haz clic en Elige dónde quieres almacenar los datos.
En Tipo de ubicación, selecciona Región.
En la lista de regiones, selecciona us-east1.
Haz clic en Crear.
Haz clic en Segmentos para volver a la página Segmentos de Cloud Storage. Sigue estas instrucciones para crear un segundo segmento, pero define el valor de Ubicación como asia-east1.
gcloud
Crea el primer segmento en la región
us-east1
con el comandogcloud storage buckets create
.gcloud storage buckets create gs://BUCKET1_NAME \ --default-storage-class=standard \ --location=us-east1 \ --uniform-bucket-level-access
Crea el segundo segmento en la región
asia-east1
con el comandogcloud storage buckets create
.gcloud storage buckets create gs://BUCKET2_NAME \ --default-storage-class=standard \ --location=asia-east1 \ --uniform-bucket-level-access
Sustituye las variables BUCKET1_NAME y BUCKET2_NAME por los nombres de tus segmentos de Cloud Storage.
Copiar archivos gráficos en tus segmentos de Cloud Storage
Para que puedas probar la configuración, copia un archivo gráfico de un segmento de Cloud Storage público a tus segmentos de Cloud Storage.
Ejecuta los siguientes comandos en Cloud Shell y sustituye las variables de nombre de segmento por los nombres únicos de tus segmentos de Cloud Storage:
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/
Hacer que los segmentos de Cloud Storage se puedan leer públicamente
Para que todos los objetos de un segmento sean legibles para cualquier usuario de Internet público, concede al principal allUsers
el rol Lector de objetos de Storage
(roles/storage.objectViewer
).
Consola
Para conceder a todos los usuarios acceso para ver los objetos de tus cubos, repite el siguiente procedimiento para cada cubo:
- En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.
En la lista de segmentos, haga clic en el nombre del segmento que quiera hacer público.
Seleccione la pestaña Permisos, situada en la parte superior de la página.
En la sección Permisos, haz clic en el botón
Dar acceso. Aparecerá el cuadro de diálogo Dar acceso.En el campo Nuevos directores, introduce
allUsers
.En el campo Seleccionar un rol, introduce
Storage Object Viewer
en el cuadro de filtro y selecciona Visor de objetos de Storage en los resultados filtrados.Haz clic en Guardar.
Haz clic en Permitir acceso público.
gcloud
Para conceder a todos los usuarios acceso para ver objetos en tus cubos, ejecuta el comando buckets add-iam-policy-binding
.
gcloud storage buckets add-iam-policy-binding gs://BUCKET1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET2_NAME --member=allUsers --role=roles/storage.objectViewer
Sustituye las variables de nombre de segmento por los nombres únicos de tus segmentos de Cloud Storage.
Configurar el balanceador de carga con segmentos de backend
En esta sección se muestra cómo crear los siguientes recursos para un balanceador de carga de aplicaciones interno entre regiones:
- Dos segmentos de backend. Los segmentos de backend actúan como envoltorio de los segmentos de Cloud Storage que has creado anteriormente.
- Mapa de URLs
- Proxy de destino
- Dos reglas de reenvío globales con direcciones IP regionales. A las reglas de reenvío se les asignan direcciones IP de las subredes creadas para las reglas de reenvío del balanceador de carga. Si intentas asignar una dirección IP a la regla de reenvío desde la subred solo proxy, no se podrá crear la regla de reenvío.
En este ejemplo, puedes usar HTTP o HTTPS como protocolo de solicitud y respuesta entre el cliente y el balanceador de carga. Para crear un balanceador de carga HTTPS, debes añadir un recurso de certificado SSL al frontend del balanceador de carga.
Para crear los componentes de balanceo de carga mencionados anteriormente con la CLI de gcloud, sigue estos pasos:
Crea dos backend buckets, uno para cada Cloud Storage bucket, con el comando
gcloud compute backend-buckets create
. Los segmentos de backend tienen un esquema de balanceo de cargaINTERNAL_MANAGED
.gcloud compute backend-buckets create backend-bucket-cats \ --gcs-bucket-name=BUCKET1_NAME \ --load-balancing-scheme=INTERNAL_MANAGED
gcloud compute backend-buckets create backend-bucket-dogs \ --gcs-bucket-name=BUCKET2_NAME \ --load-balancing-scheme=INTERNAL_MANAGED
Crea un mapa de URLs para dirigir las solicitudes entrantes al segmento de backend con el comando
gcloud compute url-maps create
.gcloud compute url-maps create lb-map \ --default-backend-bucket=backend-bucket-cats \ --global
Configura las reglas de host y ruta del mapa de URLs con el comando
gcloud compute url-maps add-path-matcher
.En este ejemplo, el segmento de backend predeterminado es
backend-bucket-cats
, que gestiona todas las rutas que contiene. Sin embargo, cualquier solicitud dirigida ahttp://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg
usa el backendbackend-bucket-dogs
. Por ejemplo, si la carpeta/love-to-fetch/
también existe en tu backend predeterminado (backend-bucket-cats
), el balanceador de carga prioriza el backendbackend-bucket-dogs
porque hay una regla de ruta específica para/love-to-fetch/*
.gcloud compute url-maps add-path-matcher lb-map \ --path-matcher-name=path-matcher-pets \ --new-hosts=* \ --backend-bucket-path-rules="/love-to-fetch/*=backend-bucket-dogs" \ --default-backend-bucket=backend-bucket-cats
Crea un proxy de destino con el comando
gcloud compute target-http-proxies create
.Para el tráfico HTTP, crea un proxy HTTP de destino para enrutar las solicitudes al mapa de URLs:
gcloud compute target-http-proxies create http-proxy \ --url-map=lb-map \ --global
Para el tráfico HTTPS, crea un proxy HTTPS de destino para enrutar las solicitudes al mapa de URLs. El proxy es la parte del balanceador de carga que contiene el certificado SSL de un balanceador de carga HTTPS. Después de crear el certificado, puedes adjuntarlo al proxy HTTPS de destino.
gcloud compute target-https-proxies create https-proxy \ --url-map=lb-map \ --certificate-manager-certificates=CERTIFICATE_NAME \ --global
Sustituye
CERTIFICATE_NAME
por el nombre del certificado SSL que has creado con Gestor de certificados.Crea dos reglas de reenvío globales, una con una dirección IP de la región
us-east1
y otra con una dirección IP de la regiónasia-east1
, con el comandogcloud compute forwarding-rules create
.Si quieres reservar una dirección IP interna estática para la regla de reenvío de tu balanceador de carga, consulta Reservar una dirección IP interna estática. Reservar una dirección IP es opcional para una regla de reenvío HTTP, pero es obligatorio para una regla de reenvío HTTPS.
En este ejemplo, se asocia una dirección IP efímera a la regla de reenvío HTTP de tu balanceador de carga. Una dirección IP efímera permanece constante mientras exista la regla de reenvío. Si necesitas eliminar la regla de reenvío y volver a crearla, es posible que la regla de reenvío reciba una nueva dirección IP.
Para el tráfico HTTP, crea las reglas de reenvío globales para enrutar las solicitudes entrantes al proxy HTTP de destino:
gcloud compute forwarding-rules create http-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=subnet-us \ --subnet-region=us-east1 \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global
gcloud compute forwarding-rules create http-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=subnet-asia \ --subnet-region=asia-east1 \ --ports=80 \ --target-http-proxy=http-proxy \ --global-target-http-proxy \ --global
Para el tráfico HTTPS, crea las reglas de reenvío globales para enrutar las solicitudes entrantes al proxy HTTPS de destino:
gcloud compute forwarding-rules create https-fw-rule-1 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=subnet-us \ --subnet-region=us-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global
gcloud compute forwarding-rules create https-fw-rule-2 \ --load-balancing-scheme=INTERNAL_MANAGED \ --network=lb-network \ --subnet=subnet-asia \ --subnet-region=asia-east1 \ --address=RESERVED_IP_ADDRESS \ --ports=443 \ --target-https-proxy=https-proxy \ --global-target-https-proxy \ --global
Enviar una solicitud HTTP al balanceador de carga
Envía una solicitud desde una VM de cliente interna a la regla de reenvío del balanceador de carga.
Obtener la dirección IP de la regla de reenvío del balanceador de carga
Obtén la dirección IP de la regla de reenvío (
http-fw-rule-1
) del balanceador de carga, que se encuentra en la regiónus-east1
.gcloud compute forwarding-rules describe http-fw-rule-1 \ --global
Obtén la dirección IP de la regla de reenvío (
http-fw-rule-2
) del balanceador de carga, que se encuentra en la regiónasia-east1
.gcloud compute forwarding-rules describe http-fw-rule-2 \ --global
Crear una VM cliente para probar la conectividad
Crea una máquina virtual cliente en la región
us-east1
.gcloud compute instances create client-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --network=lb-network \ --subnet=subnet-us \ --zone=us-east1-c \ --tags=allow-ssh
Establece una conexión SSH con la máquina virtual cliente.
gcloud compute ssh client-a --zone=us-east1-c
En este ejemplo, el balanceador de carga de aplicaciones interno entre regiones tiene direcciones IP virtuales (VIP) de frontend en las regiones
us-east1
yasia-east1
de la red de VPC. Envía una solicitud HTTP a la IP virtual de cualquiera de las regiones mediante curl.curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/never-fetch/three-cats.jpg --output three-cats.jpg
Probar la alta disponibilidad
Elimina la regla de reenvío (
http-fw-rule-1
) de la regiónus-east1
para simular una interrupción regional y comprueba si el cliente de la regiónus-east
sigue pudiendo acceder a los datos del backend.gcloud compute forwarding-rules delete http-fw-rule-1 \ --global
Envía una solicitud HTTP a la IP virtual de la regla de reenvío de cualquiera de las regiones mediante curl.
curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
curl http://FORWARDING_RULE_IP_ADDRESS/never-fetch/three-cats.jpg --output three-cats.jpg
Si haces una solicitud HTTP a la VIP de la región
us-east1
, las políticas de enrutamiento de DNS detectan que esta VIP no responde y devuelven al cliente la siguiente VIP más óptima (en este ejemplo,asia-east1
). Este comportamiento ayuda a que tu aplicación siga funcionando incluso durante las interrupciones regionales.
Siguientes pasos
- Descripción general del balanceador de carga de aplicaciones interno
- Subredes de solo proxy para balanceadores de carga basados en Envoy
- Gestionar certificados
- Limpiar una configuración de balanceo de carga