En este instructivo, se muestra cómo tú, como productor de servicios, puedes crear un servicio simple que use un balanceador de cargas de red de transferencia interno. De forma predeterminada, un balanceador de cargas de red de transferencia interno solo está disponible desde la red de VPC que lo aloja.
Este instructivo está dirigido a arquitectos de nube, arquitectos de red, administradores de red y administradores de TI.
Objetivos
- Configura las herramientas de redes para los recursos del productor de servicios
- Crea recursos de VM para el backend del balanceador de cargas
- Configura los componentes del balanceador de cargas
- Prueba el acceso al balanceador de cargas
Costos
En este documento, usarás los siguientes componentes facturables de Google Cloud:
Para obtener una estimación de costos en función del uso previsto,
usa la calculadora de precios.
Cuando completes las tareas que se describen en este documento, podrás borrar los recursos que creaste para evitar que se te siga facturando. Para obtener más información, consulta Realiza una limpieza.
Antes de comenzar
- Crea o selecciona un proyecto para usarlo con los recursos del productor de servicios.
En los siguientes instructivos, este proyecto se denomina
PRODUCER_PROJECT. -
In the Google Cloud console, go to the project selector page.
-
Select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Enable the Compute Engine API.
Roles required to enable APIs
To enable APIs, you need the Service Usage Admin IAM role (
roles/serviceusage.serviceUsageAdmin), which contains theserviceusage.services.enablepermission. Learn how to grant roles. -
Make sure that you have the following role or roles on the project: Compute Engine > Compute Network Admin, Compute Engine > Compute Security Admin, Compute Engine > Compute Instance Admin
Check for the roles
-
In the Google Cloud console, go to the IAM page.
Go to IAM - Select the project.
-
In the Principal column, find all rows that identify you or a group that you're included in. To learn which groups you're included in, contact your administrator.
- For all rows that specify or include you, check the Role column to see whether the list of roles includes the required roles.
Grant the roles
-
In the Google Cloud console, go to the IAM page.
Ir a IAM - Selecciona el proyecto.
- Haz clic en Otorgar acceso.
-
En el campo Principales nuevas, ingresa tu identificador de usuario. Esta suele ser la dirección de correo electrónico de una Cuenta de Google.
- Haz clic en Seleccionar un rol y, luego, busca el rol.
- Para otorgar roles adicionales, haz clic en Agregar otro rol y agrega uno más.
- Haz clic en Guardar.
-
Configura las redes
En las siguientes secciones, se explica cómo crear una red, una subred y reglas de firewall para el servicio.
Configura una red y una subred
Para crear la red y la subred de servicio para el balanceador de cargas, completa los pasos que se indican en las siguientes secciones.
Console
En la consola de Google Cloud , ve a la página Redes de VPC.
Haz clic en Crear red de VPC.
En Nombre, ingresa
service-network.En Modo de creación de subred, selecciona Personalizado.
En la sección Subred nueva, ingresa la siguiente información.
- En Nombre, ingresa
service-subnet. - En Región, selecciona la región que deseas usar.
- En Tipo de pila de IP, elige IPv4 (pila única).
- En el Rango de IPv4, ingresa
10.10.10.0/24. - Haz clic en Listo.
- En Nombre, ingresa
Haz clic en Crear.
gcloud
Crea una red de VPC en modo personalizado:
gcloud compute networks create service-network --subnet-mode=custom
En la red
service-network, crea una subred.gcloud compute networks subnets create service-subnet \ --network=service-network \ --range=10.10.10.0/24 \ --region=REGIONReemplaza
REGIONpor la región que deseas usar.
Configura reglas de firewall
Crea reglas de firewall para permitir el siguiente tráfico:
fw-allow-subnet: Permite que el tráfico de10.10.10.0/24llegue a otros recursos en10.10.10.0/24.fw-allow-ssh: Permite que el tráfico SSH de0.0.0.0/0llegue a las VMs que tienen la etiqueta de redallow-ssh.fw-allow-healthcheck: Permite que el tráfico de los sistemas de verificación de estado de Google Cloudllegue a las VMs que tienen la etiqueta de redallow-healthcheck.
Console
En la consola de Google Cloud , ve a la página Políticas de firewall.
Para permitir el tráfico de subred, haz clic en Crear regla de firewall y usa la siguiente configuración:
- En Nombre, ingresa
fw-allow-subnet. - En Red, selecciona
service-network. - En Prioridad, ingresa
1000. - En Dirección del tráfico, selecciona Ingress.
- En Acción en caso de coincidencia, selecciona Permitir.
- En Destinos, haz clic en Todas las instancias de la red.
- En Filtro de fuente, selecciona Rangos de IPv4.
- En Rangos de IPv4 de origen, ingresa
10.10.10.0/24. - En Protocolos y puertos, selecciona Permitir todo.
- En Nombre, ingresa
Haz clic en Crear.
Para permitir conexiones SSH entrantes, haz clic en Crear regla de firewall y usa la siguiente configuración:
- En Nombre, ingresa
fw-allow-ssh. - En Red, selecciona
service-network. - En Prioridad, ingresa
1000. - En Dirección del tráfico, selecciona Ingress.
- En Acción en caso de coincidencia, selecciona Permitir.
- En Destinos, selecciona Etiquetas de destino especificadas.
- En Etiquetas de destino, ingresa
allow-ssh. - En Filtro de fuente, selecciona Rangos de IPv4.
- En Rangos de IPv4 de origen, ingresa
0.0.0.0/0. - En Protocolos y puertos, selecciona Protocolos y puertos especificados y, luego, la casilla de verificación TCP. En Puertos, ingresa
22.
- En Nombre, ingresa
Haz clic en Crear.
Para permitir las verificaciones de estado de Google Cloud , haz clic en Crear regla de firewall y usa la siguiente configuración:
- En Nombre, ingresa
fw-allow-healthcheck. - En Red, selecciona
service-network. - En Prioridad, ingresa
1000. - En Dirección del tráfico, selecciona Ingress.
- En Acción en caso de coincidencia, selecciona Permitir.
- En Destinos, selecciona Etiquetas de destino especificadas.
- En Etiquetas de destino, ingresa
allow-healthcheck. - En Filtro de fuente, selecciona Rangos de IPv4.
- En Rangos de IPv4 de origen, ingresa
130.211.0.0/22y35.191.0.0/16. - En Protocolos y puertos, selecciona Permitir todo.
- En Nombre, ingresa
Haz clic en Crear.
gcloud
Crea la regla de firewall
fw-allow-subnetpara permitir la comunicación desde la subred:gcloud compute firewall-rules create fw-allow-subnet \ --network=service-network \ --action=allow \ --direction=ingress \ --source-ranges=10.10.10.0/24 \ --rules=tcp,udp,icmp
Crea la regla de firewall
fw-allow-sshpara permitir la conectividad SSH a las VM con la etiqueta de redallow-ssh.gcloud compute firewall-rules create fw-allow-ssh \ --network=service-network \ --action=allow \ --direction=ingress \ --source-ranges=0.0.0.0/0 \ --target-tags=allow-ssh \ --rules=tcp:22
Crea la regla
fw-allow-healthcheckpara permitir las verificaciones de estado de Google Cloud.gcloud compute firewall-rules create fw-allow-healthcheck \ --network=service-network \ --action=allow \ --direction=ingress \ --target-tags=allow-healthcheck \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
Crea recursos de VM para el backend del balanceador de cargas
Crea las VMs y el grupo de instancias para usar con el balanceador de cargas.
Crea VM de backend
El servicio que creas se ejecuta en dos VMs para una mayor disponibilidad: vm-1 y vm-2. Las VMs están en la misma zona, pero, en un entorno de producción, recomendamos usar varias zonas.
Además de crear las VMs, seguir estos pasos permite lograr lo siguiente:
- Configura las VMs para que usen las etiquetas de red que configuraste como objetivos en las reglas de firewall y una etiqueta de red adicional (
allow-nat) que se usará más adelante. Instala, configura e inicia el servicio Apache.
Console
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, ingresa
vm-1.En Región y Zona, selecciona una región y una zona dentro de esa región.
En el menú de navegación, ve a SO y almacenamiento.
En el panel Sistema operativo y almacenamiento, asegúrate de que Debian GNU/Linux 12 (bookworm) esté seleccionado para el disco de arranque. Si necesitas seleccionar otra imagen, haz clic en Cambiar.
En el menú de navegación, ve a Herramientas de redes.
En Etiquetas de red, ingresa
allow-ssh,allow-healthcheckyallow-nat.En Interfaces de red, selecciona lo siguiente:
- En Red, selecciona
service-network. - En Subred, selecciona
service-subnet. - En Tipo de pila de IP, elige IPv4 (pila única).
- En Dirección IPv4 interna principal, selecciona Efímera (automática).
- En Dirección IPv4 externa, selecciona Efímera.
- En Red, selecciona
En el menú de navegación, ve a Opciones avanzadas.
En la sección Automatización, en el campo Secuencia de comandos de inicio, ingresa la siguiente secuencia de comandos.
#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completedHaz clic en Crear.
Repite estos pasos para crear otra VM llamada
vm-2en la misma región y zona quevm-1.
gcloud
Ejecuta los siguientes comandos para crear dos VMs:
gcloud compute instances create vm-1 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-healthcheck,allow-nat \ --subnet=service-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'gcloud compute instances create vm-2 \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-healthcheck,allow-nati \ --subnet=service-subnet \ --metadata=startup-script='#! /bin/bash if [ -f /etc/startup_script_completed ]; then exit 0 fi apt-get update apt-get install apache2 -y a2ensite default-ssl a2enmod ssl file_ports="/etc/apache2/ports.conf" file_http_site="/etc/apache2/sites-available/000-default.conf" file_https_site="/etc/apache2/sites-available/default-ssl.conf" http_listen_prts="Listen 80\nListen 8008\nListen 8080\nListen 8088" http_vh_prts="*:80 *:8008 *:8080 *:8088" https_listen_prts="Listen 443\nListen 8443" https_vh_prts="*:443 *:8443" 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 prt_conf="$(cat "$file_ports")" prt_conf_2="$(echo "$prt_conf" | sed "s|Listen 80|${http_listen_prts}|")" prt_conf="$(echo "$prt_conf_2" | sed "s|Listen 443|${https_listen_prts}|")" echo "$prt_conf" | tee "$file_ports" http_site_conf="$(cat "$file_http_site")" http_site_conf_2="$(echo "$http_site_conf" | sed "s|*:80|${http_vh_prts}|")" echo "$http_site_conf_2" | tee "$file_http_site" https_site_conf="$(cat "$file_https_site")" https_site_conf_2="$(echo "$https_site_conf" | sed "s|_default_:443|${https_vh_prts}|")" echo "$https_site_conf_2" | tee "$file_https_site" systemctl restart apache2 touch /etc/startup_script_completed'Reemplaza
ZONEpor la zona que deseas usar.
Crea un grupo de instancias
Para usar las VMs en un backend de balanceador de cargas, debes agregarlas a un grupo de instancias.
Console
En la consola de Google Cloud , ve a la página Grupos de instancias.
Haz clic en Crear grupo de instancias.
En el panel de navegación, haz clic en Nuevo grupo de instancias no administrado.
En Nombre, ingresa
ig-1.En la sección Ubicación, selecciona la misma región y zona que tus VMs.
En Red, selecciona
service-networkEn Subred, selecciona
service-subnet.En la sección Instancias de VM, agrega
vm-1yvm-2al grupo de instancias.Haz clic en Crear.
gcloud
Crea un grupo de instancias no administrado:
gcloud compute instance-groups unmanaged create ig-1 \ --zone=ZONEReemplaza
ZONEpor la zona que contiene las VMs.Agrega las VMs al grupo de instancias:
gcloud compute instance-groups unmanaged add-instances ig-1 \ --zone=ZONE \ --instances=vm-1,vm-2
Configura los componentes del balanceador de cargas
Configura todos los componentes del balanceador de cargas de red de transferencia interno, comenzando con la verificación de estado y el servicio de backend y, luego, los componentes de frontend:
Verificación de estado Usas una verificación de estado de HTTP que comprueba si hay un código de estado HTTP
200 OK.Servicio de backend. Como necesitas pasar tráfico HTTP a través del balanceador de cargas interno, debes usar TCP, no UDP.
Regla de reenvío. Creas una sola regla de reenvío interno,
service-rule.Dirección IP interna Especificas una dirección IP interna,
10.10.10.99, cuando creas la regla de reenvío.
Console
Inicia tu configuración
En la consola de Google Cloud , ve a la página Balanceo de cargas.
- Haz clic en Crear balanceador de cargas.
- En Tipo de balanceador de cargas, selecciona Balanceador de cargas de red (TCP/UDP/SSL) y haz clic en Siguiente.
- En Proxy o de transferencia, selecciona Balanceador de cargas de transferencia y haz clic en Siguiente.
- En Orientado al público o interno, selecciona Interno y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
En la página Crear un balanceador de cargas de red de transferencia interna, ingresa la siguiente información:
- En Nombre del balanceador de cargas, ingresa
service-lb. - En Región, selecciona la misma región que tus VMs.
- En Red, selecciona
service-network.
Configura los backends
- Haz clic en Configuración de backend.
- En la lista Verificación de estado, haz clic en Crear una verificación de estado
y, luego, ingresa la siguiente información:
- En Nombre, ingresa
hc-http-80. - En Protocolo, selecciona
HTTP. - En Puerto, ingresa
80. - En Protocolo de proxy, selecciona
NONE. - En Ruta de la solicitud, ingresa
/.
- En Nombre, ingresa
- Haz clic en Crear.
- En la sección Backend nuevo de Backends, selecciona IPv4 (pila única).
- En Grupo de instancias, elige el grupo de instancias
ig-1y haz clic en Listo. - Verifica que haya una marca de verificación azul junto a Configuración de backend antes de continuar.
Configura el frontend
- Haz clic en Configuración de frontend.
- En la sección IP y puerto de frontend nuevos, haz lo siguiente:
- En Nombre, ingresa
service-rule. - En Subred, selecciona
service-subnet. - En la sección Propósito de la IP interna, en la lista de Direcciones IP, selecciona Crear dirección IP, ingresa la siguiente información:
- En Nombre, ingresa
service-rule-ip. - En Versión de IP, selecciona IPv4.
- En Dirección IP estática, selecciona Let me choose.
- En Dirección IP personalizada, ingresa
10.10.10.99.
- En Nombre, ingresa
- Haz clic en Reservar.
- En Puertos, selecciona Individual y, luego, en Números de puerto, ingresa
80. - Haz clic en Listo.
- Verifica que haya una marca de verificación azul junto a Configuración de frontend antes de continuar.
- En Nombre, ingresa
Revisa la configuración
- Haz clic en Revisar y finalizar.
- Revisa la configuración del balanceador de cargas.
- Haz clic en Crear.
gcloud
Crea una verificación de estado HTTP regional nueva para probar la conectividad HTTP a las VM en 80.
gcloud compute health-checks create http hc-http-80 \ --region=REGION \ --port=80Reemplaza
REGIONpor la misma región que las VMs de backend.Crea el servicio de backend para el tráfico HTTP:
gcloud compute backend-services create service-lb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=REGION \ --health-checks=hc-http-80 \ --health-checks-region=REGIONReemplaza
REGIONpor la misma región que las VMs de backend.Agrega el grupo de instancias al servicio de backend:
gcloud compute backend-services add-backend service-lb \ --region=REGION \ --instance-group=ig-1 \ --instance-group-zone=ZONEReemplaza lo siguiente:
REGION: La misma región que las VMs de backend.ZONE: La misma zona que las VMs de backend.
Crea una regla de reenvío para el servicio de backend:
gcloud compute forwarding-rules create service-rule \ --region=REGION \ --load-balancing-scheme=internal \ --network=service-network \ --subnet=service-subnet \ --address=10.10.10.99 \ --ip-protocol=TCP \ --ports=80 \ --backend-service=service-lb \ --backend-service-region=REGIONReemplaza
REGIONpor la misma región que las VMs de backend.
Prueba el acceso al balanceador de cargas
Para probar que el balanceador de cargas funciona, crea una VM de prueba y envíale una solicitud.
Crea una VM de cliente para realizar pruebas
Crea una VM de cliente en la misma región que las VMs de backend (servidor).
Console
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, ingresa
producer-test.En Región, selecciona la misma región que las VMs de backend.
En Zona, selecciona una zona de esa región.
Haz clic en Herramientas de redes y configura los siguientes campos:
- En Etiquetas de red, ingresa
allow-ssh. - En Interfaces de red, selecciona lo siguiente:
- En Red, selecciona
service-network. - En Subred, selecciona
service-subnet.
- En Red, selecciona
- En Etiquetas de red, ingresa
Haz clic en Crear.
gcloud
gcloud compute instances create producer-test \
--zone=ZONE \
--image-family=debian-12 \
--image-project=debian-cloud \
--tags=allow-ssh \
--subnet=service-subnet
Reemplaza ZONE por una zona que se encuentre en la misma región que las VMs de backend.
Prueba la conectividad
En esta prueba, se contacta al balanceador de cargas desde una VM de cliente. El comportamiento esperado es que el tráfico se distribuya entre las VMs de backend del balanceador de cargas.
- Conéctate a la instancia de VM de cliente.
Reemplazagcloud compute ssh producer-test --zone=ZONE
ZONEpor la zona de la VM del cliente. - Realiza una solicitud web al balanceador de cargas mediante
curlpara establecer contacto con su dirección IP. Repite la solicitud para que puedas ver que las respuestas provienen de diferentes VM de backend. El nombre de la VM que genera la respuesta se muestra en el texto de la respuesta HTML, debido al contenido de/var/www/html/index.htmlen cada VM de backend. Por ejemplo, las respuestas esperadas tienen el aspectoPage served from: vm-1yPage served from: vm-2.curl -s http://10.10.10.99