Configurar un balanceador de carga de aplicación interno entre regiones con segmentos de Cloud Storage

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:

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:

Un balanceador de carga de aplicaciones interno entre regiones envía tráfico a un backend de Cloud Storage.
Distribución del tráfico a Cloud Storage (haz clic en la imagen para ampliarla)

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ón us-east1 usa 10.1.2.0/24 para su intervalo de IP principal. Una subred llamada subnet-asia en la región asia-east1 usa 10.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ón us-east1 usa 10.129.0.0/23 como intervalo de IP principal. Una subred llamada proxy-only-subnet-asia-east1 en la región asia-east1 usa 10.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

  1. En la Google Cloud consola, ve a la página Redes de VPC.

    Ir a redes de VPC

  2. Haz clic en Crear red VPC.

  3. En Nombre, escribe lb-network.

  4. En la sección Subredes, selecciona Personalizado en Modo de creación de subredes.

  5. 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
  6. Haz clic en Listo.

  7. Haz clic en Añadir subred.

  8. 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
  9. Haz clic en Listo.

  10. Haz clic en Crear.

gcloud

  1. Crea una red VPC personalizada llamada lb-network con el comando gcloud compute networks create.

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crea una subred en la red de VPC lb-network de la región us-east1 con el comando gcloud compute networks subnets create.

    gcloud compute networks subnets create subnet-us \
        --network=lb-network \
        --range=10.1.2.0/24 \
        --region=us-east1
    
  3. Crea una subred en la red de VPC lb-network de la región asia-east1 con el comando gcloud 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

  1. En la Google Cloud consola, ve a la página Redes de VPC.

    Ir a redes de VPC

  2. Haga clic en el nombre de la red VPC que ha creado.

  3. En la pestaña Subred, haz clic en Añadir subred.

  4. 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.
  5. Haz clic en Añadir.

  6. Crea otra subred de solo proxy en la región asia-east1. En la pestaña Subred, haz clic en Añadir subred.

  7. 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.
  8. Haz clic en Añadir.

gcloud

  1. Crea una subred de solo proxy en la región us-east1 con el comando gcloud 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
    
  2. Crea una subred de solo proxy en la región asia-east1 con el comando gcloud 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 llama fw-allow-ssh.

Consola

  1. En la Google Cloud consola, ve a la página Políticas de cortafuegos.

    Ir a Políticas de cortafuegos

  2. 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.
  3. Haz clic en Crear.

gcloud

  1. Crea la regla de cortafuegos fw-allow-ssh para permitir la conectividad SSH a las VMs con la etiqueta de red allow-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

  1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. Haz clic en Crear.

  3. En el cuadro Ponle nombre al segmento, escribe un nombre único a nivel global que cumpla las directrices de nomenclatura.

  4. Haz clic en Elige dónde quieres almacenar los datos.

  5. En Tipo de ubicación, selecciona Región.

  6. En la lista de regiones, selecciona us-east1.

  7. Haz clic en Crear.

  8. 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

  1. Crea el primer segmento en la región us-east1 con el comando gcloud storage buckets create.

    gcloud storage buckets create gs://BUCKET1_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    
  2. Crea el segundo segmento en la región asia-east1 con el comando gcloud 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:

  1. En la Google Cloud consola, ve a la página Segmentos de Cloud Storage.

    Ir a Contenedores

  2. En la lista de segmentos, haga clic en el nombre del segmento que quiera hacer público.

  3. Seleccione la pestaña Permisos, situada en la parte superior de la página.

  4. En la sección Permisos, haz clic en el botón Dar acceso. Aparecerá el cuadro de diálogo Dar acceso.

  5. En el campo Nuevos directores, introduce allUsers.

  6. 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.

  7. Haz clic en Guardar.

  8. 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:

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:

  1. 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 carga INTERNAL_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
    
  2. 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
    
  3. 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 a http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg usa el backend backend-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 backend backend-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
    
  4. 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.

  5. 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ón asia-east1, con el comando gcloud 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

  1. 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ón us-east1.

    gcloud compute forwarding-rules describe http-fw-rule-1 \
        --global
    
  2. 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ón asia-east1.

    gcloud compute forwarding-rules describe http-fw-rule-2 \
        --global
    

Crear una VM cliente para probar la conectividad

  1. 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
    
  2. Establece una conexión SSH con la máquina virtual cliente.

    gcloud compute ssh client-a --zone=us-east1-c
    
  3. En este ejemplo, el balanceador de carga de aplicaciones interno entre regiones tiene direcciones IP virtuales (VIP) de frontend en las regiones us-east1 y asia-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

  1. Elimina la regla de reenvío (http-fw-rule-1) de la región us-east1 para simular una interrupción regional y comprueba si el cliente de la región us-east sigue pudiendo acceder a los datos del backend.

    gcloud compute forwarding-rules delete http-fw-rule-1 \
        --global
    
  2. 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