Configura un balanceador de cargas de aplicaciones externo global con VPC compartida

En este documento, se muestran dos opciones de configuración de muestra para un balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM en un entorno de VPC compartida:

  • En el primer ejemplo, los componentes de frontend y backend del balanceador de cargas se crean en un proyecto de servicio.
  • En el segundo ejemplo, los componentes de frontend y el mapa de URL del balanceador de cargas se crean en un proyecto de servicio, mientras que el servicio de backend y los backends del balanceador de cargas se crean en un proyecto de servicio diferente. Este tipo de implementación, en el que el mapa de URL de un proyecto hace referencia a un servicio de backend en otro proyecto, se conoce como referencia del servicio entre proyectos.

Ambos ejemplos requieren la misma configuración inicial para otorgar permisos, configurar la red y la subred en el proyecto host y configurar la VPC compartida antes de comenzar a crear balanceadores de cargas.

Estas no son las únicas opciones de configuración de VPC compartida compatibles con el balanceador de cargas de aplicaciones externo global. 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 balanceador de cargas de aplicaciones externo global con backends de grupos de instancias de VM.

Antes de comenzar

Permisos necesarios

La configuración de un balanceador de cargas en una red de VPC compartida requiere cierta configuración y aprovisionamiento iniciales por parte de un administrador. Después de la configuración inicial, el propietario de un proyecto de servicio puede realizar una de las siguientes acciones:

  • Implementar todos los componentes del balanceador de cargas y sus backends en un proyecto de servicio.
  • Implementar los componentes de backend del balanceador de cargas (backend y servicio de backend) en proyectos de servicio a los que puede hacer referencia un mapa de URL en otro servicio o proyecto host.

En esta sección, se resumen los permisos necesarios para seguir esta guía a fin de configurar un balanceador de cargas en una red de VPC compartida.

Configura la VPC compartida

Se requieren los siguientes roles para las siguientes tareas:

  1. Realizar tareas administrativas únicas, como configurar la VPC compartida y habilitar un proyecto host.
  2. Realizar tareas administrativas que se deben repetir cada vez que desees incorporar un proyecto de servicio nuevo. Esto incluye conectar el proyecto de servicio, aprovisionar y configurar recursos de red, y otorgar acceso al administrador del proyecto de servicio.

Estas tareas deben realizarse en el proyecto host de la VPC compartida. Recomendamos que el administrador de la VPC compartida también sea el propietario del proyecto host de la VPC compartida. Esto otorga de forma automática las funciones de administrador de red y administrador de seguridad.

Tarea Función requerida
Configurar la VPC compartida, habilitar el proyecto host y otorgar acceso a los administradores del proyecto de servicio Administrador de VPC compartida
Crea subredes en el proyecto host de VPC compartida y otorga acceso a los administradores del proyecto de servicio Administrador de redes
Agrega y quita reglas de firewall Administrador de seguridad

Después de que se aprovisionan las subredes, el propietario del proyecto host debe otorgar el rol de usuario de red en el proyecto host a cualquier persona (generalmente, desarrolladores, administradores del proyecto de servicio o cuentas de servicio) que necesite usar estos recursos.

Tarea Función requerida
Usar redes y subredes de VPC que pertenezcan al proyecto host Usuario de red

Esta función se puede otorgar a nivel de proyecto o para subredes individuales. Se recomienda que otorgues la función en subredes individuales. Otorgar el rol en el proyecto proporciona acceso a todas las subredes actuales y futuras en la red de VPC del proyecto host.

Implementa un balanceador de cargas y backends

Los administradores de proyectos de servicio necesitan los siguientes roles en el proyecto de servicio para crear recursos y backends de balanceo de cargas. Estos permisos se otorgan automáticamente al propietario o editor del proyecto de servicio.

Funciones otorgadas en el proyecto de servicio
Tarea Función requerida
Crear componentes del balanceador de cargas Administrador de redes
Crea instancias Administrador de instancias
Crear y modificar certificados SSL Administrador de seguridad

Servicios de backend entre proyectos de referencia

Si tu balanceador de cargas necesita hacer referencia a los servicios de backend de otros proyectos de servicio, también conocidos como referencias del servicio entre proyectos, los administradores del balanceador de cargas requerirán el siguiente rol en el proyecto de servicio en el que se crea el servicio de backend.

Funciones otorgadas en el proyecto de servicio
Tarea Función requerida
Permisos para usar servicios en otros proyectos Usuario de servicios del balanceador de cargas

Este rol se puede otorgar a nivel de proyecto o para servicios de backend individuales. Para obtener instrucciones sobre cómo otorgar este rol, consulta el ejemplo de referencia de proyecto entre proyectos en esta página.

Para obtener más información sobre IAM, consulta las siguientes guías:

Requisitos previos

En esta sección, debes realizar los siguientes pasos:

  1. Configurar la red y las subredes en el proyecto host
  2. Configurar la VPC compartida en el proyecto host.

No es necesario realizar 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.

Configura la red y las subredes en el proyecto host

Necesitas una red de VPC compartida con una subred para los backends del balanceador de cargas.

En este ejemplo, se usan la red de VPC, la región y la subred que se describen a continuación:

  • Red. La red se llama lb-network.

  • Subred para backends del balanceador de cargas. Una subred llamada lb-backend-subnet en la región us-west1 usa 10.1.2.0/24 para su rango de IP principal.

Configura la subred para los backends del balanceador de cargas

No es necesario realizar 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.

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

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:

    1. Configura el Modo de creación de subred como Personalizado.
    2. En la sección Subred nueva, ingresa la siguiente información:

      • Nombre: lb-backend-subnet
      • Región: us-west1

      • Rangos de direcciones IP: 10.1.2.0/24

    3. Haz clic en Listo.

  5. Haz clic en Crear.

gcloud

  1. Crea una red de VPC con el comando gcloud compute networks create:

    gcloud compute networks create lb-network --subnet-mode=custom
    
  2. Crea una subred en la red lb-network en la región us-west1:

    gcloud compute networks subnets create lb-backend-subnet 
    --network=lb-network
    --range=10.1.2.0/24
    --region=us-west1

Otorga a los administradores de proyectos de servicio acceso a la subred de backend

Los administradores de proyectos de servicio requieren acceso a la subred lb-backend-subnet para poder aprovisionar los backends del balanceador de cargas.

Un administrador de VPC compartida debe otorgar acceso a la subred de backend a los administradores del proyecto de servicio (o desarrolladores que implementan recursos y backends que usan la subred). Si deseas obtener instrucciones, consulta Administradores de proyectos de servicio para algunas subredes.

Configura reglas de firewall en el proyecto host

En este ejemplo, se usan las siguientes reglas de firewall:
  • fw-allow-health-check. Es una regla de entrada, aplicable a las instancias con balanceo de cargas, que permite el tráfico de TCP de los sistemas de verificación de estado de Google Cloud (en 130.211.0.0/2235.191.0.0/16). En este ejemplo, se usa la etiqueta de destino load-balanced-backend para identificar las instancias a las que debe aplicarse.
Sin esta regla de firewall, la regla predeterminada de denegación de entrada bloquea el tráfico entrante a las instancias de backend.

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

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 de Google Cloud:
    • Nombre: fw-allow-health-check
    • Red: lb-network
    • Dirección del tráfico: entrada
    • Acción si hay coincidencia: permitir
    • Objetivos: etiquetas de destino especificadas
    • Etiquetas de destino: load-balanced-backend
    • Filtro de fuente: Rangos de IPv4
    • Rangos de IPv4 de origen: 130.211.0.0/22 y 35.191.0.0/16
    • Protocolos y puertos:
      • Elige Protocolos y puertos especificados.
      • Marca TCP e ingresa 80 para el número de puerto.
      • Como práctica recomendada, limita esta regla solo a los protocolos y puertos que coincidan con los que usa tu verificación de estado. Si usas tcp:80 en el protocolo y el puerto, Google Cloud puede usar HTTP en el puerto 80 a fin de contactar las VMs, pero no puede usar HTTPS en el puerto 443 para comunicarse con ellas.

  3. Haz clic en Crear.

gcloud

  1. Crea la regla de firewall fw-allow-health-check para permitir las verificaciones de estado de Google Cloud. Este ejemplo permite todo el tráfico de TCP proveniente de la verificación de estado. Sin embargo, puedes configurar un conjunto más limitado de puertos para satisfacer tus necesidades.

    gcloud compute firewall-rules create fw-allow-health-check \
       --network=lb-network \
       --action=allow \
       --direction=ingress \
       --source-ranges=130.211.0.0/22,35.191.0.0/16 \
       --target-tags=load-balanced-backend \
       --rules=tcp
    

Configura la VPC compartida en el proyecto host

Este paso implica habilitar un proyecto host de VPC compartida, compartir subredes del proyecto host y conectar 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:

En el resto de estas instrucciones, se supone que ya configuraste una VPC compartida. Esto incluye configurar políticas de IAM para tu organización y designar los proyectos host y de servicio.

No continúes hasta configurar la VPC compartida y habilitado los proyectos host y de servicio.

Después de completar los pasos definidos en esta sección de requisitos previos, puedes realizar una de las siguientes configuraciones:

Configura un balanceador de cargas en el proyecto de servicio

Después de configurar la red de VPC en el proyecto host y configurar la VPC compartida, puedes cambiar tu atención al proyecto de servicio, en el que necesitas crear todos los componentes de balanceo de cargas (servicio de backend, mapa de URL, proxy de destino y regla de reenvío) y los backends.

En esta sección, se supone que realizaste los pasos de requisitos previos descritos en la sección anterior en el proyecto host. En esta sección, los componentes de frontend y backend del balanceador de cargas junto con los backends se crean en un proyecto de servicio.

En la siguiente figura, se muestran los componentes de un balanceador de cargas de aplicaciones externo global en un proyecto de servicio, que se conecta al proyecto host en una red de VPC compartida.

Componentes del frontend y backend del balanceador de cargas en un proyecto de servicio
Figura 1. Componentes del frontend y backend del balanceador de cargas en un proyecto de servicio

Estos pasos debe realizarlos el administrador del proyecto de servicio (o un desarrollador que opera dentro del proyecto de servicio) y no requieren participación del administrador del proyecto host. Los pasos de esta sección son similares a los pasos estándar para configurar un balanceador de cargas de aplicaciones externo global.

En el ejemplo de esta página, se configura de manera explícita una dirección IP reservada para la regla de reenvío del balanceador de cargas de aplicaciones externo global, en lugar de permitir que se asigne una dirección IP efímera. Recomendamos reservar direcciones IP para las reglas de reenvío.

Crea un backend de grupo de instancias administrado

El precursor de la creación de un grupo de instancias administrado es la creación de una plantilla de instancias, que es un recurso que puedes usar a fin de crear instancias de máquinas virtuales (VMs). Las cargas del tráfico de los clientes se balancean a las VMs de un grupo de instancias. El grupo de instancias administrado proporciona las VMs que ejecutan los servidores de backend de un balanceador de cargas de aplicaciones externo. En este ejemplo, los backends entregan sus propios nombres de host.

Console

Crea una plantilla de instancias

  1. En la consola de Google Cloud, ve a la página Plantillas de instancias de Compute Engine.

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias.

  3. En Nombre, ingresa backend-template.

  4. En la sección Disco de arranque, asegúrate de que el disco de arranque esté configurado en una imagen de Debian, como Debian GNU/Linux 10 (buster). Haz clic en Cambiar para cambiar la imagen si es necesario.

  5. Expanda la sección Opciones avanzadas.

  6. Expande la sección Herramientas de redes y, en el campo Etiquetas de red, ingresa load-balanced-backend.

  7. En Interfaces de red, selecciona Redes compartidas conmigo (del proyecto host: HOST_PROJECT_ID).

  8. En la lista Subred compartida, selecciona la subred lb-backend-subnet de la red lb-network.

  9. Expande la sección Administración y, en el campo Automatización, especifica la siguiente secuencia de comandos de inicio:

     #! /bin/bash
     apt-get update
     apt-get install apache2 -y
     a2ensite default-ssl
     a2enmod ssl
     vm_hostname="$(curl -H "Metadata-Flavor:Google" \
     http://metadata.google.internal/computeMetadata/v1/instance/name)"
     echo "Page served from: $vm_hostname" | \
     tee /var/www/html/index.html
     systemctl restart apache2
    
  10. Haz clic en Crear.

Cree un grupo de instancias administrado

  1. En la consola de Google Cloud, ve a la página Grupos de instancias de Compute Engine.

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias.

  3. En las opciones, selecciona Nuevo grupo de instancias administrado (sin estado).

  4. Para el nombre del grupo de instancias, ingresa lb-backend.

  5. En la lista Plantilla de instancias, selecciona la plantilla de instancias backend-template que creaste en el paso anterior.

  6. En la sección Ubicación, selecciona Zona única e ingresa los siguientes valores:

    • En Región, selecciona us-west1.

    • En Zona, selecciona us-west1-a.

  7. En la sección Ajuste de escala automático, ingresa los siguientes valores:

    • En Modo de ajuste de escala automático, selecciona Activado: agrega y quita instancias del grupo.

    • En Cantidad mínima de instancias, selecciona 2.

    • En Cantidad máxima de instancias, selecciona 3.

  8. En la sección Asignación de puertos, haz clic en Agregar puerto e ingresa los siguientes valores:

    • En Nombre del puerto, ingresa http.

    • En Número de puerto, ingresa 80.

  9. Haz clic en Crear.

gcloud

  1. Crea una plantilla de instancias:

    gcloud compute instance-templates create backend-template \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \
        --tags=load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_ID
    
  2. Crea un grupo de instancias administrado y selecciona la plantilla de instancias que creaste en el paso anterior:

    gcloud compute instance-groups managed create lb-backend \
        --zone=us-west1-a \
        --size=2 \
        --template=backend-template \
        --project=SERVICE_PROJECT_ID
    
  3. Agrega un puerto con nombre al grupo de instancias:

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_ID
    

Crear una verificación de estado

Las verificaciones de estado son pruebas que confirman la disponibilidad de los backends. Crea una verificación de estado que use el protocolo HTTP y sondee el puerto 80. Luego, adjuntarás esta verificación de estado al servicio de backend al que hace referencia el balanceador de cargas.

Console

  1. En la consola de Google Cloud, ve a la página Verificaciones de estado de Compute Engine.

    Ir a Verificaciones de estado

  2. Para el nombre de la verificación de estado, ingresa lb-health-check.

  3. Establece el Protocolo en HTTP.

  4. Haz clic en Crear.

gcloud

Crea una verificación de estado de HTTP.

gcloud compute health-checks create http lb-health-check \
  --use-serving-port \
  --project=SERVICE_PROJECT_ID

Reserva la dirección IP del balanceador de cargas

Reserva una dirección IP externa estática global que se pueda asignar a la regla de reenvío del balanceador de cargas.

Console

  1. En la consola de Google Cloud, ve a la página Direcciones IP externas.

    Ir a Direcciones IP

  2. Haz clic en Reservar dirección IP externa estática.

  3. En Nombre, ingresa lb-ipv4-1.

  4. En Nivel de servicio de red, establece Premium.

  5. Configura Versión de IP como IPv4.

  6. Establece Tipo en Global.

  7. Haz clic en Reservar.

gcloud

Crea una dirección IP externa estática global.

gcloud compute addresses create lb-ipv4-1 \
  --ip-version=IPV4 \
  --network-tier=PREMIUM \
  --global
  --project=SERVICE_PROJECT_ID

Configura un recurso de certificado SSL

Para un balanceador de cargas que use HTTPS como el protocolo de solicitud y respuesta, crea un recurso de certificado SSL como se describe en los siguientes recursos:

Recomendamos que uses un certificado administrado por Google.

En este ejemplo, se supone que creaste un certificado SSL llamado lb-ssl-cert. El certificado SSL se adjunta al proxy de destino que crearás en uno de los siguientes pasos.

Configura el balanceador de cargas

En esta sección, se muestra cómo crear los siguientes recursos para un balanceador de cargas de aplicaciones externo global:

  • Servicio de backend con un grupo de instancias administrado como backend
  • Mapa de URL
  • Certificado SSL (obligatorio solo para el tráfico HTTPS)
  • Proxy de destino
  • Regla de reenvío

En este ejemplo, puedes usar HTTP o HTTPS como el protocolo de solicitud y respuesta entre el cliente y el balanceador de cargas. Para HTTPS, necesitas un recurso de certificado SSL a fin de configurar el proxy. Recomendamos que uses un certificado administrado por Google.

Console

Inicia la configuración

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

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Orientado al público o interno, selecciona Orientado al público (externo) y haz clic en Siguiente.
  5. En Implementación global o de una sola región, selecciona Mejor para cargas de trabajo globales y haz clic en Siguiente.
  6. En Generación de balanceadores de cargas, selecciona Balanceador de cargas de aplicaciones externo global y haz clic en Siguiente.
  7. Haz clic en Configurar.

Configuración básica

  1. Para el nombre del balanceador de cargas, ingresa l7-xlb-shared-vpc.

Configura el frontend del balanceador de cargas

Para el tráfico HTTP:

  1. Haz clic en Configuración de frontend.

  2. Para el http-fw-ruleNombre del balanceador de cargas, ingresa .

  3. En Protocolo, selecciona HTTP.

  4. Configura Versión de IP como IPv4.

  5. En Dirección IP, selecciona lb-ipv4-1, que es la dirección IP que reservaste antes.

  6. Establece el puerto en 80 para permitir el tráfico HTTP.

  7. Para completar la configuración de frontend, haz clic en Listo.

  8. Verifica que haya una marca de verificación azul junto a Configuración de frontend antes de continuar.

Para el tráfico HTTPS:

  1. Haz clic en Configuración de frontend.

  2. Para el https-fw-ruleNombre del balanceador de cargas, ingresa .

  3. En Protocolo, selecciona HTTPS.

  4. Configura Versión de IP como IPv4.

  5. En Dirección IP, selecciona lb-ipv4-1, que es la dirección IP que reservaste antes.

  6. Establece el puerto en 443 para permitir el tráfico HTTPS.

  7. En la lista Certificado, selecciona el Certificado SSL que creaste.

  8. Para completar la configuración de frontend, haz clic en Listo.

  9. Verifica que haya una marca de verificación azul junto a Configuración de frontend antes de continuar.

Configura el backend

  1. Haz clic en Configuración de backend.

  2. En el menú Servicios y buckets de backend, haz clic en Crear un servicio de backend.

  3. Para el nombre del servicio de backend, ingresa lb-backend-service.

  4. En Tipo de backend, selecciona Grupo de instancias.

  5. Configura Protocolo como HTTP.

  6. En el campo Puerto con nombre, ingresa http. Este es el mismo nombre de puerto que ingresaste cuando creaste el grupo de instancias administrado.

  7. Para agregar backends al servicio de backend, sigue estos pasos:

    1. En la sección Backends, establece el grupo de instancias en lb-backend, que es el grupo de instancias administrado que creaste en un paso anterior.

    2. En Números de puerto, ingresa 80.

    3. Para agregar el backend, haz clic en Listo.

  8. Para agregar una verificación de estado, en la lista Verificación de estado, selecciona lb-health-check, que es la verificación de estado que creaste antes.

  9. Para crear el servicio de backend, haz clic en Crear.

  10. Verifica que haya una marca de verificación azul junto a Configuración de backend antes de continuar.

Configura las reglas de enrutamiento

  • Haga clic en Reglas de enrutamiento. Asegúrate de que lb-backend-service sea el servicio de backend predeterminado para los hosts y rutas de acceso no coincidentes.

Para obtener información sobre la administración del tráfico, consulta Configura la administración del tráfico.

Revise y finalice la configuración

  1. Haz clic en Revisar y finalizar.

  2. Revisa los parámetros de configuración del frontend y el backend del balanceador de cargas para asegurarte de que sean los esperados.

  3. Haz clic en Crear y, luego, espera a que se cree el balanceador de cargas.

gcloud

  1. Crea un servicio de backend para distribuir el tráfico entre backends:

    gcloud compute backend-services create lb-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=lb-health-check \
        --global \
        --project=SERVICE_PROJECT_ID
    
  2. Agrega tu grupo de instancias como backend al servicio de backend:

    gcloud compute backend-services add-backend lb-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_ID
    
  3. Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend:

    gcloud compute url-maps create lb-map \
        --default-service=lb-backend-service \
        --global \
        --project=SERVICE_PROJECT_ID
    
  4. Crea un proxy de destino.

    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 \
        --global \
        --project=SERVICE_PROJECT_ID
    

    Para el tráfico HTTPS, crea un proxy HTTPS de destino a fin de 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, por lo que también debes cargar el certificado SSL en este paso:

    gcloud compute target-https-proxies create https-proxy \
        --url-map=lb-map \
        --ssl-certificates=lb-ssl-cert
        --global \
        --project=SERVICE_PROJECT_ID
    
  5. Cree una regla de reenvío.

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

    gcloud compute forwarding-rules create http-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-http-proxy=http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_ID
    

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

    gcloud compute forwarding-rules create https-fw-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=lb-ipv4-1 \
        --global \
        --target-https-proxy=https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_ID
    

Prueba el balanceador de cargas

Cuando el servicio de balanceo de cargas se esté ejecutando, puedes enviar tráfico a la regla de reenvío y ver cómo este se dispersa a las diferentes instancias.

Console

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

    Ir a Balanceo de cargas

  2. Haz clic en el balanceador de cargas que acabas de crear.

  3. Toma nota de la dirección IP del balanceador de cargas. Esta dirección IP se denomina LB_IP_ADDRESS en los siguientes pasos.

  4. En la sección Backend, confirma que las VM estén en buen estado.

    La columna En buen estado debe propagarse, lo que indica que las VMs están en buen estado (por ejemplo, si se crean dos instancias, deberías ver un mensaje que indica 2 of 2 con una marca de verificación verde junto a este). En caso contrario, primero vuelve a cargar la página. Puede tomar unos minutos que la consola de Google Cloud indique que las VMs están en buen estado. Si los backends no se muestran en buen estado después de unos minutos, revisa la configuración del firewall y la etiqueta de red asignada a tus VMs de backend.

  5. Después de que la consola de Google Cloud muestre que las instancias de backend están en buen estado, puedes probar el balanceador de cargas si apuntas el navegador web a https://LB_IP_ADDRESS (o http://LB_IP_ADDRESS). Reemplaza LB_IP_ADDRESS por la dirección IP del balanceador de cargas.

  6. Si usaste un certificado autofirmado para las pruebas de HTTPS, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado.

  7. El navegador debe renderizar una página con contenido que muestre el nombre de la instancia que entregó la página (por ejemplo, Page served from: lb-backend-example-xxxx). Si el navegador no renderiza esta página, revisa los parámetros de configuración en esta guía.

gcloud

Toma nota de la dirección IP que estaba reservada:

gcloud compute addresses describe IP_ADDRESS_NAME \
    --format="get(address)" \
    --global

Para probar el balanceador de cargas, apunta el navegador web hacia https://LB_IP_ADDRESS (o http://LB_IP_ADDRESS). Reemplaza LB_IP_ADDRESS por la dirección IP del balanceador de cargas.

Si usaste un certificado autofirmado para las pruebas de HTTPS, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado.

Tu navegador debe renderizar una página con información mínima sobre la instancia de backend. Si el navegador no renderiza esta página, revisa las opciones de configuración que aparecen en esta guía.

Configura un balanceador de cargas con un servicio de backend 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 un proyecto de servicio.

Los balanceadores de cargas de aplicaciones externos globales 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 servicios de backend (y backends) ubicados en varios proyectos de servicio en entornos de VPC compartida. Esto se conoce como referencia de servicio entre proyectos.

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 servicio de backend en un proyecto de servicio
  • Regla de reenvío, mapa de URL y proxy de destino en un proyecto de servicio, y backend de servicio en otro proyecto de servicio

Requisitos de configuración

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 al comienzo de esta página:

En esta configuración, la regla de reenvío, el proxy de destino y el mapa de URL se encuentran en un proyecto de servicio, y el servicio de backend y los backends se encuentran en otro proyecto de servicio.

  1. En el proyecto de servicio B, configurarás los siguientes recursos de backend:
    • Backend de grupo de instancias administrado
    • Verificación de estado
    • Servicio de backend global
  2. En el proyecto de servicio A, configurarás los siguientes recursos de frontend:
    • Dirección IP
    • Certificado SSL
    • Mapa de URL
    • Proxy de destino
    • Regla de reenvío

En la siguiente figura, se muestra un balanceador de cargas de aplicaciones externo global en el que el servicio de backend del balanceador de cargas en un proyecto de servicio hace referencia a un mapa de URL en otro proyecto de servicio.

Componentes de 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

El servicio entre proyectos que hace referencia a un balanceador de cargas de aplicaciones externo global no requiere que las instancias de backend sean parte de la misma red de VPC ni una red de VPC compartida.

En este ejemplo, las VMs de backend en el proyecto de servicio son parte de la red de VPC compartida que se crea en el proyecto host. Sin embargo, también puedes configurar una red de VPC independiente (es decir, una red de VPC no compartida), junto con las reglas de firewall necesarias, en un proyecto de servicio. Luego, puedes crear instancias de backend (por ejemplo, un grupo de instancias) que formen parte de esta red de VPC independiente. Después de crear las instancias de backend, puedes seguir los pasos restantes, como se muestra en este ejemplo, para crear un servicio de backend en el proyecto de servicio y conectarlo a un mapa de URL en otro proyecto de servicio mediante el uso de referencias de servicio entre proyectos.

Configura los componentes de backend del balanceador de cargas en el proyecto de servicio B

En esta sección, debes configurar los siguientes recursos de backend en el proyecto de servicio B:

  • Grupo de instancias administrado
  • Verificación de estado
  • Servicio de backend global

Crea un backend de grupo de instancias administrado

El precursor de la creación de un grupo de instancias administrado es la creación de una plantilla de instancias, que es un recurso que puedes usar a fin de crear instancias de máquinas virtuales (VMs). Las cargas del tráfico de los clientes se balancean a las VMs de un grupo de instancias. El grupo de instancias administrado proporciona las VMs que ejecutan los servidores de backend de un balanceador de cargas de aplicaciones externo. En este ejemplo, los backends entregan sus propios nombres de host.

Console

Crea una plantilla de instancias

  1. En la consola de Google Cloud, ve a la página Plantillas de instancias de Compute Engine.

    Ir a Plantillas de instancia

  2. Haz clic en Crear plantilla de instancias.

  3. En Nombre, ingresa backend-template.

  4. En la sección Disco de arranque, asegúrate de que el disco de arranque esté configurado en una imagen de Debian, como Debian GNU/Linux 10 (buster). Haz clic en Cambiar para cambiar la imagen si es necesario.

  5. Expanda la sección Opciones avanzadas.

  6. Expande la sección Herramientas de redes y, en el campo Etiquetas de red, ingresa load-balanced-backend.

  7. En Interfaces de red, selecciona Redes compartidas conmigo (del proyecto host: HOST_PROJECT_ID)).

  8. En la lista Subred compartida, selecciona la subred lb-backend-subnet de la red lb-network.

  9. Expande la sección Administración y, en el campo Automatización, especifica la siguiente secuencia de comandos de inicio:

      #! /bin/bash
      apt-get update
      apt-get install apache2 -y
      a2ensite default-ssl
      a2enmod ssl
      vm_hostname="$(curl -H "Metadata-Flavor:Google" \
      http://metadata.google.internal/computeMetadata/v1/instance/name)"
      echo "Page served from: $vm_hostname" | \
      tee /var/www/html/index.html
      systemctl restart apache2
    
  10. Haz clic en Crear.

Cree un grupo de instancias administrado

  1. En la consola de Google Cloud, ve a la página Grupos de instancias de Compute Engine.

    Ir a Grupos de instancias

  2. Haz clic en Crear grupo de instancias.

  3. En las opciones, selecciona Nuevo grupo de instancias administrado (sin estado).

  4. Para el nombre del grupo de instancias, ingresa lb-backend.

  5. En la lista Plantilla de instancias, selecciona la plantilla de instancias backend-template que creaste en el paso anterior.

  6. En la sección Ubicación, selecciona Zona única e ingresa los siguientes valores:

    • En Región, selecciona us-west1.

    • En Zona, selecciona us-west1-a.

  7. En la sección Ajuste de escala automático, ingresa los siguientes valores:

    • En Modo de ajuste de escala automático, selecciona Activado: agrega y quita instancias del grupo.

    • En Cantidad mínima de instancias, selecciona 2.

    • En Cantidad máxima de instancias, selecciona 3.

  8. En la sección Asignación de puertos, haz clic en Agregar puerto e ingresa los siguientes valores:

    • En Nombre del puerto, ingresa http.

    • En Número de puerto, ingresa 80.

  9. Haz clic en Crear.

gcloud

  1. Crea una plantilla de instancias:

    gcloud compute instance-templates create backend-template \
        --region=us-west1 \
        --network=projects/HOST_PROJECT_ID/global/networks/lb-network \
        --subnet=projects/HOST_PROJECT_ID/regions/us-west1/subnetworks/lb-backend-subnet \
        --tags=load-balanced-backend \
        --image-family=debian-10 \
        --image-project=debian-cloud \
        --metadata=startup-script='#! /bin/bash
        apt-get update
        apt-get install apache2 -y
        a2ensite default-ssl
        a2enmod ssl
        vm_hostname="$(curl -H "Metadata-Flavor:Google" \
        http://metadata.google.internal/computeMetadata/v1/instance/name)"
        echo "Page served from: $vm_hostname" | \
        tee /var/www/html/index.html
        systemctl restart apache2' \
        --project=SERVICE_PROJECT_B_ID
    
  2. Crea un grupo de instancias administrado y selecciona la plantilla de instancias que creaste en el paso anterior:

    gcloud compute instance-groups managed create lb-backend \
        --zone=us-west1-a \
        --size=2 \
        --template=backend-template \
        --project=SERVICE_PROJECT_B_ID
    
  3. Agrega un puerto con nombre al grupo de instancias:

    gcloud compute instance-groups set-named-ports lb-backend \
        --named-ports=http:80 \
        --zone=us-west1-a \
        --project=SERVICE_PROJECT_B_ID
    

Crear una verificación de estado

Las verificaciones de estado son pruebas que confirman la disponibilidad de los backends. Crea una verificación de estado que use el protocolo HTTP y sondee el puerto 80. Luego, adjuntarás esta verificación de estado al servicio de backend al que hace referencia el balanceador de cargas.

Console

  1. En la consola de Google Cloud, ve a la página Verificaciones de estado de Compute Engine.

    Ir a Verificaciones de estado

  2. Para el nombre de la verificación de estado, ingresa lb-health-check.

  3. Establece el Protocolo en HTTP.

  4. Haz clic en Crear.

gcloud

Crea una verificación de estado de HTTP.

gcloud compute health-checks create http lb-health-check \
  --use-serving-port \
  --project=SERVICE_PROJECT_B_ID

Crea un servicio de backend global.

Crea un servicio de backend global para distribuir el tráfico entre backends. Como parte de este paso, debes asignar la verificación de estado que creaste al servicio de backend y agregar el grupo de instancias como backend al servicio de backend.

Console

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

    Ir a Balanceo de cargas

  2. Ve a la sección Backends.

  3. Haz clic en Crear servicio de backend.

  4. En Servicio de backend global, haz clic en el botón Crear junto a él.

  5. Para el nombre del servicio de backend, ingresa cross-ref-backend-service.

  6. En Tipo de backend, selecciona Grupo de instancias.

  7. Configura Protocolo como HTTP.

  8. En el campo Puerto con nombre, ingresa http. Este es el mismo nombre de puerto que ingresaste cuando creaste el grupo de instancias administrado.

  9. Para agregar backends al servicio de backend, sigue estos pasos:

    1. En la sección Backends, establece el grupo de instancias en lb-backend, que es el grupo de instancias administrado que creaste en un paso anterior.

    2. En Números de puerto, ingresa 80.

    3. Para agregar el backend, haz clic en Listo.

  10. Para agregar una verificación de estado, en la lista Verificación de estado, selecciona lb-health-check, que es la verificación de estado que creaste antes.

  11. Para crear el servicio de backend, haz clic en Crear.

gcloud

  1. Crea un servicio de backend global para distribuir el tráfico entre backends:

    gcloud compute backend-services create cross-ref-backend-service \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --protocol=HTTP \
        --port-name=http \
        --health-checks=lb-health-check \
        --global \
        --project=SERVICE_PROJECT_B_ID
    
  2. Agrega tu grupo de instancias como backend al servicio de backend:

    gcloud compute backend-services add-backend cross-ref-backend-service \
        --instance-group=lb-backend \
        --instance-group-zone=us-west1-a \
        --global \
        --project=SERVICE_PROJECT_B_ID
    

Otorga permisos al administrador del balanceador de cargas para usar el servicio de backend

Si quieres que los balanceadores de cargas hagan referencia a los servicios de backend en otros proyectos de servicio, el administrador del balanceador de cargas debe tener el permiso compute.backendServices.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 o a nivel del servicio de backend individual.

Este paso no es necesario si ya otorgaste los permisos necesarios a nivel de servicio de backend mientras creas el servicio de backend. Puedes omitir esta sección o continuar leyendo para obtener información sobre cómo otorgar acceso a todos los servicios de backend en este proyecto, de modo que no tengas que otorgar acceso cada vez que crees un servicio de backend nuevo.

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

Console

Permisos a nivel del proyecto

Sigue estos pasos para otorgar permisos a todos los servicios de backend del proyecto.

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

  1. En la consola de Google, ve a la página Servicios de balanceo de cargas compartidos.

    Ir a Servicios de balanceo de cargas compartidos

  2. En la sección Todos los permisos del servicio de backend (permisos a nivel de proyecto), selecciona tu proyecto.

  3. Si el panel de permisos no es visible, haz clic en Mostrar panel de permisos. El panel Permisos a nivel de proyecto se abrirá a la derecha.

  4. Haz clic en Agregar principal.

  5. En Nuevas principales, ingresa la dirección de correo electrónico del principal o algún otro identificador.

  6. En Función, selecciona el rol Usuario de servicios de balanceador de cargas de Compute en la lista desplegable.

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

  8. Haz clic en Guardar.

Permisos a nivel de recurso para servicios de backend individuales

Usa los siguientes pasos para otorgar permisos a servicios de backend individuales en tu proyecto.

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

  1. En la consola de Google, ve a la página Servicios de balanceo de cargas compartidos.

    Ir a Servicios de balanceo de cargas compartidos

  2. En la sección Permisos de servicio de backend individuales (permisos a nivel de recurso), selecciona el servicio de backend al que deseas otorgar acceso.

  3. Haz clic en Agregar principal.

  4. En Nuevas principales, ingresa la dirección de correo electrónico del principal o algún otro identificador.

  5. En Función, selecciona el rol Usuario de servicios de balanceador de cargas de Compute en la lista desplegable.

  6. Haz clic en Guardar.

gcloud

Permisos a nivel del proyecto

Sigue estos pasos para otorgar permisos a todos los servicios de backend del proyecto.

Necesitas los permisos compute.backendServices.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"

Permisos a nivel de recurso para servicios de backend individuales

A nivel de servicio 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).

Necesitas el permiso compute.backendServices.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/us-west1/backend-services/BACKEND_SERVICE_NAME",title=Shared VPC condition'

o

gcloud compute backend-services add-iam-policy-binding BACKEND_SERVICE_NAME \
    --member="user:LOAD_BALANCER_ADMIN" \
    --role="roles/compute.loadBalancerServiceUser" \
    --project=SERVICE_PROJECT_B_ID \
    --region=us-west1

Para usar estos comandos, reemplaza LOAD_BALANCER_ADMIN por la principal del usuario, por ejemplo, test-user@gmail.com.

También puedes configurar los permisos de IAM para que solo se apliquen a un subconjunto de servicios de backend regionales mediante condiciones y la especificación de atributos de condición.

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

En esta sección, debes configurar los siguientes recursos de frontend en el proyecto de servicio A:

  • Dirección IP
  • Certificado SSL
  • Mapa de URL
  • Proxy de destino
  • Regla de reenvío

Reserva la dirección IP del balanceador de cargas

Reserva una dirección IP externa estática global que se pueda asignar a la regla de reenvío del balanceador de cargas.

Console

  1. En la consola de Google Cloud, ve a la página Direcciones IP externas.

    Ir a Direcciones IP

  2. Haz clic en Reservar dirección IP externa estática.

  3. En Nombre, ingresa cross-ref-ip-address.

  4. En Nivel de servicio de red, establece Premium.

  5. Configura Versión de IP como IPv4.

  6. Establece Tipo en Global.

  7. Haz clic en Reservar.

gcloud

Crea una dirección IP externa estática global.

gcloud compute addresses create cross-ref-ip-address \
    --ip-version=IPV4 \
    --network-tier=PREMIUM \
    --global \
    --project=SERVICE_PROJECT_A_ID

Configura un recurso de certificado SSL

Para un balanceador de cargas que use HTTPS como el protocolo de solicitud y respuesta, crea un recurso de certificado SSL como se describe en los siguientes recursos:

Recomendamos que uses un certificado administrado por Google.

En este ejemplo, se supone que creaste un certificado SSL llamado lb-ssl-cert. El certificado SSL se adjunta al proxy de destino que crearás en uno de los siguientes pasos.

Crea los componentes de frontend

Console

La consola de Google Cloud no es compatible con el backend entre proyectos. La consola de Google Cloud no es compatible con la referencia del servicio de backend entre proyectos. Sin embargo, puedes hacer referencia al servicio de backend en el proyecto de servicio B desde el mapa de URL en el proyecto de servicio A mediante Google Cloud CLI.

gcloud

  1. Opcional: Antes de crear un balanceador de cargas con servicios de backend de referencia cruzada, descubre si se puede hacer referencia a los servicios de backend a los que deseas hacer referencia mediante un mapa de URL:

    gcloud compute backend-services list-usable \
        --global \
        --project=SERVICE_PROJECT_B_ID
    
  2. Crea un mapa de URL para enrutar las solicitudes entrantes al servicio de backend:

    gcloud compute url-maps create cross-ref-url-map \
        --default-service=projects/SERVICE_PROJECT_B_ID/global/backendServices/cross-ref-backend-service \
        --global \
        --project=SERVICE_PROJECT_A_ID
    
  3. Crea un proxy de destino.

    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 cross-ref-http-proxy \
        --url-map=cross-ref-url-map \
        --global \
        --project=SERVICE_PROJECT_A_ID
    

    Para el tráfico HTTPS, crea un proxy HTTPS de destino a fin de 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, por lo que también debes cargar el certificado SSL en este paso:

    gcloud compute target-https-proxies create cross-ref-https-proxy \
        --url-map=cross-ref-url-map \
        --ssl-certificates=lb-ssl-cert
        --global \
        --project=SERVICE_PROJECT_A_ID
    
  4. Cree una regla de reenvío.

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

    gcloud compute forwarding-rules create cross-ref-http-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-http-proxy=cross-ref-http-proxy \
        --ports=80 \
        --project=SERVICE_PROJECT_A_ID
    

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

    gcloud compute forwarding-rules create cross-ref-https-forwarding-rule \
        --load-balancing-scheme=EXTERNAL_MANAGED \
        --address=cross-ref-ip-address \
        --global \
        --target-https-proxy=cross-ref-https-proxy \
        --ports=443 \
        --project=SERVICE_PROJECT_A_ID
    

Prueba el balanceador de cargas

La configuración del balanceador de cargas puede tomar varios minutos. Cuando el servicio de balanceo de cargas se esté ejecutando, puedes enviar tráfico a la regla de reenvío en el proyecto de servicio A y ver cómo este se dispersa a las diferentes instancias de VM en proyecto de servicio B.

Console

  1. En la consola de Google Cloud, ve a la página Balanceo de cargas en el proyecto de servicio A.

    Ir a Balanceo de cargas

  2. Haz clic en el balanceador de cargas que acabas de crear.

  3. Toma nota de la dirección IP del balanceador de cargas. Esta dirección IP se denomina LB_IP_ADDRESS en los siguientes pasos.

  4. Para probar el balanceador de cargas, apunta el navegador web hacia https://LB_IP_ADDRESS (o http://LB_IP_ADDRESS). Reemplaza LB_IP_ADDRESS por la dirección IP del balanceador de cargas.

  5. Si usaste un certificado autofirmado para las pruebas de HTTPS, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado.

  6. El navegador debe renderizar una página con contenido que muestre el nombre de la instancia que entregó la página (por ejemplo, Page served from: lb-backend-example-xxxx). Si el navegador no renderiza esta página, revisa los parámetros de configuración en esta guía.

gcloud

Toma nota de la dirección IP que estaba reservada:

gcloud compute addresses describe IP_ADDRESS_NAME \
    --format="get(address)" \
    --global
    --project=SERVICE_PROJECT_A_ID

Para probar el balanceador de cargas, apunta el navegador web hacia https://LB_IP_ADDRESS (o http://LB_IP_ADDRESS). Reemplaza LB_IP_ADDRESS por la dirección IP del balanceador de cargas.

Si usaste un certificado autofirmado para las pruebas de HTTPS, el navegador mostrará una advertencia. Debes indicar de manera explícita a tu navegador que acepte un certificado autofirmado.

Tu navegador debe renderizar una página con información mínima sobre la instancia de backend. Si el navegador no renderiza esta página, revisa las opciones de configuración que aparecen en esta guía.

¿Qué sigue?