Configura un balanceador de cargas de aplicaciones interno regional con buckets de Cloud Storage

En este documento, se muestra cómo crear unregional internal Application Load Balancer para enrutar las solicitudes de contenido estático a buckets de Cloud Storage.

Antes de comenzar

Asegúrate de que tu configuración cumpla con los requisitos.

Instala Google Cloud CLI

Algunas de las instrucciones de esta guía solo se pueden llevar a cabo con la CLI de gcloud. Para instalarla, consulta Instala Google Cloud CLI.

Encontrarás comandos relacionados con el balanceo de cargas en el documento de referencias de la API y la CLI de gcloud.

Roles obligatorios

Si eres el creador del proyecto, se te otorga el rol de propietario (roles/owner). De forma predeterminada, el rol de propietario (roles/owner) o el rol de editor (roles/editor) incluyen los permisos necesarios para seguir este documento.

Si no eres el creador del proyecto, se deben otorgar los permisos necesarios en el proyecto a la principal correspondiente. Por ejemplo, una principal puede ser una Cuenta de Google (para usuarios finales) o una cuenta de servicio.

Para obtener los permisos que necesitas para crear buckets de Cloud Storage y recursos de red, pídele a tu administrador que te otorgue los siguientes roles de IAM en tu proyecto:

Para obtener más información sobre cómo otorgar roles, consulta Administra el acceso a proyectos, carpetas y organizaciones.

También puedes obtener los permisos necesarios a través de roles personalizados o cualquier otro rol predefinido.

Para obtener más información sobre los roles y permisos de Cloud Load Balancing, consulta Roles y permisos. Si deseas obtener más información para definir políticas de IAM con permisos condicionales, consulta Condiciones de IAM para reglas de reenvío.

Configura un recurso de certificado SSL

Para un regional internal Application Load Balancer que use HTTPS como el protocolo de solicitud y respuesta, crea un recurso de certificado SSL con el Administrador de certificados como se describe en uno de los siguientes documentos:

Después de crear el certificado, puedes adjuntarlo al proxy HTTPS de destino.

Recomendamos que uses un certificado administrado por Google.

Limitaciones

Se aplican las siguientes limitaciones a los buckets de Cloud Storage cuando actúan como backends para un regional internal Application Load Balancer:

  • No se admite el acceso a buckets privados, por lo que el bucket de backend debe ser accesible de forma pública a través de Internet.

  • No se admiten las URLs firmadas.

  • La integración de Cloud CDN no está disponible cuando se crean buckets de backend para unregional internal Application Load Balancer.

  • Cuando se usa un regional internal Application Load Balancer para acceder a depósitos de backend, solo se admite el método GET de HTTP. Puedes descargar contenido del bucket, pero no está disponible la opción para subir contenido al bucket a través de laregional internal Application Load Balancer .

  • En el caso de un regional internal Application Load Balancer, los buckets de Cloud Storage solo se admiten en la región en la que se configura el balanceador de cargas. No se admiten los buckets birregionales ni multirregionales.

Descripción general de la configuración

Puedes configurar un regional internal Application Load Balancer en una región como se muestra en el siguiente diagrama de arquitectura:

Un regional internal Application Load Balancer envía tráfico a un backend de Cloud Storage.
Distribución del tráfico a Cloud Storage (haz clic para ampliar).

Como se muestra en el diagrama de arquitectura, en este ejemplo, se crea unregional internal Application Load Balancer en una red de nube privada virtual (VPC) con dos buckets de backend, en los que cada bucket de backend hace referencia a un bucket de Cloud Storage. Los buckets de Cloud Storage se encuentran en la región us-east1 y puedes balancear la carga del tráfico entre cada bucket.

Configura la red y las subredes

Dentro de la red de VPC, configura una subred en la región us-east1 en la que se configurará la regla de reenvío de tus balanceadores de cargas. Además, configura una subred de solo proxy en la región, us-east1, en la que deseas configurar el balanceador de cargas.

Este ejemplo usa la siguiente red de VPC, región y subredes:

  • Red. Es una red de VPC de modo personalizado con el nombre lb-network.

  • Subred para el balanceador de cargas. Una subred llamada subnet-us en la región us-east1 usa 10.1.2.0/24 para su rango de IP principal.

  • Subred para el proxy de Envoy. Una subred llamada proxy-only-subnet-us en la región us-east1 que usa 10.129.0.0/23 para su rango de IP principal

Configura las subredes para la regla de reenvío del balanceador de cargas

Crea una subred en la misma región en la que se configurará la regla de reenvío de tus balanceadores de cargas.

Console

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

    Ir a las redes de VPC

  2. Haz clic en Crear red de VPC.

  3. En Nombre, ingresa lb-network.

  4. En la sección Subredes, establece Modo de creación de subred como Personalizado.

  5. En la sección Subred nueva, ingresa la siguiente información:

    1. Nombre: subnet-us
    2. Selecciona una Región: us-east1
    3. Rangos de direcciones IP: 10.1.2.0/24
    4. Haz clic en Listo.
  6. Haz clic en Crear.

gcloud

  1. Crea una red de 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 en 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
    

Configura 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 finalizan las conexiones del cliente y crean conexiones a los backends.

Todos los balanceadores de cargas regionales basados en Envoy usan esta subred de solo proxy en la misma región que la red de VPC. Solo puede haber una subred de solo proxy activa para un propósito determinado, por región y por red. En este ejemplo, creamos una subred de solo proxy en la región us-east1.

Console

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

    Ir a las redes de VPC

  2. Haz clic en el nombre de la red de VPC que creaste.

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

  4. Ingresa la siguiente información:

    1. En Nombre, ingresa proxy-only-subnet-us.
    2. En Región, ingresa us-east1.
    3. En Propósito, selecciona Regional Managed Proxy.
    4. En Rango de direcciones IP, ingresa 10.129.0.0/23.
  5. Haz clic en Agregar.

gcloud

  • 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=REGIONAL_MANAGED_PROXY \
        --role=ACTIVE \
        --region=us-east1 \
        --network=lb-network \
        --range=10.129.0.0/23
    

Configura una regla de firewall

En este ejemplo, se usa una regla de firewall de entrada, fw-allow-ssh, que permite el acceso SSH en el puerto 22 a la VM del cliente.

Console

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

    Ir a Políticas de firewall

  2. Haz clic en Crear regla de firewall para crear la regla que permite conexiones SSH entrantes en la VM del cliente:

  3. En la página Crear una regla de firewall, ingresa la siguiente información:

    1. Nombre: fw-allow-ssh
    2. Red: lb-network
    3. Dirección del tráfico: Entrada
    4. Acción en caso de coincidencia: Permitir
    5. Destinos: Etiquetas de destino especificadas
    6. Etiquetas de destino: allow-ssh
    7. Filtro de fuente: Rangos de IPv4
    8. Rangos de IPv4 de origen: 0.0.0.0/0
    9. Protocolos y puertos:
      1. Elige Protocolos y puertos especificados.
      2. Selecciona la casilla de verificación TCP y, luego, ingresa 22 para el número de puerto.
  4. Haz clic en Crear.

gcloud

  • Crea la regla de firewall fw-allow-ssh para permitir la conectividad SSH a las VM con la etiqueta de red allow-ssh. Cuando omites --source-ranges,Google Cloud interpreta que la regla significa cualquier fuente.

    gcloud compute firewall-rules create fw-allow-ssh \
        --network=lb-network \
        --action=allow \
        --direction=ingress \
        --target-tags=allow-ssh \
        --rules=tcp:22
    

Configura tus buckets de Cloud Storage

El proceso para configurar tus buckets de Cloud Storage es el siguiente:

  1. Se crean los buckets.
  2. Se copia el contenido en los buckets.
  3. Haz que los buckets sean legibles de forma pública.

Crea buckets de Cloud Storage

En este ejemplo, crearás dos buckets de Cloud Storage en la región us-east1.

Console

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

    Ir a Buckets

  2. Haga clic en Crear.

  3. En la sección Primeros pasos, ingresa un nombre global único que siga los lineamientos de nomenclatura.

  4. Haz clic en Elige dónde almacenar tus datos.

  5. Configura Tipo de ubicación como Región.

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

  7. Haz clic en Crear.

  8. Haz clic en Buckets para volver a la página Buckets de Cloud Storage. Usa las instrucciones anteriores para crear un segundo bucket en la misma región, us-east1.

gcloud

  • Crea los buckets 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
    
    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access
    

    Reemplaza BUCKET1_NAME y BUCKET2_NAME por los nombres de tus buckets de Cloud Storage.

Copia archivos gráficos en tus buckets de Cloud Storage

Para que puedas probar la configuración, copia un archivo gráfico de un bucket público de Cloud Storage en tus propios buckets de Cloud Storage.

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET1_NAME/love-to-purr/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://BUCKET2_NAME/love-to-fetch/

Haz que los buckets de Cloud Storage sean legibles de forma pública

Para que todos los objetos de un bucket sean legibles para todos en la Internet pública, otorga a la principal allUsers el rol de visualizador de objetos de Storage (roles/storage.objectViewer).

Console

A fin de otorgar a todos los usuarios acceso para ver objetos en tus buckets, repite el siguiente procedimiento para cada bucket:

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

    Ir a Buckets

  2. En la lista de buckets, selecciona la casilla de verificación de cada bucket que deseas hacer público.

  3. Haz clic en el botón Permisos. Aparecerá el diálogo Permissions.

  4. En el cuadro de diálogo Permisos, haz clic en el botón Agregar principal. Aparecerá el cuadro de diálogo Otorgar acceso.

  5. En el campo Principales nuevas, ingresa allUsers.

  6. En el campo Seleccionar un rol, ingresa Storage Object Viewer en el cuadro de filtro y selecciona Visualizador de objetos de Storage a partir de los resultados filtrados.

  7. Haz clic en Guardar.

  8. Haz clic en Permitir acceso público.

gcloud

Ejecuta el comando buckets add-iam-policy-binding para otorgar a todos los usuarios acceso para ver objetos en tus buckets.

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

Reservar una nueva dirección IP interna estática

Reserva una dirección IPv4 interna estática para la regla de reenvío del balanceador de cargas. Para obtener más información, consulta Reserva una dirección IP interna estática.

Console

  1. En la consola de Google Cloud , ve a la página Reserva una dirección IP interna y estática.

    Ir a Reserva una dirección IP estática interna

  2. En el campo Nombre, ingresa un nombre para la nueva dirección.

  3. En la lista Versión de IP, selecciona IPv4.

  4. En la lista Red, selecciona lb-network.

  5. En la lista Subred, selecciona subnet-us.

  6. En Región, selecciona us-east1.

  7. En la lista Dirección IP estática, selecciona Asignar de forma automática. Después de crear el balanceador de cargas, esta dirección IP se adjunta a la regla de reenvío del balanceador de cargas.

  8. Haz clic en Reservar si deseas reservar la dirección IP.

gcloud

  1. Para reservar una dirección IP externa estática, usa el comando gcloud compute addresses create.

     gcloud compute addresses create ADDRESS_NAME \
         --region=us-east1 \
         --subnet=subnet-us
    

    Reemplaza ADDRESS_NAME por el nombre de la dirección nueva.

  2. Para ver la información sobre la dirección, usa el comando gcloud compute addresses describe.

    gcloud compute addresses describe ADDRESS_NAME
    

    Copia la dirección IP que se devolvió para usarla como RESERVED_IP_ADDRESS en la siguiente sección.

Configura el balanceador de cargas con depósitos de backend

En esta sección, se muestra cómo crear los siguientes recursos para unregional internal Application Load Balancer:

En este ejemplo, puedes usar HTTP o HTTPS como el protocolo de solicitud y respuesta entre el cliente y el balanceador de cargas. Si quieres crear un balanceador de cargas de HTTPS, debes agregar un recurso de certificado SSL al frontend del balanceador de cargas.

Para crear los componentes de balanceo de cargas mencionados anteriormente con la CLI de gcloud, sigue estos pasos:

  1. Crea dos buckets de backend en la región us-east1 con el comando gcloud beta compute backend-buckets create. Los buckets de backend tienen un esquema de balanceo de cargas de INTERNAL_MANAGED.

    gcloud beta compute backend-buckets create backend-bucket-cats \
        --gcs-bucket-name=BUCKET1_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --region=us-east1
    
    gcloud beta compute backend-buckets create backend-bucket-dogs \
        --gcs-bucket-name=BUCKET2_NAME \
        --load-balancing-scheme=INTERNAL_MANAGED \
        --region=us-east1
    
  2. Crea un mapa de URL para enrutar las solicitudes entrantes al bucket de backend con el comando gcloud beta compute url-maps create.

    gcloud beta compute url-maps create lb-map \
        --default-backend-bucket=backend-bucket-cats \
        --region=us-east1
    
  3. Configura las reglas de host y ruta de acceso del mapa de URL con el comando gcloud beta compute url-maps add-path-matcher.

    En este ejemplo, el bucket de backend predeterminado es backend-bucket-cats, que controla todas las rutas de acceso que existen en él. Sin embargo, cualquier solicitud dirigida a http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg usa el backend de backend-bucket-dogs. Por ejemplo, si la carpeta /love-to-fetch/ también existe en tu backend predeterminado (backend-bucket-cats), el balanceador de cargas prioriza el backend backend-bucket-dogs porque hay una regla de ruta específica para /love-to-fetch/*.

    gcloud beta 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 \
        --region=us-east1
    
  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 URL:

    gcloud compute target-http-proxies create http-proxy \
        --url-map=lb-map \
        --region=us-east1
    

    Para el tráfico HTTPS, crea un proxy HTTPS de destino para enrutar las solicitudes al mapa de URL. El proxy es la parte del balanceador de cargas que contiene el certificado SSL para el balanceo de cargas de HTTPS. Después de crear el certificado, puedes adjuntarlo al proxy de destino HTTPS.

    gcloud compute target-https-proxies create https-proxy \
        --url-map=lb-map \
        --certificate-manager-certificates=CERTIFICATE_NAME \
        --region=us-east1
    

    Reemplaza CERTIFICATE_NAME por el nombre del certificado SSL que creaste con el Administrador de certificados.

  5. Crea una regla de reenvío con una dirección IP en la región us-east1 con el comando gcloud compute forwarding-rules create.

    Reservar una dirección IP es opcional para una regla de reenvío HTTP. Sin embargo, debes reservar una dirección IP para una regla de reenvío HTTPS.

    En este ejemplo, se asocia una dirección IP efímera con la regla de reenvío HTTP del balanceador de cargas. Una dirección IP efímera permanece constante mientras exista la regla de reenvío. Si necesitas borrar la regla de reenvío y volver a crearla, esta podría recibir una nueva dirección IP.

    Para el tráfico HTTP, crea las reglas de reenvío 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 \
        --target-http-proxy-region=us-east1 \
        --region=us-east1
    

    Para el tráfico HTTPS, crea las reglas de reenvío globales para enrutar las solicitudes entrantes al proxy de destino HTTPS:

    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 \
        --target-http-proxy-region=us-east1 \
        --region=us-east1
    

    Reemplaza RESERVED_IP_ADDRESS por el nombre de la dirección que copiaste en la sección Reserva una dirección IP interna estática.

Envía una solicitud HTTP al balanceador de cargas

Envía una solicitud desde una VM de cliente interna a la regla de reenvío del balanceador de cargas.

Obtén la dirección IP de la regla de reenvío del balanceador de cargas

Obtén la dirección IP de la regla de reenvío del balanceador de cargas (http-fw-rule-1) en la región us-east1 para realizar una solicitud HTTP a la dirección IP virtual (VIP) en la región con curl.

 gcloud compute forwarding-rules describe http-fw-rule-1 \
     --region=us-east1

Copia la dirección IP que se devolvió para usarla como FORWARDING_RULE_IP_ADDRESS en el siguiente paso.

Crea una VM cliente para probar la conectividad

Crea una VM cliente y envía una solicitud HTTP a las VIP en la red de VPC. La VM de cliente puede estar en cualquier zona de la misma región que el balanceador de cargas y puede usar cualquier subred de la misma red de VPC. En este ejemplo, crearás la VM de cliente en la misma subred que la regla de reenvío del balanceador de cargas.

  1. Crea una VM de 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 a la VM del cliente.

    gcloud compute ssh client-a --zone=us-east1-c
    
  3. En este ejemplo, el regional internal Application Load Balancer tiene una VIP de frontend en la regiónus-east1en la red de VPC. Realiza una solicitud HTTP a la VIP en esa región con curl.

    curl http://FORWARDING_RULE_IP_ADDRESS/love-to-purr/three-cats.jpg --output three-cats.jpg
    
    curl http://FORWARDING_RULE_IP_ADDRESS/love-to-fetch/two-dogs.jpg --output two-dogs.jpg
    

    Reemplaza FORWARDING_RULE_IP_ADDRESS por la dirección IP que copiaste en la sección Obtén la dirección IP de la regla de reenvío del balanceador de cargas.

¿Qué sigue?