En este tutorial se muestra cómo puedes crear, como productor de servicios, un servicio sencillo que utilice un balanceador de carga de red interno de transferencia. De forma predeterminada, un balanceador de carga de red de paso a través interno solo está disponible en la red de VPC que lo aloja.
Este tutorial está dirigido a arquitectos de nube, arquitectos de redes, administradores de redes y administradores de TI.
Objetivos
- Configurar la red de los recursos del productor de servicios
- Crear recursos de VM para el backend del balanceador de carga
- Configurar los componentes del balanceador de carga
- Probar el acceso al balanceador de carga
Costes
En este documento, se utilizan los siguientes componentes facturables de Google Cloud:
Para generar una estimación de costes basada en el uso previsto,
utiliza la calculadora de precios.
Cuando termines las tareas que se describen en este documento, puedes evitar que se te siga facturando eliminando los recursos que has creado. Para obtener más información, consulta la sección Limpiar.
Antes de empezar
- Crea o selecciona un proyecto para los recursos del productor de servicios.
En los tutoriales posteriores, se hará referencia a este proyecto como
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 Conceder acceso.
-
En el campo Nuevos principales, introduce tu identificador de usuario. Normalmente, se trata de la dirección de correo de una cuenta de Google.
- Haz clic en Selecciona un rol y busca el rol.
- Para conceder más roles, haz clic en Añadir otro rol y añade cada rol adicional.
- Haz clic en Guardar.
-
Configurar redes
En las siguientes secciones se explica cómo crear una red, una subred y reglas de firewall para el servicio.
Configurar una red y una subred
Para crear la red de servicio y la subred del balanceador de carga, sigue los pasos que se indican en las siguientes secciones.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En Nombre, escribe
service-network.En Modo de creación de subred, selecciona Personalizado.
En la sección Nueva subred, introduce la siguiente información.
- En Nombre, escribe
service-subnet. - En Región, selecciona la región que quieras usar.
- En Tipo de pila de IP, selecciona IPv4 (pila única).
- En Intervalo de IPv4, introduce
10.10.10.0/24. - Haz clic en Listo.
- En Nombre, escribe
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=REGIONSustituye
REGIONpor la región que quieras usar.
Configurar reglas de cortafuegos
Crea reglas de cortafuegos para permitir el siguiente tráfico:
fw-allow-subnet: permite que el tráfico de10.10.10.0/24llegue a otros recursos de10.10.10.0/24.fw-allow-ssh: permite que el tráfico SSH de0.0.0.0/0llegue a las VMs que tengan la etiqueta de redallow-ssh.fw-allow-healthcheck: permite que el tráfico de los sistemas de comprobación de estado llegue a las VMs que tienen la etiqueta de redallow-healthcheck. Google Cloud
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Para permitir el tráfico de subredes, haz clic en Crear regla de cortafuegos y usa los siguientes ajustes:
- En Nombre, escribe
fw-allow-subnet. - En Red, selecciona
service-network. - En Prioridad, introduce
1000. - En Dirección del tráfico, selecciona Entrada.
- En Acción tras coincidencia, selecciona Permitir.
- En Destinos, selecciona Todas las instancias de la red.
- En Filtro de origen, selecciona Intervalos de IPv4.
- En Intervalos IPv4 de origen, introduce
10.10.10.0/24. - En Protocolos y puertos, selecciona Permitir todo.
- En Nombre, escribe
Haz clic en Crear.
Para permitir las conexiones SSH entrantes, haz clic en Crear regla de cortafuegos y usa los siguientes ajustes:
- En Nombre, escribe
fw-allow-ssh. - En Red, selecciona
service-network. - En Prioridad, introduce
1000. - En Dirección del tráfico, selecciona Entrada.
- En Acción tras coincidencia, selecciona Permitir.
- En Destinos, seleccione Etiquetas de destino especificadas.
- En Etiquetas de destino, escriba
allow-ssh. - En Filtro de origen, selecciona Intervalos de IPv4.
- En Intervalos IPv4 de origen, introduce
0.0.0.0/0. - En Protocolos y puertos, selecciona Protocolos y puertos especificados y marca la casilla TCP. En Puertos, introduce
22.
- En Nombre, escribe
Haz clic en Crear.
Para permitir las comprobaciones del estado, haz clic en Crear regla de cortafuegos y usa los siguientes ajustes: Google Cloud
- En Nombre, escribe
fw-allow-healthcheck. - En Red, selecciona
service-network. - En Prioridad, introduce
1000. - En Dirección del tráfico, selecciona Entrada.
- En Acción tras coincidencia, selecciona Permitir.
- En Destinos, seleccione Etiquetas de destino especificadas.
- En Etiquetas de destino, escriba
allow-healthcheck. - En Filtro de origen, selecciona Intervalos de IPv4.
- En Intervalos de IPv4 de origen, introduce
130.211.0.0/22y35.191.0.0/16. - En Protocolos y puertos, selecciona Permitir todo.
- En Nombre, escribe
Haz clic en Crear.
gcloud
Crea la regla de cortafuegos
fw-allow-subnetpara permitir la comunicación desde dentro de 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 cortafuegos
fw-allow-sshpara permitir la conectividad SSH a las VMs 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 Google Cloud las comprobaciones del estado.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
Crear recursos de VM para el backend del balanceador de carga
Crea las VMs y el grupo de instancias que se van a usar con el balanceador de carga.
Crear VMs de backend
El servicio que vas a crear se ejecuta en dos máquinas virtuales para aumentar la 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, al seguir estos pasos se consigue lo siguiente:
- Configura las VMs para que usen las etiquetas de red que has configurado como destinos en las reglas de cortafuegos y una etiqueta de red adicional (
allow-nat) que se usará más adelante. Instala, configura e inicia el servicio Apache.
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, escribe
vm-1.En Región y Zona, selecciona una región y una zona 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, vaya a Redes.
En el caso de las etiquetas de red, introduce
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, selecciona 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 Avanzado.
En la sección Automatización, en el campo Secuencia de comandos de inicio, introduce 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
Crea dos VMs ejecutando los siguientes comandos:
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'Sustituye
ZONEpor la zona que quieras usar.
Crear un grupo de instancias
Para usar las VMs en un backend de balanceador de carga, debes añadirlas a un grupo de instancias.
Consola
En la consola, ve a la página Grupos de instancias. Google Cloud
Haz clic en Crear grupo de instancias.
En el panel de navegación, haga clic en Nuevo grupo de instancias sin gestionar.
En Nombre, escribe
ig-1.En la sección Ubicación, selecciona la misma región y zona que tus VMs.
En Red, selecciona
service-network.En Subred, selecciona
service-subnet.En la sección Instancias de VM, añade
vm-1yvm-2al grupo de instancias.Haz clic en Crear.
gcloud
Crea un grupo de instancias sin gestionar:
gcloud compute instance-groups unmanaged create ig-1 \ --zone=ZONESustituye
ZONEpor la zona que contiene las VMs.Añade las VMs al grupo de instancias:
gcloud compute instance-groups unmanaged add-instances ig-1 \ --zone=ZONE \ --instances=vm-1,vm-2
Configurar componentes del balanceador de carga
Configura todos los componentes del balanceador de carga de red interno de pases, empezando por la comprobación del estado y el servicio de backend, y, a continuación, los componentes de frontend:
Comprobación del estado. Utilizas una comprobación del estado de HTTP que comprueba el código de estado HTTP
200 OK.Servicio de backend. Como tienes que enviar tráfico HTTP a través del balanceador de carga interno, debes usar TCP, no UDP.
Regla de reenvío. Crea una sola regla de reenvío interna,
service-rule.Dirección IP interna. Cuando crea la regla de reenvío, especifica una dirección IP interna,
10.10.10.99.
Consola
Iniciar la configuración
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en Crear balanceador de carga.
- En Tipo de balanceador de carga, selecciona Balanceador de carga de red (TCP/UDP/SSL) y haz clic en Siguiente.
- En Proxy o pasarela, selecciona Balanceador de carga de pasarela y haz clic en Siguiente.
- En Público o interno, selecciona Interno y haz clic en Siguiente.
- Haz clic en Configurar.
Configuración básica
En la página Crear balanceador de carga de red de paso a través interno, introduce la siguiente información:
- En Nombre del balanceador de carga, introduce
service-lb. - En Región, selecciona la misma región que tus VMs.
- En Red, selecciona
service-network.
Configurar los backends
- Haz clic en Configuración de backend.
- En la lista Comprobación del estado, haz clic en Crear comprobación del estado e introduce la siguiente información:
- En Nombre:, introduce
hc-http-80. - En Protocolo, selecciona
HTTP. - En Puerto, introduce
80. - En Protocolo de proxy, selecciona
NONE. - En Ruta de la solicitud, introduzca
/.
- En Nombre:, introduce
- Haz clic en Crear.
- En la sección New Backend (Nuevo backend) de Backends (Backends), selecciona IPv4 (single-stack) (IPv4 [pila única]).
- En Grupo de instancias, selecciona el grupo de instancias
ig-1y haz clic en Hecho. - Comprueba que haya una marca de verificación azul junto a Configuración de backend antes de continuar.
Configurar el frontend
- Haz clic en Configuración de frontend.
- En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Nombre, escribe
service-rule. - En Subred, selecciona
service-subnet. - En la sección Propósito de la IP interna, en la lista Dirección IP, selecciona Crear dirección IP e introduce la siguiente información:
- En Nombre, escribe
service-rule-ip. - En Versión de IP, selecciona IPv4.
- En Dirección IP estática, selecciona Quiero seleccionarlos yo.
- En Dirección IP personalizada, introduce
10.10.10.99.
- En Nombre, escribe
- Haz clic en Reservar.
- En Puertos, selecciona Único y, en Números de puerto, introduce
80. - Haz clic en Listo.
- Comprueba que haya una marca de verificación azul junto a Configuración del frontend antes de continuar.
- En Nombre, escribe
Revisar la configuración
- Haz clic en Revisar y finalizar.
- Revisa los ajustes de configuración de tu balanceador de carga.
- Haz clic en Crear.
gcloud
Crea una comprobación del estado de HTTP regional para probar la conectividad HTTP a las VMs en el puerto 80.
gcloud compute health-checks create http hc-http-80 \ --region=REGION \ --port=80Sustituye
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=REGIONSustituye
REGIONpor la misma región que las VMs de backend.Añade 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=ZONEHaz los cambios siguientes:
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=REGIONSustituye
REGIONpor la misma región que las VMs de backend.
Probar el acceso al balanceador de carga
Para comprobar que el balanceador de carga funciona, crea una VM de prueba y envíale una solicitud.
Crear una VM de cliente para hacer pruebas
Crea una VM de cliente en la misma región que las VMs de backend (servidor).
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, escribe
producer-test.En Región, selecciona la misma región que las VMs de backend.
En Zona, selecciona una zona de esa región.
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduce
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, introduce
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
Sustituye ZONE por una zona que esté en la misma región que las VMs de backend.
Probar la conectividad
Esta prueba se pone en contacto con el balanceador de carga desde una máquina virtual cliente. El comportamiento esperado es que el tráfico se distribuya entre las VMs backend del balanceador de carga.
- Conéctate a la instancia de VM cliente.
Sustituyegcloud compute ssh producer-test --zone=ZONE
ZONEpor la zona de la VM del cliente. - Envía una solicitud web al balanceador de carga mediante
curlpara ponerte en contacto con su dirección IP. Repite la solicitud para ver que las respuestas proceden de diferentes VMs 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 backend. Por ejemplo, las respuestas esperadas son comoPage served from: vm-1yPage served from: vm-2.curl -s http://10.10.10.99