Configura un balanceador de cargas de aplicaciones interno regional con buckets de Cloud Storage en un entorno de VPC compartida

En este documento, se muestran dos opciones de configuración de muestra para configurar unregional internal Application Load Balancer en un entorno de VPC compartida con buckets de Cloud Storage:

  • En el primer ejemplo, se crean todos los componentes y backends del balanceador de cargas en un proyecto de servicio.
  • En el segundo ejemplo, se crean los componentes de frontend y el mapa de URL del balanceador de cargas en un proyecto de servicio, mientras que el bucket de backend y los buckets de Cloud Storage del balanceador de cargas se crean en un proyecto de servicio diferente.

Ambos ejemplos requieren la misma configuración inicial para otorgar los roles necesarios y configurar una VPC compartida antes de que puedas comenzar a crear balanceadores de cargas.

Para obtener más información sobre otras arquitecturas válidas de VPC compartida, consulta Arquitecturas de VPC compartida.

Si no deseas usar una red de VPC compartida, consulta Configura un regional internal Application Load Balancer con buckets de Cloud Storage.

Antes de comenzar

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

Crear proyectos de Google Cloud

Crea Google Cloud proyectos para un proyecto host y dos proyectos de servicio.

Roles obligatorios

Para obtener los permisos que necesitas para configurar un regional internal Application Load Balancer en un entorno de VPC compartida con buckets de Cloud Storage, pídele a tu administrador que te otorgue los siguientes roles de IAM:

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.

Configura un entorno de VPC compartida

Para configurar un entorno de VPC compartida, completa los siguientes pasos en el proyecto host:

  1. Configura la red de VPC en el proyecto host.
  2. Configura la subred de solo proxy en el proyecto host.
  3. Configura una regla de firewall en el proyecto host.
  4. Configurar la VPC compartida en el proyecto host.

No es necesario que realices los pasos de esta sección cada vez que quieras crear un balanceador de cargas nuevo. Sin embargo, debes asegurarte de tener acceso a los recursos descritos aquí antes de continuar con la creación del balanceador de cargas.

En este ejemplo, se usan la siguiente red de VPC, región y subred de solo proxy:

  • 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 proxies de Envoy. Una subred llamada proxy-only-subnet-us en la región us-east1 usa 10.129.0.0/23 para su rango de IP principal.

Configura una VPC para el proyecto host

Configura una VPC en modo personalizado para el proyecto host y crea una subred en la misma región en la que necesitas configurar la regla de reenvío de tus balanceadores de cargas.

No es necesario que realices este paso cada vez que quieras crear un balanceador de cargas nuevo. Solo debes asegurarte de que el proyecto de servicio tenga acceso a una subred en la red de VPC compartida (además de la subred de solo proxy).

Console

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

    Ir a las redes de VPC

  2. Haga clic en Crear red de VPC.

  3. En el campo Nombre, ingresa lb-network.

  4. En Modo de creación de subred, selecciona Personalizado.

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

    1. En el campo Nombre, ingresa subnet-us.
    2. En la lista Región, selecciona us-east1.
    3. En el campo Rango de IPv4, ingresa 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 \
        --project=HOST_PROJECT_ID
    

    Reemplaza HOST_PROJECT_ID por elGoogle Cloud ID del proyecto asignado al proyecto que está habilitado como proyecto host en un entorno de VPC compartida.

  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 \
        --project=HOST_PROJECT_ID
    

Configura la subred de solo proxy en el proyecto host

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 nuevas a los backends.

Todos los balanceadores de cargas regionales basados en Envoy usan esta subred de solo proxy en la misma región de 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 Subredes, haz clic en Agregar subred y proporciona la siguiente información:

    1. En el campo Nombre, ingresa proxy-only-subnet-us.
    2. En la lista Región, selecciona us-east1.
    3. En Propósito, selecciona Regional Managed Proxy.
    4. En el campo Rango de IPv4, ingresa 10.129.0.0/23.
  4. 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 \
        --project=HOST_PROJECT_ID
    

Configura una regla de firewall en el proyecto host

En este ejemplo, se usa la regla de firewall de entrada fw-allow-ssh que permite la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puedes elegir un rango de IP de origen más restrictivo para esta regla. Por ejemplo, puedes especificar solo los rangos de IP del sistema desde el que inicias sesiones SSH. En este ejemplo, se usa la etiqueta de destino allow-ssh para identificar las máquinas virtuales (VMs) a las que se aplica la regla de firewall. Sin estas reglas de firewall, la regla predeterminada de denegación de entrada bloquea el tráfico entrante a las instancias de backend.

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 permitirá las verificaciones de estado deGoogle Cloud .

  3. Proporciona la siguiente información:

    1. En el campo Nombre, ingresa fw-allow-ssh.
    2. En la lista Red, selecciona lb-network.
    3. En Dirección del tráfico, selecciona Ingress.
    4. En Acción en caso de coincidencia, selecciona Permitir.
    5. En la lista Destinos, selecciona Etiquetas de destino especificadas.
    6. En el campo Etiquetas de destino, ingresa allow-ssh.
    7. En la lista Filtro de fuente, selecciona Rangos de IPv4.
    8. En el campo Rangos de IPv4 de origen, ingresa 0.0.0.0/0.
    9. En Protocolos y puertos, selecciona Puertos y protocolos especificados.
    10. Selecciona la casilla de verificación TCP y, luego, ingresa 22 como 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 \
        --project=HOST_PROJECT_ID
    

Configura la VPC compartida en el proyecto host

Habilita un proyecto host de VPC compartida y conecta proyectos de servicio al proyecto host para que los proyectos de servicio puedan usar la red de VPC compartida. Para configurar una VPC compartida en el proyecto host, consulta las siguientes páginas:

  1. Habilita un proyecto host.
  2. Conecta un proyecto de servicio.

Después de completar los pasos anteriores, completa una de las siguientes configuraciones:

Configura un balanceador de cargas en el proyecto de servicio

En este ejemplo, se crea un balanceador de cargas de aplicaciones regional internal Application Load Balancer en el que todos los componentes de balanceo de cargas (regla de reenvío, proxy de destino, mapa de URL y bucket de backend) y los buckets de Cloud Storage se crean en el proyecto de servicio.

Los recursos de redes de regional internal Application Load Balancer, como la subred de solo proxy, se crean en el proyecto host.

Figura 1. Balanceador de cargas de HTTP externo regional en un entorno de VPC compartida con buckets de Cloud Storage
Figura 1. Balanceador de cargas de aplicaciones interno regional en un entorno de VPC compartida con buckets de Cloud Storage

En esta sección, se muestra cómo configurar el balanceador de cargas y los backends.

En los ejemplos de esta página, se configura de manera explícita una dirección IP reservada para la regla de reenvío del regional internal Application Load Balancer, en lugar de permitir que se asigne una dirección IP efímera. Recomendamos reservar direcciones IP para las reglas de reenvío.

Configura tus buckets de Cloud Storage

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

  1. Crea los buckets de Cloud Storage.
  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 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 \
       --project=SERVICE_PROJECT_ID
    
    gcloud storage buckets create gs://BUCKET2_NAME \
        --default-storage-class=standard \
        --location=us-east1 \
        --uniform-bucket-level-access \
        --project=SERVICE_PROJECT_ID
    

    Reemplaza lo siguiente:

    • BUCKET1_NAME: Es el nombre de tu primer bucket de Cloud Storage.
    • BUCKET2_NAME: Es el nombre de tu segundo bucket de Cloud Storage.
    • SERVICE_PROJECT_ID: ID del proyecto de Google Cloud asignado al proyecto de servicio

Copia contenido en tus buckets de Cloud Storage

Para completar los buckets de Cloud Storage, 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 IP 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 Reservar 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 interna estática con gcloud compute, usa el comando compute addresses create.

     gcloud compute addresses create ADDRESS_NAME  \
         --region=REGION \
         --subnet=subnet-us \
         --project=SERVICE_PROJECT_ID
    

    Reemplaza lo siguiente:

    • ADDRESS_NAME: el nombre que quieres asignar a esta dirección IP.
    • REGION: La región en la que deseas reservar esta dirección. Esta región debe ser la misma que la del balanceador de cargas. Por ejemplo, us-east1
    • SERVICE_PROJECT_ID: Es el ID del proyecto Google Cloudasignado al proyecto de servicio.
  2. Usa el comando compute addresses describe para ver el resultado:

     gcloud compute addresses describe ADDRESS_NAME
    

    Copia la dirección IP que se devolvió para usarla como RESERVED_IP_ADDRESS en las secciones posteriores.

Configura un recurso de certificado SSL

Para un regional internal Application Load Balancer que usa HTTPS como el protocolo de solicitud y respuesta, puedes crear un recurso de certificado SSL con un certificado SSL de Compute Engine o un certificado del Administrador de certificados.

Para este ejemplo, 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 usar un certificado administrado por Google para reducir la sobrecarga operativa, como los riesgos de seguridad asociados con la administración manual de certificados.

Configura el balanceador de cargas con buckets 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 gcloud CLI, 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 \
          --project=SERVICE_PROJECT_ID
    
      gcloud beta compute backend-buckets create backend-bucket-dogs \
          --gcs-bucket-name=BUCKET2_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1
          --project=SERVICE_PROJECT_ID
    
  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 URL_MAP_NAME \
          --default-backend-bucket=backend-bucket-cats \
          --region=us-east1 \
          --project=SERVICE_PROJECT_ID
    

    Reemplaza URL_MAP_NAME por el nombre del mapa de URL.

  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 dentro de é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 URL_MAP_NAME \
          --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 \
          --project=SERVICE_PROJECT_ID
    
  4. Crea un proxy de destino con el comando gcloud compute target-http-proxies create.

    HTTP

    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 TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --region=us-east1 \
          --project=SERVICE_PROJECT_ID
    

    Reemplaza TARGET_HTTP_PROXY_NAME por el nombre del proxy HTTP de destino.

    HTTPS

    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.

    Para adjuntar un certificado del Administrador de certificados, ejecuta el siguiente comando:

      gcloud compute target-https-proxies create TARGET_HTTPS_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --certificate-manager-certificates=CERTIFICATE_NAME \
          --region=us-east1 \
          --project=SERVICE_PROJECT_ID
    

    Reemplaza lo siguiente:

  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 de HTTP. Sin embargo, debes reservar una dirección IP para una regla de reenvío de 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, es posible que esta reciba una nueva dirección IP.

    HTTP

    Para el tráfico HTTP, crea una regla de reenvío regional para enrutar las solicitudes entrantes al proxy HTTP de destino:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --subnet-region=us-east1 \
          --address=RESERVED_IP_ADDRESS
          --ports=80 \
          --region=us-east1 \
          --target-http-proxy=TARGET_HTTP_PROXY_NAME \
          --target-http-proxy-region=us-east1 \
          --project=SERVICE_PROJECT_ID
    

    Reemplaza lo siguiente:

    HTTPS

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

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --subnet-region=us-east1 \
          --address=RESERVED_IP_ADDRESS \
          --ports=443 \
          --region=us-east1 \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --target-https-proxy-region=us-east1 \
          --project=SERVICE_PROJECT_ID
    

    Reemplaza lo siguiente:

Envía una solicitud HTTP al balanceador de cargas

Ahora que el servicio de balanceo de cargas está en ejecución, envía una solicitud desde una VM de cliente interna a la regla de reenvío del balanceador de cargas.

  1. Obtén la dirección IP de la regla de reenvío del balanceador de cargas, que se encuentra en la región us-east1.

     gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
         --region=us-east1 \
         --project=SERVICE_PROJECT_ID
    

    Copia la dirección IP que se devolvió para usarla como FORWARDING_RULE_IP_ADDRESS.

  2. 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
    
  3. Establece una conexión SSH a la VM del cliente.

    gcloud compute ssh client-a --zone=us-east1-c
    
  4. En este ejemplo, el regional internal Application Load Balancer tiene una dirección IP virtual (VIP) de frontend en la región us-east1 de 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 el primer paso.

Configura un balanceador de cargas con una configuración entre proyectos

En el ejemplo anterior de esta página, se muestra cómo configurar una implementación de VPC compartida en la que todos los componentes del balanceador de cargas y sus backends se crean en el proyecto de servicio.

Los balanceadores de cargas de aplicaciones regionales internos también te permiten configurar implementaciones de VPC compartida en las que un mapa de URL de un proyecto host o de servicio puede hacer referencia a buckets de backend ubicados en varios proyectos de servicio en entornos de VPC compartida.

Puedes usar los pasos en esta sección como referencia para configurar cualquiera de las combinaciones compatibles que se enumeran aquí:

  • Regla de reenvío, proxy de destino y mapa de URL en el proyecto host, y buckets de backend en un proyecto de servicio
  • Regla de reenvío, proxy de destino y mapa de URL en un proyecto de servicio, y buckets de backend en otro proyecto de servicio

En esta sección, se describe la última configuración como ejemplo.

Descripción general de la configuración

En este ejemplo, se configura un balanceador de cargas con su frontend y backend en dos proyectos de servicio diferentes.

Si aún no lo hiciste, debes completar todos los pasos de requisitos previos para configurar la VPC compartida y configurar la red, las subredes y las reglas firewall necesarias para este ejemplo. Para obtener instrucciones, consulta las siguientes secciones de esta página:

Figura 2. Frontend y backend del balanceador de cargas en diferentes proyectos de servicio
Figura 2.. Frontend y backend del balanceador de cargas en diferentes proyectos de servicio

Configura los buckets de Cloud Storage y los buckets de backend en el proyecto de servicio B

Todos los pasos de esta sección deben realizarse en el proyecto de servicio B.

Para crear un bucket de backend, debes hacer lo siguiente:

  1. Crea los buckets de Cloud Storage.
  2. Copia contenido en el bucket.
  3. Haz que los buckets sean legibles de forma pública.
  4. Crea un bucket de backend y dirígelo al bucket de Cloud Storage.

Crea buckets de Cloud Storage

En este ejemplo, crea el bucket 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 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 \
     --project=SERVICE_PROJECT_B_ID
  gcloud storage buckets create gs://BUCKET2_NAME \
      --default-storage-class=standard \
      --location=us-east1 \
      --uniform-bucket-level-access \
      --project=SERVICE_PROJECT_B_ID

Reemplaza lo siguiente:

  • BUCKET1_NAME: El nombre de tu primer bucket de Cloud Storage
  • BUCKET2_NAME: Es el nombre de tu segundo bucket de Cloud Storage.
  • SERVICE_PROJECT_B_ID: Es el Google Cloud ID del proyecto asignado al proyecto de servicio B.

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

Configura el balanceador de cargas con buckets de backend

Para crear los buckets de backend, 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 \
          --project=SERVICE_PROJECT_B_ID
    
      gcloud beta compute backend-buckets create backend-bucket-dogs \
          --gcs-bucket-name=BUCKET2_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --region=us-east1
          --project=SERVICE_PROJECT_B_ID
    

Configura los componentes de frontend del balanceador de cargas en el proyecto de servicio A

Todos los pasos de esta sección deben realizarse en el proyecto de servicio A.

En el proyecto de servicio A, crea los siguientes componentes de balanceo de cargas de frontend:

  1. Configura un recurso de certificado SSL que esté adjunto al proxy de destino. Para obtener más información, consulta Configura un recurso de certificado SSL en este documento.
  2. Crea y reserva una dirección IP 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 en este documento.
  3. Crea un mapa de URL para enrutar las solicitudes entrantes al bucket de backend en el proyecto de servicio B con el comando gcloud beta compute url-maps create.

      gcloud beta compute url-maps create URL_MAP_NAME \
          --default-backend-bucket=backend-bucket-cats \
          --region=us-east1 \
          --project=SERVICE_PROJECT_A_ID
    

    Reemplaza lo siguiente:

    • URL_MAP_NAME: el nombre del mapa de URLs
    • SERVICE_PROJECT_A_ID: ID del proyecto Google Cloudasignado al proyecto de servicio A
  4. 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 dentro de é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 URL_MAP_NAME \
          --path-matcher-name=path-matcher-pets \
          --new-hosts=* \
          --backend-bucket-path-rules="/love-to-fetch/*=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-dogs" \
          --default-backend-bucket=projects/SERVICE_PROJECT_B_ID/regional/backendBuckets/backend-bucket-cats \
          --region=us-east1
          --project=SERVICE_PROJECT_A_ID
    
  5. Crea un proxy de destino con el comando gcloud compute target-http-proxies create.

    HTTP

    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 TARGET_HTTP_PROXY_NAME \
          --url-map=URL_MAP_NAME \
          --region=us-east1 \
          --project=SERVICE_PROJECT_A_ID
    

    Reemplaza TARGET_HTTP_PROXY_NAME por el nombre del proxy HTTP de destino.

    HTTPS

    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 HTTPS de destino.

    Para adjuntar un certificado del Administrador de certificados, ejecuta el siguiente comando:

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

    Reemplaza lo siguiente:

  6. 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 de HTTP. Sin embargo, debes reservar una dirección IP para una regla de reenvío de 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, es posible que esta reciba una nueva dirección IP.

    HTTP

    Para el tráfico HTTP, crea una regla de reenvío regional para enrutar las solicitudes entrantes al proxy HTTP de destino:

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --address=RESERVED_IP_ADDRESS
          --ports=80 \
          --region=us-east1 \
          --target-http-proxy=TARGET_HTTP_PROXY_NAME \
          --target-http-proxy-region=us-east1 \
          --project=SERVICE_PROJECT_A_ID
    

    Reemplaza lo siguiente:

    • FORWARDING_RULE_NAME: el nombre de la regla de reenvío
    • RESERVED_IP_ADDRESS: la dirección IP reservada

    HTTPS

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

      gcloud compute forwarding-rules create FORWARDING_RULE_NAME \
          --load-balancing-scheme=INTERNAL_MANAGED \
          --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
          --subnet=subnet-us \
          --address=RESERVED_IP_ADDRESS \
          --ports=443 \
          --region=us-east1 \
          --target-https-proxy=TARGET_HTTPS_PROXY_NAME \
          --target-https-proxy-region=us-east1 \
          --project=SERVICE_PROJECT_A_ID
    

    Reemplaza lo siguiente:

    • FORWARDING_RULE_NAME: el nombre de la regla de reenvío
    • RESERVED_IP_ADDRESS: la dirección IP reservada

Otorga permiso al administrador del balanceador de cargas de Compute para usar el bucket de backend

Si quieres que los balanceadores de cargas hagan referencia a los buckets de backend en otros proyectos de servicio, el administrador del balanceador de cargas debe tener el permiso compute.backendBuckets.use. Para otorgar este permiso, puedes usar el rol predefinido de IAM llamado Usuario de servicios del balanceador de cargas de Compute (roles/compute.loadBalancerServiceUser). El administrador del proyecto de servicio debe otorgar este rol, que puede aplicarse a nivel del proyecto de servicio o a nivel del bucket de backend individual.

En este ejemplo, un administrador del proyecto de servicio B debe ejecutar uno de los siguientes comandos para otorgar el permiso compute.backendBuckets.use a un administrador del balanceador de cargas del proyecto de servicio A. Esto se puede hacer a nivel de proyecto (para todos los buckets de backend del proyecto) o por bucket de backend.

Console

Permisos a nivel del proyecto

Sigue estos pasos para otorgar permisos a todos los buckets de backend de tu proyecto.

Necesitas los permisos compute.regionBackendBuckets.setIamPolicy y resourcemanager.projects.setIamPolicy para completar este paso.

  1. En la consola de Google Cloud , dirígete a la página IAM.

    Ir a IAM

  2. Elige tu proyecto.

  3. Haz clic en Otorgar acceso.

  4. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la principal o algún otro identificador.

  5. En la sección Asignar roles, haz clic en Agregar roles.

  6. En el diálogo Seleccionar roles, ingresa Compute Load Balancer Services User en el campo Buscar roles.

  7. Selecciona la casilla de verificación Usuario de servicios del balanceador de cargas de Compute.

  8. Haz clic en Aplicar.

  9. Opcional: Agrega una condición a la función.

  10. Haz clic en Guardar.

Permisos a nivel de recurso para buckets de backend individuales

Sigue estos pasos para otorgar permisos a buckets de backend individuales en tu proyecto.

Necesitas el permiso compute.regionBackendBuckets.setIamPolicy para completar este paso.

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

    Ir a Backends

  2. En la lista de backends, selecciona el bucket de backend al que deseas otorgar acceso y haz clic en Permisos.

  3. Haz clic en Agregar principal.

  4. En el campo Principales nuevas, ingresa la dirección de correo electrónico de la principal o algún otro identificador.

  5. En la lista Seleccionar un rol, selecciona Usuario de servicios de balanceador de cargas de Compute.

  6. Haz clic en Guardar.

gcloud

Permisos a nivel del proyecto

Sigue estos pasos para otorgar permisos a todos los buckets de backend de tu proyecto.

Necesitas los permisos compute.regionBackendBuckets.setIamPolicy y resourcemanager.projects.setIamPolicy para completar este paso.

  gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
      --member="user:LOAD_BALANCER_ADMIN" \
      --role="roles/compute.loadBalancerServiceUser"

Reemplaza lo siguiente:

  • SERVICE_PROJECT_B_ID: ID del proyecto Google Cloudasignado al proyecto de servicio B
  • LOAD_BALANCER_ADMIN: Es el principal al que se agregará la vinculación.

Permisos a nivel de recurso para buckets de backend individuales

A nivel del bucket de backend, los administradores de proyectos de servicio pueden usar cualquiera de los siguientes comandos para otorgar el rol Usuario de servicios del balanceador de cargas de Compute (roles/compute.loadBalancerServiceUser):

Usa el comando gcloud projects add-iam-policy-binding para otorgar el rol de usuario de servicios de balanceador de cargas de Compute.

Necesitas el permiso compute.regionBackendBuckets.setIamPolicy para completar este paso.

  gcloud projects add-iam-policy-binding SERVICE_PROJECT_B_ID \
      --member="user:LOAD_BALANCER_ADMIN" \
      --role="roles/compute.loadBalancerServiceUser" \
      --condition='expression=resource.name=="projects/SERVICE_PROJECT_B_ID/regions/REGION/backendBuckets/BACKEND_BUCKET_NAME",title=Shared VPC condition'
Reemplaza lo siguiente:
  • SERVICE_PROJECT_B_ID: ID del proyecto Google Cloudasignado al proyecto de servicio B
  • LOAD_BALANCER_ADMIN: Es el principal al que se agregará la vinculación.
  • REGION: Es la región de Google Cloud en la que se encuentra el bucket de backend.
  • BACKEND_BUCKET_NAME: Es el nombre del bucket de backend.
Como alternativa, usa el comando gcloud compute backend-buckets add-iam-policy-binding para otorgar el rol de usuario de servicios de balanceador de cargas de Compute.
  gcloud compute backend-buckets add-iam-policy-binding BACKEND_BUCKET_NAME \
      --member="user:LOAD_BALANCER_ADMIN" \
      --role="roles/compute.loadBalancerServiceUser" \
      --project=SERVICE_PROJECT_B_ID \
      --region=REGION

Envía una solicitud HTTP al balanceador de cargas

Ahora que el servicio de balanceo de cargas está en ejecución, envía una solicitud desde una VM de cliente interna a la regla de reenvío del balanceador de cargas.

  1. Obtén la dirección IP de la regla de reenvío del balanceador de cargas, que se encuentra en la región us-east1.

     gcloud compute forwarding-rules describe FORWARDING_RULE_NAME \
         --region=us-east1 \
         --project=SERVICE_PROJECT_A_ID
    

    Copia la dirección IP que se devolvió para usarla como FORWARDING_RULE_IP_ADDRESS.

  2. 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
    
  3. Establece una conexión SSH a la VM del cliente.

    gcloud compute ssh client-a --zone=us-east1-c
    
  4. 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 el primer paso.

¿Qué sigue?