En esta guía se usa un ejemplo para explicar los conceptos básicos de los Google Cloudbalanceadores de carga de red de paso a través internos. Antes de seguir esta guía, familiarízate con lo siguiente:
- Conceptos de los balanceadores de carga de red de paso a través internos
- Cómo funcionan los balanceadores de carga de red de paso a través internos
- Resumen de las reglas de cortafuegos
- Conceptos de la comprobación del estado
Para seguir las instrucciones paso a paso de esta tarea directamente en la Google Cloud consola, haga clic en Ayúdame:
Permisos
Para seguir esta guía, debes crear instancias y modificar una red en un proyecto. Debes ser propietario o editor del proyecto, o bien tener todos los roles de gestión de identidades y accesos de Compute Engine que se indican a continuación:
Tarea | Rol necesario |
---|---|
Crear redes, subredes y componentes de balanceador de carga | Administrador de red de Compute ( roles/compute.networkAdmin )
|
Añadir y eliminar reglas de cortafuegos | Administrador de seguridad de Compute ( roles/compute.securityAdmin )
|
Crear instancias | Administrador de instancias de Compute ( roles/compute.instanceAdmin )
|
Para obtener más información, consulta las siguientes guías:
Configurar un balanceador de carga con subredes y backends solo IPv4
En esta guía se explica cómo configurar y probar un balanceador de carga de red de paso a través interno. En los pasos de esta sección se describe cómo configurar lo siguiente:
- Un ejemplo que usa una red de VPC en modo personalizado llamada
lb-network
. - Una subred de pila única (
stack-type
configurado comoIPv4
), que es necesaria para el tráfico IPv4. Cuando creas una subred de pila única en una red de VPC en modo personalizado, eliges un intervalo de subred IPv4 para la subred. - Reglas de cortafuegos que permiten las conexiones entrantes a instancias de máquina virtual (VM) de backend.
- El grupo de instancias de backend, que se encuentra en la siguiente región y subred en este ejemplo:
- Región:
us-west1
- Subred:
lb-subnet
, con el intervalo de direcciones IPv4 principal10.1.2.0/24
.
- Región:
- Cuatro VMs de backend: dos VMs en un grupo de instancias sin gestionar en la zona
us-west1-a
y dos VMs en un grupo de instancias sin gestionar en la zonaus-west1-c
. Para demostrar el acceso global, en este ejemplo se crea una segunda VM de cliente de prueba en otra región y subred:- Región:
europe-west1
- Subred:
europe-subnet
, con el intervalo de direcciones IP principal10.3.4.0/24
- Región:
- Una VM de cliente para probar las conexiones.
- Los siguientes componentes del balanceador de carga de red de paso a través interno:
- Una comprobación del estado del servicio backend.
- Un servicio de backend interno en la región
us-west1
para gestionar la distribución de conexiones a los dos grupos de instancias zonales. - Una regla de reenvío interna y una dirección IP interna para el frontend del balanceador de carga.
La arquitectura de este ejemplo es la siguiente:
Configurar una red, una región y una subred
Para crear la red y la subred de ejemplo, sigue estos pasos.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En Nombre, escribe
lb-network
.En la sección Subredes, haga lo siguiente:
- Elige Personalizado en Modo de creación de subred.
- En la sección Nueva subred, introduce la siguiente información:
- Nombre:
lb-subnet
- Región:
us-west1
- Tipo de pila de IP: IPv4 (pila única)
- Intervalo de direcciones IP:
10.1.2.0/24
- Nombre:
- Haz clic en Listo.
- Haz clic en Añadir subred e introduce la siguiente información:
- Nombre:
europe-subnet
- Región:
europe-west1
- Tipo de pila de IP: IPv4 (pila única)
- Intervalo de direcciones IP:
10.3.4.0/24
- Nombre:
- Haz clic en Listo.
Haz clic en Crear.
gcloud
Crea la red VPC personalizada:
gcloud compute networks create lb-network --subnet-mode=custom
En la red
lb-network
, crea una subred para los backends de la regiónus-west1
:gcloud compute networks subnets create lb-subnet \ --network=lb-network \ --range=10.1.2.0/24 \ --region=us-west1
En la red
lb-network
, crea otra subred para probar el acceso global en la regióneurope-west1
:gcloud compute networks subnets create europe-subnet \ --network=lb-network \ --range=10.3.4.0/24 \ --region=europe-west1
API
Realiza una solicitud POST
al método networks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "routingConfig": { "routingMode": "REGIONAL" }, "name": "lb-network", "autoCreateSubnetworks": false }
Haz dos solicitudes POST
al
método subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.1.2.0/24", "privateIpGoogleAccess": false }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks { "name": "europe-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.3.4.0/24", "privateIpGoogleAccess": false }
Configurar reglas de cortafuegos
En este ejemplo se usan las siguientes reglas de cortafuegos:
fw-allow-lb-access
: regla de entrada aplicable a todos los destinos de la red VPC que permite el tráfico de fuentes de los intervalos10.1.2.0/24
y10.3.4.0/24
. Esta regla permite el tráfico entrante de cualquier cliente ubicado en cualquiera de las dos subredes. Más adelante, te permitirá configurar y probar el acceso global.fw-allow-ssh
: una regla de entrada aplicable a las instancias que se van a balancear, que permite la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puede elegir un intervalo de IPs de origen más restrictivo para esta regla. Por ejemplo, puede especificar solo los intervalos de IPs del sistema desde el que iniciará sesiones SSH. En este ejemplo se usa la etiqueta de destinoallow-ssh
para identificar las VMs a las que se debe aplicar.fw-allow-health-check
: una regla de entrada, aplicable a las instancias con balanceo de carga, que permite el tráfico de los sistemas de comprobación del estado ( Google Cloud ,130.211.0.0/22
y35.191.0.0/16
). En este ejemplo, se usa la etiqueta de destinoallow-health-check
para identificar las instancias a las que se debe aplicar.
Sin estas reglas de cortafuegos, la regla denegar predeterminada de entrada bloquea el tráfico entrante a las instancias de backend.
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 e introduce la siguiente información:
- Nombre:
fw-allow-lb-access
- Red:
lb-network
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Destinos: Todas las instancias de la red
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
10.1.2.0/24
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
Para permitir las conexiones SSH entrantes, vuelva a hacer clic en Crear regla de cortafuegos e introduzca la siguiente información:
- Nombre:
fw-allow-ssh
- Red:
lb-network
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-ssh
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
0.0.0.0/0
- Protocolos y puertos: selecciona Protocolos y puertos especificados, marca la casilla TCP y, a continuación, introduce
22
en Puertos.
- Nombre:
Haz clic en Crear.
Para permitir las Google Cloud comprobaciones del estado, haz clic en Crear regla de cortafuegos por tercera vez e introduce la siguiente información:
- Nombre:
fw-allow-health-check
- Red:
lb-network
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-health-check
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
130.211.0.0/22
y35.191.0.0/16
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
gcloud
Crea la regla de cortafuegos
fw-allow-lb-access
para permitir la comunicación desde dentro de la subred:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=tcp,udp,icmp
Crea la regla de cortafuegos
fw-allow-ssh
para permitir la conectividad SSH a las VMs con la etiqueta de redallow-ssh
. Si omitesource-ranges
, Google Cloud interpreta que la regla se aplica a cualquier fuente.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crea la regla
fw-allow-health-check
para permitir Google Cloud las comprobaciones del estado.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Crea la regla de cortafuegos fw-allow-lb-access
haciendo una solicitud POST
al método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crea la regla de cortafuegos fw-allow-ssh
haciendo una solicitud POST
al método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crea la regla de cortafuegos fw-allow-health-check
haciendo una solicitud POST
al método firewalls.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crear VMs de backend y grupos de instancias
En este ejemplo se usan dos grupos de instancias sin gestionar, cada uno de ellos con dos VMs de backend (servidor). Para demostrar la naturaleza regional de los balanceadores de carga de red con paso a través internos, los dos grupos de instancias se colocan en zonas independientes, us-west1-a
y us-west1-c
.
- El grupo de instancias
ig-a
contiene estas dos VMs:vm-a1
vm-a2
- El grupo de instancias
ig-c
contiene estas dos VMs:vm-c1
vm-c2
El tráfico a las cuatro VMs de backend se balancea.
Para admitir este ejemplo y las opciones de configuración adicionales, cada una de las cuatro VMs ejecuta un servidor web Apache que escucha en los siguientes puertos TCP: 80, 8008, 8080, 8088, 443 y 8443.
A cada VM se le asigna una dirección IP interna en lb-subnet
y una dirección IP externa (pública) efímera. Puedes quitar las direcciones IP externas más adelante.
No es necesario que las VMs de backend tengan una dirección IP externa, pero es útil en este ejemplo porque permite que las VMs de backend descarguen Apache de Internet y que se puedan conectar mediante SSH.
De forma predeterminada, Apache está configurado para enlazarse a cualquier dirección IP. Los balanceadores de carga de red de paso a través internos envían paquetes conservando la IP de destino. Comprueba que el software del servidor que se ejecuta en tus VMs de backend esté escuchando en la dirección IP de la regla de reenvío interna del balanceador de carga. Si configura varias reglas de reenvío internas, asegúrese de que su software escuche la dirección IP interna asociada a cada una de ellas. La dirección IP de destino de un paquete que un balanceador de carga de red pasante interno entrega a una máquina virtual de backend es la dirección IP interna de la regla de reenvío.
Para simplificar las instrucciones, estas VMs de backend ejecutan Debian GNU/Linux 12.
Consola
Crear VMs de backend
En la consola de Google Cloud , ve a la página Instancias de VM.
Repite los pasos del 3 al 8 para cada VM, usando las siguientes combinaciones de nombre y zona.
- Nombre:
vm-a1
, zona:us-west1-a
- Nombre:
vm-a2
, zona:us-west1-a
- Nombre:
vm-c1
, zona:us-west1-c
- Nombre:
vm-c2
, zona:us-west1-c
- Nombre:
Haz clic en Crear instancia.
Asigna el Nombre como se indica en el paso 2.
En Región, selecciona
us-west1
y elige una Zona como se indica en el paso 2.En la sección Disco de arranque, asegúrate de que la opción Debian GNU/Linux 12 (bookworm) esté seleccionada para el disco de arranque. Si es necesario, haz clic en Cambiar para cambiar la imagen.
Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduce
allow-ssh
yallow-health-check
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network
- Subred:
lb-subnet
- Tipo de pila de IP: IPv4 (pila única)
- Dirección IPv4 interna principal: efímera (automática)
- Dirección IPv4 externa: efímera
- Red:
- En Etiquetas de red, introduce
Haz clic en Gestión y, a continuación, en el campo Secuencia de comandos de inicio, introduce la siguiente secuencia de comandos. El contenido de la secuencia de comandos es idéntico en las cuatro máquinas virtuales.
#! /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
Haz clic en Crear.
Crear grupos de instancias
En la consola, ve a la página Grupos de instancias. Google Cloud
Repite los pasos siguientes para crear dos grupos de instancias no gestionados, cada uno con dos VMs, usando estas combinaciones.
- Nombre del grupo de instancias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
yvm-a2
- Nombre del grupo de instancias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
yvm-c2
- Nombre del grupo de instancias:
Haz clic en Crear grupo de instancias.
Haga clic en Nuevo grupo de instancias sin gestionar.
Asigna el Nombre como se indica en el paso 2.
En la sección Ubicación, selecciona
us-west1
en Región y, a continuación, elige una Zona como se indica en el paso 2.En Red, selecciona
lb-network
.En Subred, selecciona
lb-subnet
.En la sección Instancias de VM, añade las VMs como se indica en el paso 2.
Haz clic en Crear.
gcloud
Crea las cuatro VMs ejecutando el siguiente comando cuatro veces y usando estas cuatro combinaciones para
[VM-NAME]
y[ZONE]
. El contenido de la secuencia de comandos es idéntico en las cuatro VMs.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-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'
Crea los dos grupos de instancias sin gestionar en cada zona:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Añade las VMs a los grupos de instancias correspondientes:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
API
En las cuatro VMs, usa los siguientes nombres y zonas:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Para obtener el DEBIAN_IMAGE_NAME
actual, ejecuta el siguiente comando gcloud
:
gcloud compute images list \ --filter="family=debian-12"
Crea cuatro VMs de backend haciendo cuatro solicitudes POST
al método instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://metadata.google.internal/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Crea dos grupos de instancias haciendo una solicitud POST
al método instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Añade instancias a cada grupo de instancias haciendo una solicitud POST
al método instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Configurar componentes del balanceador de carga
En estos pasos se configuran todos los componentes del balanceador de carga de red de pases interno, empezando por la comprobación de estado y el servicio de backend, y, a continuación, los componentes de frontend:
Comprobación del estado: en este ejemplo, se usa una comprobación del estado de HTTP que comprueba si se devuelve una respuesta HTTP
200
(OK). Para obtener más información, consulta la sección de comprobaciones del estado del artículo sobre el balanceador de carga de red interno de pases.Servicio de backend: como necesitas enviar tráfico HTTP a través del balanceador de carga interno, debes usar TCP, no UDP.
Regla de reenvío: en este ejemplo se crea una única regla de reenvío interna.
Dirección IP interna: en este ejemplo, se especifica una dirección IP interna,
10.1.2.99
, al crear la regla de reenvío.
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:
- Nombre del balanceador de carga:
be-ilb
- Región:
us-west1
- Red:
lb-network
Configurar los backends
- Haz clic en Configuración de backend.
- Para gestionar solo el tráfico IPv4, en la sección Nuevo backend de Backends, selecciona IPv4 (pila única) en Tipo de pila de IP.
- En Grupo de instancias, selecciona el grupo de instancias
ig-c
y haz clic en Hecho. - Haz clic en Añadir un backend y repite el paso para añadir
ig-a
. En la lista Comprobación del estado, selecciona Crear comprobación del estado, introduce la siguiente información y haz clic en Guardar.
- Nombre:
hc-http-80
- Protocolo:
HTTP
- Puerto:
80
- Protocolo de proxy:
NONE
- Ruta de la solicitud:
/
Ten en cuenta que, cuando usas la Google Cloud consola para crear tu balanceador de carga, la comprobación del estado es global. Si quieres crear una comprobación del estado regional, usa
gcloud
o la API.- Nombre:
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
fr-ilb
. - En Subred, selecciona
lb-subnet
. - En la sección Propósito de la IP interna, en la lista Dirección IP, selecciona Crear dirección IP, introduce la siguiente información y, a continuación, haz clic en Reservar.
- Nombre:
ip-ilb
- Versión de IP: IPv4
- Dirección IP estática: Quiero elegir
- Dirección IP personalizada:
10.1.2.99
- Nombre:
- En Puertos, selecciona Varios y, en Números de puerto,introduce
80
,8008
,8080
y8088
. - 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.
- Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
- Haz clic en Crear.
gcloud
Crea una comprobación del estado HTTP regional para probar la conectividad HTTP a las VMs en el puerto 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crea el servicio de backend para el tráfico HTTP:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Añade los dos grupos de instancias al servicio de backend:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crea una regla de reenvío para el servicio de backend. Cuando cree la regla de reenvío, especifique
10.1.2.99
para la dirección IP interna de la subred.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Crea la comprobación del estado haciendo una solicitud POST
al método regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Crea el servicio backend regional haciendo una solicitud POST
al método regionBackendServices.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Crea la regla de reenvío haciendo una solicitud POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Probar el balanceador de carga
Estas pruebas muestran cómo validar la configuración del balanceador de carga y cómo conocer su comportamiento esperado.
Crear una VM cliente
En este ejemplo, se crea una VM de cliente (vm-client
) en la misma región que las VMs de backend (servidor). El cliente se usa para validar la configuración del balanceador de carga y demostrar el comportamiento esperado, tal como se describe en la sección Pruebas.
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, escribe
vm-client
.En Región, selecciona
us-west1
.En Zona, selecciona
us-west1-a
.Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduzca
allow-ssh
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network
- Subred:
lb-subnet
- Red:
- En Etiquetas de red, introduzca
Haz clic en Crear.
gcloud
La VM cliente puede estar en cualquier zona de la misma región que el balanceador de carga y puede usar cualquier subred de esa región. En este ejemplo, el cliente está en la zona us-west1-a
y usa la misma subred que las VMs de backend.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=lb-subnet
API
Realiza una solicitud POST
al método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Probar la conexión desde la VM cliente
Esta prueba se pone en contacto con el balanceador de carga desde una VM de cliente independiente, es decir, no desde una VM de backend del balanceador de carga. Lo habitual es que el tráfico se distribuya entre las cuatro VMs de backend porque no se ha configurado ninguna afinidad de sesión.
Conéctate a la instancia de VM cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Haz una solicitud web al balanceador de carga mediante
curl
para 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 máquina virtual que genera la respuesta se muestra en el texto de la respuesta HTML, gracias al contenido de/var/www/html/index.html
en cada máquina virtual backend. Por ejemplo, las respuestas esperadas sonPage served from: vm-a1
yPage served from: vm-a2
.curl http://10.1.2.99
La regla de reenvío está configurada para servir los puertos
80
,8008
,8080
y8088
. Para enviar tráfico a esos otros puertos, añade dos puntos (:
) y el número de puerto después de la dirección IP, de esta forma:curl http://10.1.2.99:8008
Si añades una etiqueta de servicio a la regla de reenvío interna, puedes usar el DNS interno para ponerte en contacto con el balanceador de carga mediante su nombre de servicio.
curl http://web-test.fr-ilb.il4.us-west1.lb.PROJECT_ID.internal
Hacer ping a la dirección IP del balanceador de carga
Esta prueba demuestra un comportamiento esperado: no puedes hacer ping a la dirección IP del balanceador de carga. Esto se debe a que los balanceadores de carga de red de paso a través internos se implementan en la programación de redes virtuales, no son dispositivos independientes.
Conéctate a la instancia de VM cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Intenta hacer ping a la dirección IP del balanceador de carga. Ten en cuenta que no obtienes ninguna respuesta y que el comando
ping
se agota al cabo de 10 segundos en este ejemplo.timeout 10 ping 10.1.2.99
Enviar solicitudes desde VMs con balanceo de carga
Esta prueba demuestra que, cuando una VM de backend envía paquetes a la dirección IP de la regla de reenvío de su balanceador de carga, esas solicitudes se enrutan de nuevo a sí misma. Esto ocurre independientemente del estado de la comprobación del estado de la VM de backend.
Los balanceadores de carga de red de paso a través internos se implementan mediante la programación de redes virtuales y la configuración de máquinas virtuales en el SO invitado. En las VMs Linux, el entorno invitado crea una ruta para la dirección IP del balanceador de carga en la tabla de enrutamiento local del sistema operativo.
Como esta ruta local está dentro de la propia VM (no es una ruta de la red de VPC), la red de VPC no procesa los paquetes enviados a la dirección IP del balanceador de carga. En su lugar, los paquetes enviados a la dirección IP del balanceador de carga permanecen en el sistema operativo de la VM.
Conéctate a una VM de backend, como
vm-a1
:gcloud compute ssh vm-a1 --zone=us-west1-a
Envía una solicitud web al balanceador de carga (por dirección IP o nombre de servicio) mediante
curl
. La respuesta procede de la misma VM backend que realiza la solicitud. Las solicitudes repetidas se responden de la misma forma. La respuesta esperada al hacer pruebas desdevm-a1
siempre esPage served from: vm-a1
.curl http://10.1.2.99
Inspecciona la tabla de enrutamiento local y busca un destino que coincida con la dirección IP del propio balanceador de carga,
10.1.2.99
. Esta ruta es una parte necesaria de un balanceador de carga de red de paso a través interno, pero también muestra por qué una solicitud de una VM que se encuentra detrás del balanceador de carga siempre recibe una respuesta de la misma VM.ip route show table local | grep 10.1.2.99
Cuando una VM de backend de un balanceador de carga de red con paso a través interno envía paquetes a la dirección IP de la regla de reenvío del balanceador de carga, los paquetes siempre se reenvían a la VM que hace la solicitud. Esto se debe a que un balanceador de carga de red de paso a través interno es un balanceador de carga de paso a través y se implementa creando una ruta local para la dirección IP del balanceador de carga en el SO invitado de la VM, tal como se indica en esta sección. Si tienes un caso práctico en el que los backends con balanceo de carga deben enviar tráfico TCP a la dirección IP del balanceador de carga y necesitas que el tráfico se distribuya como si procediera de un backend sin balanceo de carga, te recomendamos que uses un balanceador de carga de red de proxy interno regional.
Para obtener más información, consulta Balanceadores de carga de red de paso a través internos como saltos siguientes.
Configurar un balanceador de carga con subredes y backends de pila dual
En este documento se explica cómo configurar y probar un balanceador de carga de red interno de tipo pases directos que admita tráfico IPv4 e IPv6. En los pasos de esta sección se describe cómo configurar lo siguiente:
- En el ejemplo de esta página se usa una red de VPC en modo personalizado llamada
lb-network-dual-stack
. El tráfico de IPv6 requiere una subred en modo personalizado. - Una subred de doble pila (
stack-type
definida comoIPV4_IPV6
), que es necesaria para el tráfico IPv6. Cuando creas una subred de doble pila en una red de VPC en modo personalizado, eliges un tipo de acceso IPv6 para la subred. En este ejemplo, asignamos el valoripv6-access-type
al parámetroINTERNAL
de la subred. Esto significa que a las nuevas VMs de esta subred se les pueden asignar tanto direcciones IPv4 internas como direcciones IPv6 internas. Para obtener instrucciones, consulta la documentación de VPC sobre cómo añadir una subred de pila dual. - Reglas de cortafuegos que permiten las conexiones entrantes a las VMs de backend.
- El grupo de instancias de backend, que se encuentra en la siguiente región y subred en este ejemplo:
- Región:
us-west1
- Subred:
lb-subnet
, con el intervalo de direcciones IPv4 principal10.1.2.0/24
. Aunque elijas el intervalo de direcciones IPv4 que quieras configurar en la subred, el intervalo de direcciones IPv6 se asignará automáticamente. Google proporciona un bloque CIDR IPv6 de tamaño fijo (/64
).
- Región:
- Cuatro VMs de backend de pila dual: dos VMs en un grupo de instancias sin gestionar en la zona
us-west1-a
y dos VMs en un grupo de instancias sin gestionar en la zonaus-west1-c
. Para demostrar el acceso global, en este ejemplo se crea una segunda VM de cliente de prueba en otra región y subred:- Región:
europe-west1
- Subred:
europe-subnet
, con el intervalo de direcciones IP principal10.3.4.0/24
- Región:
- Una VM de cliente para probar las conexiones.
- Los siguientes componentes del balanceador de carga de red de paso a través interno:
- Una comprobación del estado del servicio backend.
- Un servicio de backend interno en la región
us-west1
para gestionar la distribución de conexiones a los dos grupos de instancias zonales. - Dos reglas de reenvío internas para el frontend del balanceador de carga.
En el siguiente diagrama se muestra la arquitectura de este ejemplo:
Configurar una red, una región y una subred
El balanceador de carga de red de paso a través interno de ejemplo que se describe en esta página se crea en una red de VPC en modo personalizado llamada lb-network-dual-stack
.
Para configurar subredes con intervalos IPv6 internos, habilita un intervalo IPv6 interno ULA de red VPC. Los intervalos de subredes IPv6 internas se asignan a partir de este intervalo.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en
Crear red VPC.En Nombre, escribe
lb-network-dual-stack
.Si quieres configurar intervalos de direcciones IPv6 internas en subredes de esta red, sigue estos pasos:
- En Configuración de direcciones IPv6 privadas, selecciona Configurar un intervalo de direcciones IPv6 internas ULA para esta red de VPC.
- En Asignar intervalo de IPv6 interno, selecciona Automáticamente o Manualmente.
Si selecciona Manualmente, introduzca un intervalo
/48
dentro del intervalofd20::/20
. Si el intervalo está en uso, se te pedirá que proporciones otro.
En Modo de creación de subred, selecciona Personalizado.
En la sección Nueva subred, especifica los siguientes parámetros de configuración de una subred:
- Nombre:
lb-subnet
- Región:
us-west1
- Tipo de pila de IP: IPv4 e IPv6 (pila dual)
- Intervalo de IPv4:
10.1.2.0/24
. - Tipo de acceso IPv6: Interno
- Nombre:
Haz clic en Listo.
Haz clic en Añadir subred e introduce la siguiente información:
- Nombre:
europe-subnet
- Región:
europe-west1
- Tipo de pila de IP: IPv4 (pila única)
- Intervalo de direcciones IP:
10.3.4.0/24
- Nombre:
Haz clic en Listo.
Haz clic en Crear.
gcloud
Para crear una red VPC de modo personalizado, ejecuta el comando
gcloud compute networks create
.Para configurar intervalos IPv6 internos en cualquier subred de esta red, usa la marca
--enable-ula-internal-ipv6
. Esta opción asigna un prefijo ULA/48
del intervalofd20::/20
que usa Google Cloud para los intervalos de subredes IPv6 internas. Si quieres seleccionar el/48
intervalo de IPv6 asignado, usa la marca--internal-ipv6-range
para especificar un intervalo.gcloud compute networks create lb-network-dual-stack \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --internal-ipv6-range=ULA_IPV6_RANGE \ --bgp-routing-mode=regional
Sustituye
ULA_IPV6_RANGE
por un prefijo/48
del intervalofd20::/20
que usa Google para los intervalos de subredes IPv6 internos. Si no usas la marca--internal-ipv6-range
, Google selecciona un prefijo/48
para la red, comofd20:bc7:9a1c::/48
.En la red
NETWORK
, crea una subred para las back-ends en la regiónus-west1
y otra subred para probar el acceso global en la regióneurope-west1
.Para crear las subredes, ejecuta el comando
gcloud compute networks subnets create
.gcloud compute networks subnets create lb-subnet \ --network=lb-network-dual-stack \ --range=10.1.2.0/24 \ --region=us-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
gcloud compute networks subnets create europe-subnet \ --network=lb-network-dual-stack \ --range=10.3.4.0/24 \ --region=europe-west1 \ --stack-type=IPV4_IPV6 \ --ipv6-access-type=INTERNAL
API
Crea una red VPC en modo personalizado.
Para configurar intervalos IPv6 internos en cualquier subred de esta red, asigna el valor true a enableUlaInternalIpv6
. Esta opción asigna un intervalo /48
del intervalo fd20::/20
que usa Google para los intervalos de subredes IPv6 internas. Si quieres seleccionar el intervalo de IPv6 /48
que se asigna, usa también el campo internalIpv6Range
para especificar un intervalo.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks { "autoCreateSubnetworks": false, "name": "lb-network-dual-stack", "mtu": MTU, "enableUlaInternalIpv6": true, "internalIpv6Range": "ULA_IPV6_RANGE", "routingConfig": { "routingMode": "DYNAMIC_ROUTING_MODE" } }
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto en el que se crea la red VPC.MTU
: unidad máxima de transmisión de la red. El MTU puede ser1460
(valor predeterminado) o1500
. Consulta la información general sobre la unidad máxima de transmisión antes de definir la MTU en1500
.ULA_IPV6_RANGE
: un prefijo/48
del intervalofd20::/20
que usa Google para los intervalos de subredes IPv6 internos. Si no proporciona ningún valor parainternalIpv6Range
, Google selecciona un prefijo/48
para la red.DYNAMIC_ROUTING_MODE
:global
oregional
para controlar el comportamiento de anuncio de rutas de los routers de Cloud Router en la red. Para obtener más información, consulta el artículo sobre el modo de enrutamiento dinámico.Para obtener más información, consulta el método
networks.insert
.
Haz dos solicitudes POST
al
método subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.1.2.0/24", "network": "lb-network-dual-stack", "name": "lb-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks { "ipCidrRange": "10.3.4.0/24", "network": "lb-network-dual-stack", "name": "europe-subnet" "stackType": IPV4_IPV6, "ipv6AccessType": Internal }
Configurar reglas de cortafuegos
En este ejemplo se usan las siguientes reglas de cortafuegos:
fw-allow-lb-access
: regla de entrada aplicable a todos los destinos de la red VPC que permite el tráfico de fuentes de los intervalos10.1.2.0/24
y10.3.4.0/24
. Esta regla permite el tráfico entrante de cualquier cliente ubicado en cualquiera de las dos subredes. Más adelante, puedes configurar y probar el acceso global.fw-allow-lb-access-ipv6
: una regla de entrada aplicable a todos los destinos de la red VPC que permite el tráfico de fuentes del intervalo IPv6 configurado en la subred. Esta regla permite el tráfico IPv6 entrante de cualquier cliente ubicado en cualquiera de las dos subredes. Más adelante, puedes configurar y probar el acceso global.fw-allow-ssh
: una regla de entrada aplicable a las instancias que se van a balancear, que permite la conectividad SSH entrante en el puerto TCP 22 desde cualquier dirección. Puede elegir un intervalo de IPs de origen más restrictivo para esta regla. Por ejemplo, puede especificar solo los intervalos de IPs del sistema desde el que inicia sesiones SSH. En este ejemplo se usa la etiqueta de destinoallow-ssh
para identificar las VMs a las que se debe aplicar.fw-allow-health-check
: una regla de entrada, aplicable a las instancias con balanceo de carga, que permite el tráfico de los sistemas de comprobación del estado ( Google Cloud ,130.211.0.0/22
y35.191.0.0/16
). En este ejemplo, se usa la etiqueta de destinoallow-health-check
para identificar las instancias a las que se debe aplicar.fw-allow-health-check-ipv6
: una regla de entrada, aplicable a las instancias que se están balanceando, que permite el tráfico de los sistemas de comprobación del estado (2600:2d00:1:b029::/64
). En este ejemplo, se usa la etiqueta de destinoallow-health-check-ipv6
para identificar las instancias a las que se debe aplicar. Google Cloud
Sin estas reglas de cortafuegos, la regla denegar predeterminada de entrada bloquea el tráfico entrante a las instancias de backend.
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Para crear la regla que permita el tráfico de la subred, haz clic en Crear regla de cortafuegos e introduce la siguiente información:
- Nombre:
fw-allow-lb-access
- Red:
lb-network-dual-stack
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Destinos: Todas las instancias de la red
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
10.1.2.0/24
y10.3.4.0/24
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
Para permitir el tráfico de la subred IPv6, haz clic de nuevo en Crear regla de cortafuegos e introduce la siguiente información:
- Nombre:
fw-allow-lb-access-ipv6
- Red:
lb-network-dual-stack
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Destinos: Todas las instancias de la red
- Filtro de origen: Intervalos de IPv6
- Intervalos de IPv6 de origen: IPV6_ADDRESS asignados en el
lb-subnet
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
Para permitir las conexiones SSH entrantes, vuelva a hacer clic en Crear regla de cortafuegos e introduzca la siguiente información:
- Nombre:
fw-allow-ssh
- Red:
lb-network-dual-stack
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-ssh
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
0.0.0.0/0
- Protocolos y puertos: selecciona Protocolos y puertos especificados, marca la casilla TCP y, a continuación, introduce
22
en Puertos.
- Nombre:
Haz clic en Crear.
Para permitir las comprobaciones del estado de Google Cloud IPv6, haz clic en Crear regla de cortafuegos de nuevo e introduce la siguiente información:
- Nombre:
fw-allow-health-check-ipv6
- Red:
lb-network-dual-stack
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-health-check-ipv6
- Filtro de origen: Intervalos de IPv6
- Intervalos de IPv6 de origen:
2600:2d00:1:b029::/64
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
Para permitir las comprobaciones del estado, haz clic en Crear regla de cortafuegos de nuevo e introduce la siguiente información: Google Cloud
- Nombre:
fw-allow-health-check
- Red:
lb-network-dual-stack
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción en la coincidencia: permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-health-check
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
130.211.0.0/22
y35.191.0.0/16
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
gcloud
Crea la regla de cortafuegos
fw-allow-lb-access
para permitir la comunicación con la subred:gcloud compute firewall-rules create fw-allow-lb-access \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=10.1.2.0/24,10.3.4.0/24 \ --rules=all
Crea la regla de cortafuegos
fw-allow-lb-access-ipv6
para permitir la comunicación con la subred:gcloud compute firewall-rules create fw-allow-lb-access-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --source-ranges=IPV6_ADDRESS \ --rules=all
Sustituye
IPV6_ADDRESS
por la dirección IPv6 asignada en ellb-subnet
.Crea la regla de cortafuegos
fw-allow-ssh
para permitir la conectividad SSH a las VMs con la etiqueta de redallow-ssh
. Si omitesource-ranges
, Google Cloud interpreta que la regla se aplica a cualquier fuente.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crea la regla
fw-allow-health-check-ipv6
para permitir las comprobaciones del estado deGoogle Cloud IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6 \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
Crea la regla
fw-allow-health-check
para permitir Google Cloud las comprobaciones del estado.gcloud compute firewall-rules create fw-allow-health-check \ --network=lb-network-dual-stack \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check \ --source-ranges=130.211.0.0/22,35.191.0.0/16 \ --rules=tcp,udp,icmp
API
Crea la regla de cortafuegos
fw-allow-lb-access
haciendo una solicitudPOST
al métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "10.1.2.0/24", "10.3.4.0/24" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crea la regla de cortafuegos
fw-allow-lb-access-ipv6
haciendo una solicitudPOST
al métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-lb-access-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "IPV6_ADDRESS" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Sustituye
IPV6_ADDRESS
por la dirección IPv6 asignada en ellb-subnet
.Crea la regla de cortafuegos
fw-allow-ssh
haciendo una solicitudPOST
al métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-ssh", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "0.0.0.0/0" ], "targetTags": [ "allow-ssh" ], "allowed": [ { "IPProtocol": "tcp", "ports": [ "22" ] } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crea la regla de cortafuegos
fw-allow-health-check-ipv6
haciendo una solicitudPOST
al métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check-ipv6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "2600:2d00:1:b029::/64" ], "targetTags": [ "allow-health-check-ipv6" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crea la regla de cortafuegos
fw-allow-health-check
haciendo una solicitudPOST
al métodofirewalls.insert
.POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/global/firewalls { "name": "fw-allow-health-check", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "priority": 1000, "sourceRanges": [ "130.211.0.0/22", "35.191.0.0/16" ], "targetTags": [ "allow-health-check" ], "allowed": [ { "IPProtocol": "tcp" }, { "IPProtocol": "udp" }, { "IPProtocol": "icmp" } ], "direction": "INGRESS", "logConfig": { "enable": false }, "disabled": false }
Crear VMs de backend y grupos de instancias
En este ejemplo se usan dos grupos de instancias sin gestionar, cada uno de ellos con dos VMs de backend (servidor). Para demostrar la naturaleza regional de los balanceadores de carga de red con paso a través internos, los dos grupos de instancias se colocan en zonas independientes, us-west1-a
y us-west1-c
.
- El grupo de instancias
ig-a
contiene estas dos VMs:vm-a1
vm-a2
- El grupo de instancias
ig-c
contiene estas dos VMs:vm-c1
vm-c2
El tráfico a las cuatro VMs de backend se balancea.
Para admitir este ejemplo y las opciones de configuración adicionales, cada una de las cuatro máquinas virtuales ejecuta un servidor web Apache que escucha en los siguientes puertos TCP: 80
, 8008
, 8080
, 8088
, 443
y 8443
.
A cada VM se le asigna una dirección IP interna en lb-subnet
y una dirección IP externa (pública) efímera. Puedes quitar las direcciones IP externas más adelante.
No es necesario que las VMs de backend tengan una dirección IP externa, pero es útil en este ejemplo porque permite que las VMs de backend descarguen Apache de Internet y que se puedan conectar mediante SSH.
De forma predeterminada, Apache está configurado para enlazarse a cualquier dirección IP. Los balanceadores de carga de red de paso a través internos envían paquetes conservando la IP de destino.
Comprueba que el software del servidor que se ejecuta en tus VMs de backend esté escuchando en la dirección IP de la regla de reenvío interna del balanceador de carga. Si configura varias reglas de reenvío internas, asegúrese de que su software escuche la dirección IP interna asociada a cada una de ellas. La dirección IP de destino de un paquete que un balanceador de carga de red pasante interno entrega a una máquina virtual de backend es la dirección IP interna de la regla de reenvío.
Si usas grupos de instancias gestionados, asegúrate de que el tipo de pila de la subred coincida con el tipo de pila de las plantillas de instancia que usan los grupos de instancias gestionados. La subred debe ser de pila dual si el grupo de instancias gestionado usa una plantilla de instancia de pila dual.
Para simplificar las instrucciones, estas VMs de backend ejecutan Debian GNU/Linux 12.
Consola
Crear VMs de backend
En la consola de Google Cloud , ve a la página Instancias de VM.
Repite los pasos del 3 al 8 para cada VM, usando las siguientes combinaciones de nombre y zona.
- Nombre:
vm-a1
, zona:us-west1-a
- Nombre:
vm-a2
, zona:us-west1-a
- Nombre:
vm-c1
, zona:us-west1-c
- Nombre:
vm-c2
, zona:us-west1-c
- Nombre:
Haz clic en Crear instancia.
Asigna el Nombre como se indica en el paso 2.
En Región, selecciona
us-west1
y elige una Zona como se indica en el paso 2.En la sección Disco de arranque, asegúrate de que la opción Debian GNU/Linux 12 (bookworm) esté seleccionada para el disco de arranque. Si es necesario, haz clic en Cambiar para cambiar la imagen.
Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduce
allow-ssh
yallow-health-check-ipv6
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network-dual-stack
- Subred:
lb-subnet
- Tipo de pila de IP: IPv4 e IPv6 (pila dual)
- Dirección IPv4 interna principal: efímera (automática)
- Dirección IPv4 externa: efímera
- Red:
Haz clic en Gestión y, a continuación, en el campo Secuencia de comandos de inicio, introduce la siguiente secuencia de comandos. El contenido de la secuencia de comandos es idéntico en las cuatro máquinas virtuales.
#! /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
- En Etiquetas de red, introduce
Haz clic en Crear.
Crear grupos de instancias
En la consola, ve a la página Grupos de instancias. Google Cloud
Repite los pasos siguientes para crear dos grupos de instancias no gestionados, cada uno con dos VMs, usando estas combinaciones.
- Nombre del grupo de instancias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
yvm-a2
- Nombre del grupo de instancias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
yvm-c2
- Nombre del grupo de instancias:
Haz clic en Crear grupo de instancias.
Haga clic en Nuevo grupo de instancias sin gestionar.
Asigna el Nombre como se indica en el paso 2.
En la sección Ubicación, selecciona
us-west1
en Región y, a continuación, elige una Zona como se indica en el paso 2.En Red, selecciona
lb-network-dual-stack
.En Subred, selecciona
lb-subnet
.En la sección Instancias de VM, añade las VMs como se indica en el paso 2.
Haz clic en Crear.
gcloud
Para crear las cuatro VMs, ejecuta el comando
gcloud compute instances create
cuatro veces. Usa estas cuatro combinaciones para[VM-NAME]
y[ZONE]
. El contenido de la secuencia de comandos es idéntico en las cuatro VMs.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet \ --stack-type=IPV4_IPV6 \ --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'
Crea los dos grupos de instancias sin gestionar en cada zona:
gcloud compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Añade las VMs a los grupos de instancias correspondientes:
gcloud compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
api
En las cuatro VMs, usa los siguientes nombres y zonas:
VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
Para obtener el DEBIAN_IMAGE_NAME
actual, ejecuta el siguiente comando gcloud
:
gcloud compute images list \ --filter="family=debian-12"
Crea cuatro VMs de backend haciendo cuatro solicitudes POST
al método instances.insert
:
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances { "name": "VM-NAME", "tags": { "items": [ "allow-health-check-ipv6", "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/[ZONE]/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "VM-NAME", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/zone/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "metadata": { "items": [ { "key": "startup-script", "value": "#! /bin/bash\napt-get update\napt-get install apache2 -y\na2ensite default-ssl\na2enmod ssl\nfile_ports=\"/etc/apache2/ports.conf\"\nfile_http_site=\"/etc/apache2/sites-available/000-default.conf\"\nfile_https_site=\"/etc/apache2/sites-available/default-ssl.conf\"\nhttp_listen_prts=\"Listen 80\\nListen 8008\\nListen 8080\\nListen 8088\"\nhttp_vh_prts=\"*:80 *:8008 *:8080 *:8088\"\nhttps_listen_prts=\"Listen 443\\nListen 8443\"\nhttps_vh_prts=\"*:443 *:8443\"\nvm_hostname=\"$(curl -H \"Metadata-Flavor:Google\" \\\nhttp://169.254.169.254/computeMetadata/v1/instance/name)\"\necho \"Page served from: $vm_hostname\" | \\\ntee /var/www/html/index.html\nprt_conf=\"$(cat \"$file_ports\")\"\nprt_conf_2=\"$(echo \"$prt_conf\" | sed \"s|Listen 80|${http_listen_prts}|\")\"\nprt_conf=\"$(echo \"$prt_conf_2\" | sed \"s|Listen 443|${https_listen_prts}|\")\"\necho \"$prt_conf\" | tee \"$file_ports\"\nhttp_site_conf=\"$(cat \"$file_http_site\")\"\nhttp_site_conf_2=\"$(echo \"$http_site_conf\" | sed \"s|*:80|${http_vh_prts}|\")\"\necho \"$http_site_conf_2\" | tee \"$file_http_site\"\nhttps_site_conf=\"$(cat \"$file_https_site\")\"\nhttps_site_conf_2=\"$(echo \"$https_site_conf\" | sed \"s|_default_:443|${https_vh_prts}|\")\"\necho \"$https_site_conf_2\" | tee \"$file_https_site\"\nsystemctl restart apache2" } ] }, "scheduling": { "preemptible": false }, "deletionProtection": false }
Crea dos grupos de instancias haciendo una solicitud POST
al método instanceGroups.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups { "name": "ig-a", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups { "name": "ig-c", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Añade instancias a cada grupo de instancias haciendo una solicitud POST
al método instanceGroups.addInstances
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a2" } ] }
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c/addInstances { "instances": [ { "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c1", "instance": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instances/vm-c2" } ] }
Configurar componentes del balanceador de carga
En estos pasos se configuran todos los componentes del balanceador de carga de red de pases interno, empezando por la comprobación de estado y el servicio de backend, y, a continuación, los componentes de frontend:
Comprobación del estado: en este ejemplo, se usa una comprobación del estado HTTP que comprueba si se recibe una respuesta HTTP
200
(OK). Para obtener más información, consulta la sección sobre comprobaciones del estado del artículo de descripción general del balanceador de carga de red interno de pases.Servicio de backend: como necesitas enviar tráfico HTTP a través del balanceador de carga interno, debes usar TCP, no UDP.
Regla de reenvío: en este ejemplo se crean dos reglas de reenvío internas para el tráfico IPv4 e IPv6.
Dirección IP interna: en este ejemplo, se especifica una dirección IP interna,
10.1.2.99
, al crear la regla de reenvío IPv4. Para obtener más información, consulta Dirección IP interna. Aunque elijas qué dirección IPv4 se configura, la dirección IPv6 se asigna automáticamente.
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:
- Nombre del balanceador de carga:
be-ilb
- Región:
us-west1
- Red:
lb-network-dual-stack
Configuración de backend
- Haz clic en Configuración de backend.
- En la sección Nuevo backend de Backends, selecciona IPv4 e IPv6 (pila dual) en Tipo de pila de IP.
- En Grupo de instancias, selecciona el grupo de instancias
ig-a
y haz clic en Hecho. - Haz clic en Añadir un backend y repite el paso para añadir
ig-c
. - En la lista Comprobación del estado, selecciona Crear comprobación del estado,
introduce la siguiente información y haz clic en Guardar:
- Nombre:
hc-http-80
. - Ámbito: regional.
- Protocolo:
HTTP
. - Puerto:
80
. - Protocolo de proxy:
NONE
. - Ruta de la solicitud:
/
.
- Nombre:
- Comprueba que aparezca una marca de verificación azul junto a Configuración de backend.
Configuración de frontend
- Haz clic en Configuración de frontend. En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Nombre, escribe
fr-ilb-ipv6
. - Para gestionar el tráfico IPv6, siga estos pasos:
- En Versión de IP, selecciona IPv6.
- En Subred, selecciona
lb-subnet
. El intervalo de direcciones IPv6 de la regla de reenvío siempre es efímero. - En Puertos, selecciona Varios y, en el campo Número de puerto, introduce
80
,8008
,8080
,8088
. - Haz clic en Listo.
- Para gestionar el tráfico IPv4, siga estos pasos:
- Haz clic en Añadir IP y puerto de frontend.
- En Nombre, escribe
fr-ilb
. - En Subred, selecciona
lb-subnet
. - En la sección Propósito de la IP interna, en la lista Dirección IP, selecciona Crear dirección IP,
introduce la siguiente información y, a continuación, haz clic en Reservar.
- Nombre:
ip-ilb
- Versión de IP: IPv4
- Dirección IP estática: Quiero elegir
- Dirección IP personalizada:
10.1.2.99
- Nombre:
- En Puertos, selecciona Varios y, en Números de puerto, introduce
80
,8008
,8080
y8088
. - 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 todos los ajustes.
- Si los ajustes son correctos, haz clic en Crear. El balanceador de carga de red de paso a través interno tarda unos minutos en crearse.
gcloud
Crea una comprobación del estado HTTP regional para probar la conectividad HTTP a las VMs en el puerto 80.
gcloud compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crea el servicio de backend para el tráfico HTTP:
gcloud compute backend-services create be-ilb \ --load-balancing-scheme=internal \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Añade los dos grupos de instancias al servicio de backend:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crea dos reglas de reenvío para el servicio de backend. Cuando cree la regla de reenvío de IPv4, especifique
10.1.2.99
como dirección IP interna en la subred de direcciones IPv4.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-ipv6 \ --region=us-west1 \ --load-balancing-scheme=internal \ --subnet=lb-subnet \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1 \ --ip-version=IPV6
api
Crea la comprobación del estado haciendo una solicitud POST
al método regionHealthChecks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/regionHealthChecks { "name": "hc-http-80", "type": "HTTP", "httpHealthCheck": { "port": 80 } }
Crea el servicio backend regional haciendo una solicitud POST
al método regionBackendServices.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices { "name": "be-ilb", "backends": [ { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instanceGroups/ig-a", "balancingMode": "CONNECTION" }, { "group": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-c/instanceGroups/ig-c", "balancingMode": "CONNECTION" } ], "healthChecks": [ "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/healthChecks/hc-http-80" ], "loadBalancingScheme": "INTERNAL", "connectionDraining": { "drainingTimeoutSec": 0 } }
Crea la regla de reenvío haciendo una solicitud POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-ipv6", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "ipVersion": "IPV6", "networkTier": "PREMIUM" }
Crea la regla de reenvío haciendo una solicitud POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Probar el balanceador de carga
Para probar el balanceador de carga, crea una VM cliente en la misma región que el balanceador de carga y, a continuación, envía tráfico del cliente al balanceador de carga.
Crear una VM cliente
En este ejemplo, se crea una VM de cliente (vm-client
) en la misma región que las VMs de backend (servidor). El cliente se usa para validar la configuración del balanceador de carga y demostrar el comportamiento esperado, tal como se describe en la sección Pruebas.
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, escribe
vm-client
.En Región, selecciona
us-west1
.En Zona, selecciona
us-west1-a
.Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduzca
allow-ssh
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network-dual-stack
- Subred:
lb-subnet
- Tipo de pila de IP: IPv4 e IPv6 (pila dual)
- IP interna principal: efímera (automática)
- IP externa: efímera
- Red:
- Haz clic en Listo.
- En Etiquetas de red, introduzca
Haz clic en Crear.
gcloud
La VM cliente puede estar en cualquier zona de la misma región que el balanceador de carga y puede usar cualquier subred de esa región. En este ejemplo, el cliente está en la zona us-west1-a
y usa la misma subred que las VMs de backend.
gcloud compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV4_IPV6 \ --tags=allow-ssh \ --subnet=lb-subnet
api
Realiza una solicitud POST
al método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances { "name": "vm-client", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "stackType": "IPV4_IPV6", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network-dual-stack", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/us-west1-a/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Probar la conexión
Esta prueba se pone en contacto con el balanceador de carga desde una VM de cliente independiente, es decir, no desde una VM de backend del balanceador de carga. Lo normal es que el tráfico se distribuya entre las cuatro máquinas virtuales de backend.
Conéctate a la instancia de VM cliente.
gcloud compute ssh vm-client --zone=us-west1-a
Describe la regla de reenvío de IPv6
fr-ilb-ipv6
. Fíjate en elIPV6_ADDRESS
de la descripción.gcloud compute forwarding-rules describe fr-ilb-ipv6 --region=us-west1
Describe la regla de reenvío de IPv4
fr-ilb
.gcloud compute forwarding-rules describe fr-ilb --region=us-west1
En los clientes con conectividad IPv6, ejecuta el siguiente comando:
curl -m 10 -s http://IPV6_ADDRESS:80
Por ejemplo, si la dirección IPv6 asignada es
[fd20:1db0:b882:802:0:46:0:0/96]:80
, el comando debería tener este aspecto:curl -m 10 -s http://[fd20:1db0:b882:802:0:46:0:0]:80
En los clientes con conectividad IPv4, ejecuta el siguiente comando:
curl -m 10 -s http://10.1.2.99:80
Sustituye los marcadores de posición por valores válidos:
IPV6_ADDRESS
es la dirección IPv6 efímera de la regla de reenvíofr-ilb-ipv6
.
Configurar un balanceador de carga con subredes y backends solo IPv6
En este documento se explica cómo configurar y probar un balanceador de carga de red interno de tipo pasarela que solo admite tráfico IPv6. En los pasos de esta sección se describe cómo configurar lo siguiente:
- Una red de VPC en modo personalizado llamada
lb-network-ipv6-only
. El tráfico IPv6 requiere una subred en modo personalizado. - Una subred solo IPv6 interna llamada
lb-subnet-ipv6-only
(stack-type
configurada comoIPV6_ONLY
), que es necesaria para el tráfico solo IPv6. - Reglas de cortafuegos que permiten las conexiones entrantes a las VMs de backend.
- El grupo de instancias de backend, que se encuentra en la siguiente región y subred en este ejemplo:
- Región:
us-west1
- Subred:
lb-subnet-ipv6-only
el intervalo de direcciones IPv6 de la subred se asigna automáticamente. Google proporciona un bloque CIDR IPv6 de tamaño fijo (/64
).
- Región:
- Cuatro VMs de backend solo IPv6: dos VMs en un grupo de instancias sin gestionar en la zona
us-west1-a
y dos VMs en un grupo de instancias sin gestionar en la zonaus-west1-c
. - Un servidor TCP IPv6 en las VMs de backend. El servidor escucha las conexiones entrantes en la IP virtual especificada de la regla de reenvío del balanceador de carga y en la interfaz de red especificada. El servidor acepta las conexiones de clientes entrantes, envía una respuesta y, a continuación, cierra la conexión.
- Una VM de cliente para probar las conexiones.
- Los siguientes componentes del balanceador de carga de red de paso a través interno:
- Una comprobación del estado del servicio de backend
- Un servicio de backend interno en la región
us-west1
para gestionar la distribución de conexiones a los dos grupos de instancias zonales - Una regla de reenvío de IPv6
También puedes configurar un balanceador de carga de red de paso a través interno con backends internos solo IPv6 mediante una instancia de VM que actúe como pasarela NAT. Para obtener más información sobre esta configuración, consulta Configurar un balanceador de carga de red de transferencia interno con back-ends solo IPv6 internos.
Configurar una red, una región y una subred
El balanceador de carga de red de paso a través interno de ejemplo que se describe en esta página se crea en una red de VPC en modo personalizado llamada lb-network-ipv6-only
.
Para configurar subredes con intervalos IPv6 internos, habilita un intervalo IPv6 interno ULA de red VPC. Los intervalos de subredes IPv6 internas se asignan a partir de este intervalo.
Más adelante, en la sección Instalar un servidor TCP IPv6 en las VMs de backend mediante un script Bash de inicio de este documento, se usa el intervalo de la subred IPv6 interna para crear una regla de enrutamiento que enrute el tráfico de la subred de VPC a través de la interfaz de red y la pasarela especificadas.
Consola
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
En Nombre, escribe
lb-network-ipv6-only
.Si quieres configurar intervalos de direcciones IPv6 internas en subredes de esta red, sigue estos pasos:
- En Configuración de direcciones IPv6 privadas, selecciona Configurar un intervalo de direcciones IPv6 internas ULA para esta red de VPC.
- En Asignar intervalo de IPv6 interno, selecciona Automáticamente o Manualmente.
Si selecciona Manualmente, introduzca un intervalo
/48
dentro del intervalofd20::/20
. Si el intervalo ya está en uso, se te pedirá que proporciones otro.
En Modo de creación de subred, selecciona Personalizado.
En la sección Nueva subred, especifica los siguientes parámetros de configuración de una subred:
- Nombre:
lb-subnet-ipv6-only
- Región:
us-west1
- Tipo de pila de IP: IPv6 (pila única)
- Tipo de acceso IPv6: Interno
- Nombre:
Haz clic en Listo.
Haz clic en Crear.
gcloud
Para crear una red VPC de modo personalizado, ejecuta el comando
gcloud compute networks create
.Para configurar intervalos IPv6 internos en cualquier subred de esta red, usa la marca
--enable-ula-internal-ipv6
.gcloud compute networks create lb-network-ipv6-only \ --subnet-mode=custom \ --enable-ula-internal-ipv6 \ --bgp-routing-mode=regional
Configura una subred con el valor
ipv6-access-type
definido comoINTERNAL
. Esto indica que las VMs de esta subred solo pueden tener direcciones IPv6 internas.Para crear la subred, ejecuta el comandogcloud compute networks subnets create
.gcloud compute networks subnets create lb-subnet-ipv6-only \ --network=lb-network-ipv6-only \ --region=us-west1 \ --stack-type=IPV6_ONLY \ --ipv6-access-type=INTERNAL
Configurar reglas de cortafuegos
En este ejemplo se usan las siguientes reglas de cortafuegos:
fw-allow-lb-access-ipv6-only
: una regla de entrada, aplicable a todos los destinos de la red de VPC, que permite el tráfico de todos los orígenes IPv6.fw-allow-ssh
: una regla de entrada aplicable a las instancias que se van a balancear, que permite la conectividad SSH entrante en el puerto TCP22
desde cualquier dirección. Puede elegir un intervalo de IPs de origen más restrictivo para esta regla. Por ejemplo, puede especificar solo los intervalos de IPs del sistema desde el que inicia sesiones SSH. En este ejemplo se usa la etiqueta de destinoallow-ssh
para identificar las VMs a las que se debe aplicar.fw-allow-health-check-ipv6-only
: una regla de entrada, aplicable a las instancias que se están balanceando, que permite el tráfico de los sistemas de comprobación del estado Google Cloud (2600:2d00:1:b029::/64
). En este ejemplo se usa la etiqueta de destinoallow-health-check-ipv6
para identificar las instancias a las que se debe aplicar.
Sin estas reglas de cortafuegos, la regla denegar predeterminada de entrada bloquea el tráfico entrante a las instancias de backend.
Consola
En la Google Cloud consola, ve a la página Políticas de cortafuegos.
Para permitir el tráfico de subred IPv6, haz clic de nuevo en Crear regla de cortafuegos e introduce la siguiente información:
- Nombre:
fw-allow-lb-access-ipv6-only
- Red:
lb-network-ipv6-only
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción tras coincidencia: Permitir
- Destinos: Todas las instancias de la red
- Filtro de origen: Intervalos de IPv6
- Intervalos de IPv6 de origen:
::/0
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
Para permitir las conexiones SSH entrantes, vuelve a hacer clic en Crear regla de cortafuegos e introduce la siguiente información:
- Nombre:
fw-allow-ssh
- Red:
lb-network-ipv6-only
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción tras coincidencia: Permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-ssh
- Filtro de origen: Intervalos de IPv4
- Intervalos de IPv4 de origen:
0.0.0.0/0
- Protocolos y puertos: selecciona Protocolos y puertos especificados, marca la casilla TCP y, a continuación, introduce
22
en Puertos.
- Nombre:
Haz clic en Crear.
Para permitir las comprobaciones de estado de Google Cloud IPv6, haz clic de nuevo en Crear regla de cortafuegos e introduce la siguiente información:
- Nombre:
fw-allow-health-check-ipv6-only
- Red:
lb-network-ipv6-only
- Prioridad:
1000
- Sentido del tráfico: entrada
- Acción tras coincidencia: Permitir
- Objetivos: Etiquetas de destino especificadas
- Etiquetas de destino:
allow-health-check-ipv6
- Filtro de origen: Intervalos de IPv6
- Intervalos de IPv6 de origen:
2600:2d00:1:b029::/64
- Protocolos y puertos: Permitir todo
- Nombre:
Haz clic en Crear.
gcloud
Crea la regla de cortafuegos
fw-allow-lb-access-ipv6-only
para permitir el tráfico IPv6 a todas las instancias de VM de la red de VPC.gcloud compute firewall-rules create fw-allow-lb-access-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --source-ranges=::/0 \ --rules=all
Crea la regla de cortafuegos
fw-allow-ssh
para permitir la conectividad SSH a las VMs con la etiqueta de redallow-ssh
. Si omitesource-ranges
, Google Cloud interpreta que la regla se aplica a cualquier fuente.gcloud compute firewall-rules create fw-allow-ssh \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-ssh \ --rules=tcp:22
Crea la regla
fw-allow-health-check-ipv6
para permitir las comprobaciones del estado deGoogle Cloud IPv6.gcloud compute firewall-rules create fw-allow-health-check-ipv6-only \ --network=lb-network-ipv6-only \ --action=allow \ --direction=ingress \ --target-tags=allow-health-check-ipv6 \ --source-ranges=2600:2d00:1:b029::/64 \ --rules=tcp,udp
Crear VMs de backend y grupos de instancias
En este ejemplo se usan dos grupos de instancias sin gestionar, cada uno con dos VMs de backend. Para demostrar la naturaleza regional de los balanceadores de carga de red con paso a través internos, los dos grupos de instancias se colocan en zonas independientes, us-west1-a
y us-west1-c
.
- El grupo de instancias
ig-a
contiene estas dos VMs:vm-a1
vm-a2
- El grupo de instancias
ig-c
contiene estas dos VMs:vm-c1
vm-c2
El tráfico a las cuatro VMs de backend se balancea.
Consola
Crear VMs de backend
En la consola de Google Cloud , ve a la página Instancias de VM.
Repite estos pasos con cada máquina virtual, usando las siguientes combinaciones de nombre y zona.
- Nombre:
vm-a1
, zona:us-west1-a
- Nombre:
vm-a2
, zona:us-west1-a
- Nombre:
vm-c1
, zona:us-west1-c
- Nombre:
vm-c2
, zona:us-west1-c
- Nombre:
Haz clic en Crear instancia.
Asigna el Nombre como se indica en el paso 2.
En Región, selecciona
us-west1
y elige una Zona como se indica en el paso 2.En la sección Disco de arranque, asegúrate de que la opción Debian GNU/Linux 12 (bookworm) esté seleccionada para el disco de arranque. Si es necesario, haz clic en Cambiar para cambiar la imagen.
Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduce
allow-ssh
yallow-health-check-ipv6
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network-ipv6-only
- Subred:
lb-subnet-ipv6-only
- Tipo de pila de IP: IPv6 (pila única)
- Dirección IPv6 interna principal: efímera (automática)
- Red:
- En Etiquetas de red, introduce
Haz clic en Crear.
La VM backend debe ejecutar un servidor TCP IPv6 que escuche las conexiones entrantes. Instala este servidor en las VMs de backend después de configurar el balanceador de carga. Esto se debe a que la secuencia de comandos del servidor crea un socket que se vincula a la regla de reenvío del balanceador de carga.
Crear grupos de instancias
En la consola, ve a la página Grupos de instancias. Google Cloud
Repite los pasos siguientes para crear dos grupos de instancias no gestionados, cada uno con dos VMs, usando estas combinaciones.
- Nombre del grupo de instancias:
ig-a
, zona:us-west1-a
, VMs:vm-a1
yvm-a2
- Nombre del grupo de instancias:
ig-c
, zona:us-west1-c
, VMs:vm-c1
yvm-c2
- Nombre del grupo de instancias:
Haz clic en Crear grupo de instancias.
Haga clic en Nuevo grupo de instancias sin gestionar.
Asigna el Nombre como se indica en el paso 2.
En la sección Ubicación, selecciona
us-west1
en Región y, a continuación, elige una Zona como se indica en el paso 2.En Red, selecciona
lb-network-ipv6-only
.En Subred, selecciona
lb-subnet-ipv6-only
.En la sección Instancias de VM, añade las VMs como se indica en el paso 2.
Haz clic en Crear.
gcloud
Para crear las cuatro VMs, ejecuta el comando
gcloud compute instances create
cuatro veces. Usa estas cuatro combinaciones para[VM-NAME]
y[ZONE]
.VM-NAME
:vm-a1
,ZONE
:us-west1-a
VM-NAME
:vm-a2
,ZONE
:us-west1-a
VM-NAME
:vm-c1
,ZONE
:us-west1-c
VM-NAME
:vm-c2
,ZONE
:us-west1-c
gcloud beta compute instances create VM-NAME \ --zone=ZONE \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check-ipv6 \ --subnet=lb-subnet-ipv6-only \ --stack-type=IPV6_ONLY
La VM backend debe ejecutar un servidor TCP IPv6 que escuche las conexiones entrantes. Instala este servidor en las VMs de backend después de configurar el balanceador de carga. Esto se debe a que la secuencia de comandos del servidor crea un socket que se vincula a la regla de reenvío del balanceador de carga.
Crea los dos grupos de instancias sin gestionar en cada zona:
gcloud beta compute instance-groups unmanaged create ig-a \ --zone=us-west1-a gcloud beta compute instance-groups unmanaged create ig-c \ --zone=us-west1-c
Añade las VMs a los grupos de instancias correspondientes:
gcloud beta compute instance-groups unmanaged add-instances ig-a \ --zone=us-west1-a \ --instances=vm-a1,vm-a2 gcloud beta compute instance-groups unmanaged add-instances ig-c \ --zone=us-west1-c \ --instances=vm-c1,vm-c2
Configurar componentes del balanceador de carga
En estos pasos se configuran todos los componentes del balanceador de carga de red de pases interno, empezando por la comprobación de estado y el servicio de backend, y, a continuación, los componentes de frontend:
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:
- Nombre del balanceador de carga:
ilb-ipv6-only
- Región:
us-west1
- Red:
lb-network-ipv6-only
Configuración de backend
- Haz clic en Configuración de backend.
- En la sección Nuevo backend de Backends, selecciona IPv6 (pila única) como tipo de pila de IP.
- En Grupo de instancias, selecciona el grupo de instancias
ig-a
y haz clic en Hecho. - Haz clic en Añadir un backend y repite el paso para añadir
ig-c
. - En la lista Comprobación del estado, selecciona Crear comprobación del estado,
introduce la siguiente información y haz clic en Guardar:
- Nombre:
hc-http-80
. - Ámbito: regional.
- Protocolo:
HTTP
. - Puerto:
80
. - Protocolo de proxy:
NONE
. - Ruta de la solicitud:
/
.
- Nombre:
- Comprueba que aparezca una marca de verificación azul junto a Configuración de backend.
Configuración de frontend
- Haz clic en Configuración de frontend. En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Nombre, escribe
fr-ilb-ipv6-only
. - Para gestionar el tráfico IPv6, siga estos pasos:
- En Versión de IP, selecciona IPv6. El servidor TCP IPv6 que vas a crear en la siguiente sección se vincula a la IP virtual de la regla de reenvío.
- En Subred, selecciona
lb-subnet-ipv6-only
. El intervalo de direcciones IPv6 de la regla de reenvío siempre es efímero. - En Puertos, selecciona Varios y, a continuación, en el campo Número de puerto, introduce
80
,8008
,8080
,8088
. - Haz clic en Listo.
- Verifica 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 todos los ajustes.
- Si los ajustes son correctos, haz clic en Crear. El balanceador de carga de red de paso a través interno tarda unos minutos en crearse.
gcloud
Crea una comprobación del estado HTTP regional para probar la conectividad HTTP a las VMs en el puerto 80.
gcloud beta compute health-checks create http hc-http-80 \ --region=us-west1 \ --port=80
Crea el servicio de backend:
gcloud beta compute backend-services create ilb-ipv6-only \ --load-balancing-scheme=INTERNAL \ --protocol=tcp \ --region=us-west1 \ --health-checks=hc-http-80 \ --health-checks-region=us-west1
Añade los dos grupos de instancias al servicio de backend:
gcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a
gcloud beta compute backend-services add-backend ilb-ipv6-only \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Crea la regla de reenvío IPv6 con una dirección IPv6 efímera.
gcloud beta compute forwarding-rules create fr-ilb-ipv6-only \ --region=us-west1 \ --load-balancing-scheme=INTERNAL \ --subnet=lb-subnet-ipv6-only \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=ilb-ipv6-only \ --backend-service-region=us-west1 \ --ip-version=IPV6
El servidor TCP IPv6 que vas a crear en la siguiente sección se vincula a la IP virtual de la regla de reenvío.
Instalar un servidor TCP IPv6 en las VMs de backend mediante una secuencia de comandos Bash de inicio
En este ejemplo, la secuencia de comandos de inicio de Bash para las VMs de backend contiene lo siguiente:
- Comandos de redes para enrutar todos los paquetes salientes que se originan en una subred a través de una pasarela y una interfaz de red especificadas.
- Secuencia de comandos del servidor Python (
server.py
), que es un servidor TCP IPv6 que escucha las conexiones entrantes en la interfaz de red y la VIP especificadas. Acepta las conexiones de clientes entrantes, envía una respuesta y, a continuación, cierra la conexión.
Debe añadir los siguientes detalles en la secuencia de comandos de Bash:
- Dirección de la pasarela
- Intervalo de subredes
- VIP de la regla de reenvío
- Interfaz de red
Para identificar la dirección de la pasarela y el intervalo de la subred, ejecuta el comando ip -6 route show table all
en la VM backend. Para obtener más información sobre los comandos que se usan en la secuencia de comandos de inicio de Bash, consulta la sección Apéndice.
Para añadir una secuencia de comandos de inicio a la instancia de VM, haz lo siguiente:
Consola
En la lista de instancias de VM que has creado anteriormente, haz clic en la que quieras actualizar.
Haz clic en Editar.
En la sección Metadata (Metadatos), introduce la siguiente secuencia de comandos en el campo Startup script (Secuencia de comandos de inicio).
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.py
Haz clic en Guardar.
gcloud
Crea una secuencia de comandos de inicio.
nano startup.sh
Añade la siguiente secuencia de comandos y guarda el archivo.
#!/bin/bash # Replace these with your actual values. Run the 'ip -6 route show table all' command to find the correct values. GATEWAY_ADDRESS=fe80::57:2ff:fe36:ffbe SUBNET_RANGE=fd20:307:120c:2000::/64 # Add a custom default route to routing table 1. # The following command sends packets to the gateway using the network interface named 'ens4'. sudo ip route add default via $GATEWAY_ADDRESS dev ens4 table 1 # Add a source-based policy routing rule. # The following command adds a rule to route all outgoing packets originating # from a specified subnet. If the source address matches the subnet, # the system uses the default route defined in table 1 to forward the traffic. sudo ip -6 rule add from $SUBNET_RANGE table 1 # Allow the server to bind to a non-local IPv6 address--the VIP of the load balancer. sudo sysctl -w net.ipv6.ip_nonlocal_bind=1 # Overview: # This script sets up a simple IPv6 TCP server using Python's socket library. # The server binds to a specific network interface and listens on a specified Virtual IP (VIP) address and port (default: 80). # It accepts incoming client connections, sends a simple response ("Thank you for connecting"), and then closes the connection. # Key features: # - Uses IPv6 (AF_INET6) for networking. # - Binds to a specific network interface using SO_BINDTODEVICE. # - Handles multiple client connections in a loop. # - Demonstrates basic socket programming concepts like binding, listening, accepting, and sending data. # Note: Replace placeholders like 'FORWARDING_RULE_VIP' and 'ens4' with actual values for your setup. # Write the Python file locally. cat << 'EOF' > server.py # Import the socket library to work with network connections import socket import urllib.request # Fetch the VM hostname from Google Cloud metadata server def get_vm_hostname(): url = "http://metadata.google.internal/computeMetadata/v1/instance/name" req = urllib.request.Request(url, headers={"Metadata-Flavor": "Google"}) with urllib.request.urlopen(req) as response: return response.read().decode() vm_hostname = get_vm_hostname() # Create a socket object for IPv6 and TCP connections # AF_INET6 specifies IPv6, SOCK_STREAM specifies TCP server_socket = socket.socket(socket.AF_INET6, socket.SOCK_STREAM) # Set the SO_REUSEADDR option to allow reusing the address # This is useful to avoid "address already in use" errors when restarting the server server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) # Specify the network interface to bind the server to # Replace "ens4" with the name of your network interface interface_name = "ens4" # Get the index of the network interface interface_index = socket.if_nametoindex(interface_name) # Bind the socket to the specified network interface server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_BINDTODEVICE, interface_name.encode()) # Bind the socket to an address and port # Replace 'FORWARDING_RULE_VIP' with the actual VIP (Virtual IP) address server_address = ('FORWARDING_RULE_VIP', 80, 0, 0) server_socket.bind(server_address) # Start listening for incoming connections # The argument '5' specifies the maximum number of queued connections server_socket.listen(5) # Print a message indicating that the server is ready to accept connections print(f"Server listening on {server_address}, bound to {interface_name}") # Serve incoming connections while True: client_socket, client_address = server_socket.accept() print(f"Accepted connection from {client_address}") # Generate response body body = f"Thank you for connecting to {vm_hostname}\n" # Construct a proper HTTP/1.1 response response = ( "HTTP/1.1 200 OK\r\n" f"Content-Length: {len(body)}\r\n" "Content-Type: text/plain\r\n" "Connection: close\r\n" "\r\n" f"{body}" ) # Send the response and close the connection client_socket.sendall(response.encode()) client_socket.close() EOF # Make the Python script executable chmod +x server.py # Run the server sudo python3 server.py
Añade el archivo de metadatos a la instancia de VM.
gcloud compute instances add-metadata VM-NAME \ --metadata-from-file=startup-script=startup.sh
Probar el balanceador de carga
Para probar el balanceador de carga, crea una VM cliente en la misma región que el balanceador de carga y, a continuación, envía tráfico del cliente al balanceador de carga.
Crear una VM cliente
En este ejemplo, se crea una VM de cliente (vm-client
) en la misma región que las VMs de backend (servidor). El cliente se usa para validar la configuración del balanceador de carga y demostrar el comportamiento esperado, tal como se describe en la sección Pruebas.
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
En Nombre, escribe
vm-client
.En Región, selecciona
us-west1
.En Zona, selecciona
us-west1-a
.Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduzca
allow-ssh
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network-ipv6-only
- Subred:
lb-subnet-ipv6-only
- Tipo de pila de IP: IPv6 (pila única)
- Red:
- Haz clic en Listo.
- En Etiquetas de red, introduzca
Haz clic en Crear.
gcloud
La VM cliente puede estar en cualquier zona de la misma región que el balanceador de carga y puede usar cualquier subred de esa región. En este ejemplo, el cliente está en la zona us-west1-a
y usa la misma subred que las VMs de backend.
gcloud beta compute instances create vm-client \ --zone=us-west1-a \ --image-family=debian-12 \ --image-project=debian-cloud \ --stack-type=IPV6_ONLY \ --tags=allow-ssh \ --subnet=lb-subnet-ipv6-only
Probar la conexión
Esta prueba se pone en contacto con el balanceador de carga desde una VM de cliente independiente, es decir, no desde una VM de backend del balanceador de carga. Lo normal es que el tráfico se distribuya entre las cuatro máquinas virtuales de backend.
Conéctate a la instancia de VM cliente mediante SSH.
gcloud compute ssh vm-client --zone=us-west1-a
Describe la regla de reenvío de IPv6
fr-ilb-ipv6-only
. Fíjate en elIPV6_ADDRESS
de la descripción.gcloud beta compute forwarding-rules describe fr-ilb-ipv6-only \ --region=us-west1
En los clientes con conectividad IPv6, ejecuta el siguiente comando:
curl http://IPV6_ADDRESS:80
Por ejemplo, si la dirección IPv6 asignada es
[fd20:307:120c:2000:0:1:0:0/96]:80
, el comando debería tener este aspecto:curl http://[fd20:307:120c:2000:0:1:0:0]:80
Opciones de configuración adicionales
En esta sección se amplía el ejemplo de configuración para ofrecer opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes llevarlas a cabo en el orden que prefieras.
Habilitar el acceso global
Puedes habilitar el acceso global para tu balanceador de carga de red con paso a través interno de ejemplo para que los clientes de todas las regiones puedan acceder a él.
Los backends del balanceador de carga de ejemplo deben seguir estando en una región (us-west1
).
Para configurar el acceso global, haz los siguientes cambios en la configuración.
Consola
Editar la regla de reenvío del balanceador de carga
En la Google Cloud consola, ve a la página Balanceo de carga.
En la columna Nombre, haz clic en tu balanceador de carga de red de paso a través interno. El balanceador de carga de ejemplo se llama
be-ilb
.Haz clic en Configuración de frontend.
Haz clic en Editar
.En Acceso global, selecciona Habilitar.
Haz clic en Listo.
Haz clic en Actualizar.
En la página Detalles del balanceador de carga, comprueba que en la configuración de frontend se indique Regional (REGION
) con acceso global.
gcloud
Actualiza la regla de reenvío del balanceador de carga de ejemplo,
fr-ilb
, para incluir la marca--allow-global-access
.gcloud compute forwarding-rules update fr-ilb \ --region=us-west1 \ --allow-global-access
Puedes usar el comando
forwarding-rules describe
para determinar si una regla de reenvío tiene habilitado el acceso global. Por ejemplo:gcloud compute forwarding-rules describe fr-ilb \ --region=us-west1 \ --format="get(name,region,allowGlobalAccess)"
La palabra
True
aparece en el resultado, después del nombre y la región de la regla de reenvío, cuando el acceso global está habilitado.
API
Realiza una solicitud PATCH
al método forwardingRules/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb { "allowGlobalAccess": true }
Crear un cliente de VM para probar el acceso global
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Haz clic en Crear instancia.
Asigna el valor
vm-client2
a Nombre.Define Región como
europe-west1
.En Zona, elija
europe-west1-b
.Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduzca
allow-ssh
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network
- Subred:
europe-subnet
- Red:
- En Etiquetas de red, introduzca
Haz clic en Crear.
gcloud
La VM cliente puede estar en cualquier zona de la misma región que el balanceador de carga y puede usar cualquier subred de esa región. En este ejemplo, el cliente está en la zona europe-west1-b
y usa la misma subred que las VMs de backend.
gcloud compute instances create vm-client2 \ --zone=europe-west1-b \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh \ --subnet=europe-subnet
API
Realiza una solicitud POST
al método instances.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/instances { "name": "vm-client2", "tags": { "items": [ "allow-ssh" ] }, "machineType": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/europe-west1-b/machineTypes/e2-standard-2", "canIpForward": false, "networkInterfaces": [ { "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/europe-west1/subnetworks/europe-subnet", "accessConfigs": [ { "type": "ONE_TO_ONE_NAT", "name": "external-nat", "networkTier": "PREMIUM" } ] } ], "disks": [ { "type": "PERSISTENT", "boot": true, "mode": "READ_WRITE", "autoDelete": true, "deviceName": "vm-client2", "initializeParams": { "sourceImage": "projects/debian-cloud/global/images/debian-image-name", "diskType": "projects/PROJECT_ID/zones/europe-west1-b/diskTypes/pd-standard", "diskSizeGb": "10" } } ], "scheduling": { "preemptible": false }, "deletionProtection": false }
Conéctate al cliente de la VM y prueba la conectividad
Para probar la conectividad, ejecuta el siguiente comando:
gcloud compute ssh vm-client2 --zone=europe-west1-b
Prueba a conectarte al balanceador de carga en todos los puertos configurados, como hiciste
desde vm-client
en la región us-west1
. Prueba la conectividad HTTP en los cuatro puertos configurados en la regla de reenvío:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Configurar grupos de instancias gestionadas
En la configuración de ejemplo se han creado dos grupos de instancias sin gestionar. En su lugar, puede usar grupos de instancias gestionados, incluidos los grupos de instancias gestionados zonales y regionales, como backends de balanceadores de carga de red internos de tipo pasarela.
Los grupos de instancias gestionados requieren que crees una plantilla de instancias. En este procedimiento se muestra cómo sustituir los dos grupos de instancias sin gestionar por zonas del ejemplo por un único grupo de instancias gestionado regional. Un grupo de instancias gestionado regional crea automáticamente VMs en varias zonas de la región, lo que facilita la distribución del tráfico de producción entre zonas.
Los grupos de instancias gestionados también admiten el autoescalado y la reparación automática. Si usas el autoescalado con balanceadores de carga de red de paso a través internos, no puedes escalar en función del balanceo de carga.
En este procedimiento se muestra cómo modificar el servicio de backend del balanceador de carga de red interno de ejemplo para que utilice un grupo de instancias gestionado regional.
Consola
Plantilla de instancia
En la consola de Google Cloud , ve a la página Plantillas de instancias de VM.
Haz clic en Crear plantilla de instancia.
Asigna el valor
template-vm-ilb
a Nombre.Elige un tipo de máquina.
En la sección Disco de arranque, asegúrate de que la opción Debian GNU/Linux 12 (bookworm) esté seleccionada para el disco de arranque. Si es necesario, haz clic en Cambiar para cambiar la imagen.
Haz clic en Advanced options (Opciones avanzadas).
Haga clic en Redes y configure los siguientes campos:
- En Etiquetas de red, introduce
allow-ssh
yallow-health-check
. - En Interfaces de red, selecciona lo siguiente:
- Red:
lb-network
- Subred:
lb-subnet
- Red:
- En Etiquetas de red, introduce
Haga clic en Gestión y, a continuación, en el campo Secuencia de comandos de inicio, introduzca 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_completed
Haz clic en Crear.
Grupo de instancias gestionado
En la consola, ve a la página Grupos de instancias. Google Cloud
Haz clic en Crear grupo de instancias.
Asigna el valor
ig-ilb
a Nombre.En Ubicación, elige Multizona y, en Región, selecciona
us-west1
.Asigna el valor
template-vm-ilb
a Plantilla de instancia.Opcional: Configura el autoescalado. No puedes autoescalar el grupo de instancias en función del uso del balanceo de carga HTTP porque el grupo de instancias es un backend del balanceador de carga de red interno de transferencia.
Define
1
en Número mínimo de instancias y6
en Número máximo de instancias.Opcional: Configura la reparación automática. Si configura la reparación automática, utilice la misma comprobación del estado que el servicio de backend para el balanceador de carga de red interno de pases. En este ejemplo, utiliza
hc-http-80
.Haz clic en Crear.
gcloud
Crea la plantilla de instancia. También puedes definir otros parámetros, como el tipo de máquina, para que los use la plantilla de imagen.
gcloud compute instance-templates create template-vm-ilb \ --image-family=debian-12 \ --image-project=debian-cloud \ --tags=allow-ssh,allow-health-check \ --subnet=lb-subnet \ --region=us-west1 \ --network=lb-network \ --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'
Crea un grupo de instancias gestionado regional con la plantilla:
gcloud compute instance-groups managed create ig-ilb \ --template=template-vm-ilb \ --region=us-west1 \ --size=6
Añade el grupo de instancias gestionado regional como backend al servicio de backend que ya has creado:
gcloud compute backend-services add-backend be-ilb \ --region=us-west1 \ --instance-group=ig-ilb \ --instance-group-region=us-west1
Desconecta los dos grupos de instancias no gestionados (zonales) del servicio de backend:
gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-a \ --instance-group-zone=us-west1-a gcloud compute backend-services remove-backend be-ilb \ --region=us-west1 \ --instance-group=ig-c \ --instance-group-zone=us-west1-c
Eliminar direcciones IP externas de las VMs de backend
Cuando creaste las VMs de backend, a cada una se le asignó una dirección IP externa efímera para que pudiera descargar Apache mediante una secuencia de comandos de inicio. Como las VMs de backend solo las usa un balanceador de carga de red interno de tipo pasarela, puedes quitar sus direcciones IP externas. Si quitas las direcciones IP externas, las VMs de backend no podrán acceder a Internet directamente.
Consola
En la consola de Google Cloud , ve a la página Instancias de VM.
Repite los pasos siguientes para cada VM de backend.
Haga clic en el nombre de la VM de backend, por ejemplo,
vm-a1
.Haz clic en
Editar.En la sección Interfaces de red, haz clic en la red.
En la lista IP externa, selecciona Ninguna y haz clic en Hecho.
Haz clic en Guardar.
gcloud
Para buscar la zona de una instancia (por ejemplo, si usas un grupo de instancias gestionado regional), ejecuta el siguiente comando para cada instancia y determina su zona. Sustituye
[SERVER-VM]
por el nombre de la VM que quieras buscar.gcloud compute instances list --filter="name=[SERVER-VM]"
Repite el siguiente paso con cada VM de backend. Sustituye
[SERVER-VM]
por el nombre de la VM y[ZONE]
por la zona de la VM.gcloud compute instances delete-access-config [SERVER-VM] \ --zone=[ZONE] \ --access-config-name=external-nat
API
Haz una solicitud POST
al método instances.deleteAccessConfig
de cada VM de backend. Sustituye vm-a1
por el nombre de la VM y us-west1-a
por la zona de la VM.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/us-west1-a/instances/vm-a1/deleteAccessConfig?accessConfig=external-nat&networkInterface=None
Usar una dirección IP interna reservada
Cuando creas máquinas virtuales de backend y grupos de instancias, la instancia de VM usa una dirección IPv4 o IPv6 interna efímera.
En los pasos siguientes se explica cómo convertir una dirección IPv4 o IPv6 interna en una dirección IPv4 o IPv6 interna estática y, a continuación, actualizar la instancia de VM para que use la dirección IP interna estática:
- Convertir una dirección IPv4 o IPv6 interna efímera en uso en una dirección estática.
- Cambia o asigna una dirección IPv6 interna a una instancia que ya exista.
También puedes seguir estos pasos para reservar una nueva dirección IPv4 o IPv6 interna estática y, a continuación, actualizar la instancia de VM para que use la dirección IP interna estática:
Reserva una dirección IPv4 o IPv6 interna estática nueva.
A diferencia de la reserva de IPv4 interna, la reserva de IPv6 interna no admite la reserva de una dirección IP específica de la subred. En su lugar, se asigna automáticamente un intervalo de direcciones IPv6 internas
/96
del intervalo de direcciones IPv6 internas/64
de la subred.Cambia o asigna una dirección IPv6 interna a una instancia que ya exista.
Para obtener más información, consulta Cómo reservar una dirección IP interna estática.
Aceptar el tráfico en todos los puertos
La regla de reenvío del balanceador de carga, no su servicio de backend, determina los puertos en los que el balanceador de carga acepta tráfico. Para obtener información sobre la finalidad de cada componente, consulta Componentes.
Cuando creaste la regla de reenvío de este balanceador de carga de ejemplo, configuraste los puertos 80
, 8008
, 8080
y 8088
. La secuencia de comandos de inicio que instala Apache también lo configura para aceptar conexiones HTTPS en los puertos 443
y 8443
.
Para admitir estos seis puertos, puede configurar la regla de reenvío para que acepte tráfico en todos los puertos. Con esta estrategia, también puedes configurar la regla o las reglas del cortafuegos que permiten las conexiones entrantes a las VMs de backend para que solo permitan determinados puertos.
En este procedimiento se explica cómo eliminar la regla de reenvío actual del balanceador de carga y crear una que acepte tráfico en todos los puertos.
Para obtener más información sobre cuándo usar esta configuración, consulta el artículo Balanceadores de carga de red internos de tipo pasarela y reglas de reenvío con una dirección IP común.
Consola
Eliminar una regla de reenvío y crear otra
En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en el balanceador de carga
be-ilb
y, a continuación, en Editar.Haz clic en Configuración de frontend.
Coloca el cursor sobre la regla de reenvío
10.1.2.9
y haz clic en Eliminar.Haz clic en Añadir IP y puerto de frontend.
En la sección IP de frontend y puerto nuevos, introduce la siguiente información y haz clic en Hecho:
- Nombre:
fr-ilb
- Subred:
lb-subnet
- IP interna:
ip-ilb
- Puertos: Todos.
- Nombre:
Comprueba que haya una marca de verificación azul junto a Configuración del frontend antes de continuar.
Haz clic en Revisar y finalizar y revisa los ajustes de configuración de tu balanceador de carga.
Haz clic en Crear.
gcloud
Elimina la regla de reenvío que ya tengas,
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Crea una regla de reenvío de sustitución con el mismo nombre cuya configuración de puerto utilice la palabra clave
ALL
. Los demás parámetros de la regla de reenvío no cambian.gcloud compute forwarding-rules create fr-ilb \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=ALL \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Elimina la regla de reenvío haciendo una solicitud DELETE
al método forwardingRules.delete
.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Crea la regla de reenvío haciendo una solicitud POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "allPorts": true, "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Probar el tráfico en todos los puertos configurados
Conéctate a la instancia de VM cliente y prueba las conexiones HTTP y HTTPS.
Conéctate a la VM cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Prueba la conectividad HTTP en los cuatro puertos:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Prueba la conectividad HTTPS en los puertos
443
y8443
. La marca--insecure
es obligatoria porque cada servidor Apache de la configuración de ejemplo usa un certificado autofirmado.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Observa que las solicitudes HTTP (en los cuatro puertos) y las solicitudes HTTPS (en ambos puertos) se distribuyen entre todas las VMs de backend.
Aceptar tráfico en varios puertos mediante dos reglas de reenvío
Cuando creaste la regla de reenvío de este balanceador de carga de ejemplo, configuraste los puertos 80
, 8008
, 8080
y 8088
. La secuencia de comandos de inicio que instala Apache también lo configura para aceptar conexiones HTTPS en los puertos 443
y 8443
.
Una estrategia alternativa a la de configurar una sola regla de reenvío para aceptar tráfico en todos los puertos es crear varias reglas de reenvío, cada una de las cuales admite cinco puertos o menos.
En este procedimiento se explica cómo sustituir la regla de reenvío del balanceador de carga de ejemplo por dos reglas de reenvío: una que gestione el tráfico de los puertos 80
, 8008
, 8080
y 8088
, y otra que gestione el tráfico de los puertos 443
y 8443
.
Para obtener más información sobre cuándo usar esta configuración, consulta el artículo Balanceadores de carga de red internos de tipo pasarela y reglas de reenvío con una dirección IP común.
Consola
En la Google Cloud consola, ve a la página Reglas de reenvío.
En la columna Nombre, haga clic en
fr-ilb
y, a continuación, en Eliminar.En la Google Cloud consola, ve a la página Balanceo de carga.
En la columna Nombre, haga clic en
be-ilb
.Haz clic en Editar.
Haz clic en Configuración de frontend.
Haz clic en Añadir IP y puerto de frontend.
En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Nombre, escribe
fr-ilb-http
. - En Subred, selecciona
lb-subnet
. - En Propósito de la IP interna, selecciona Compartida.
- En la lista Dirección IP, selecciona Crear dirección IP,
introduce la siguiente información y haz clic en Reservar:
- Nombre:
internal-10-1-2-99
- Dirección IP estática: Quiero elegir
- Dirección IP personalizada:
10.1.2.99
- Nombre:
- En Puertos, selecciona Varios y, en Números de puerto, introduce
80
,8008
,8080
y8088
. - Haz clic en Listo.
- En Nombre, escribe
Haz clic en Añadir IP y puerto de frontend.
En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Nombre, escribe
fr-ilb-https
. - En Subred, selecciona
lb-subnet
. - En Propósito de la IP interna, selecciona Compartida.
- En la lista Dirección IP, seleccione
internal-10-1-2-99
. - En Puertos, selecciona Varios y, en Números de puerto, introduce
443
y8443
. - Haz clic en Listo.
- En Nombre, escribe
Haz clic en Revisar y finalizar y revisa los ajustes de configuración de tu balanceador de carga.
Haz clic en Actualizar.
gcloud
Elimina la regla de reenvío que ya tengas,
fr-ilb
.gcloud compute forwarding-rules delete fr-ilb \ --region=us-west1
Crea una dirección IP interna estática (reservada) para
10.1.2.99
y asigna el valorSHARED_LOADBALANCER_VIP
a su marca--purpose
. La marca--purpose
es obligatoria para que dos reglas de reenvío internas puedan usar la misma dirección IP interna.gcloud compute addresses create internal-10-1-2-99 \ --region=us-west1 \ --subnet=lb-subnet \ --addresses=10.1.2.99 \ --purpose=SHARED_LOADBALANCER_VIP
- Crea dos reglas de reenvío de sustitución con los siguientes parámetros:
gcloud compute forwarding-rules create fr-ilb-http \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=80,8008,8080,8088 \ --backend-service=be-ilb \ --backend-service-region=us-west1
gcloud compute forwarding-rules create fr-ilb-https \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=lb-subnet \ --address=10.1.2.99 \ --ip-protocol=TCP \ --ports=443,8443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Elimina la regla de reenvío haciendo una solicitud DELETE
al método forwardingRules.delete
.
DELETE https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules/fr-ilb
Crea una dirección IP interna estática (reservada) para 10.1.2.99
y asigna el valor SHARED_LOADBALANCER_VIP
a su propiedad "purpose" (propósito) mediante una solicitud POST
al método addresses.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/addresses { "name": "internal-10-1-2-99", "address": "10.1.2.99", "prefixLength": 32, "addressType": INTERNAL, "purpose": SHARED_LOADBALANCER_VIP, "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet" }
Crea dos reglas de reenvío haciendo dos solicitudes POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-http", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "80", "8008", "8080", "8088" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
{ "name": "fr-ilb-https", "IPAddress": "10.1.2.99", "IPProtocol": "TCP", "ports": [ "443", "8443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Probar el tráfico en una configuración de varios puertos
Conéctate a la instancia de VM cliente y prueba las conexiones HTTP y HTTPS.
Conéctate a la VM cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Prueba la conectividad HTTP en los cuatro puertos:
curl http://10.1.2.99 curl http://10.1.2.99:8008 curl http://10.1.2.99:8080 curl http://10.1.2.99:8088
Prueba la conectividad HTTPS en los puertos
443
y8443
. La marca--insecure
es obligatoria porque cada servidor Apache de la configuración de ejemplo usa un certificado autofirmado.curl https://10.1.2.99 --insecure curl https://10.1.2.99:8443 --insecure
Observa que las solicitudes HTTP (en los cuatro puertos) y las solicitudes HTTPS (en ambos puertos) se distribuyen entre todas las VMs de backend.
Usar la afinidad de sesión
La configuración de ejemplo crea un servicio de backend sin afinidad de sesión.
En este procedimiento se muestra cómo actualizar el servicio de backend del balanceador de carga de red interno de ejemplo para que use la afinidad de sesión basada en un hash creado a partir de las direcciones IP del cliente y la dirección IP de la regla de reenvío interna del balanceador de carga.
Para ver los tipos de afinidad de sesión admitidos, consulta las opciones de afinidad de sesión.
Consola
En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en be-ilb (el nombre del servicio de backend que has creado para este ejemplo) y, a continuación, en Editar.
En la página Editar balanceador de carga de red de paso a través interno, haga clic en Configuración de backend.
En la lista Afinidad de sesión, seleccione IP de cliente.
Haz clic en Actualizar.
gcloud
Usa el siguiente comando gcloud
para actualizar el servicio de backend be-ilb
y especificar la afinidad de sesión de la IP del cliente:
gcloud compute backend-services update be-ilb \ --region=us-west1 \ --session-affinity CLIENT_IP
API
Realiza una solicitud PATCH
al método regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "sessionAffinity": "CLIENT_IP" }
Configurar una política de seguimiento de conexiones
En esta sección se explica cómo actualizar el servicio de backend para cambiar la política de seguimiento de conexiones predeterminada del balanceador de carga.
Una política de seguimiento de conexiones incluye los siguientes ajustes:
- Modo de seguimiento
- Persistencia de la conexión en back-ends incorrectos
- Tiempo de espera de inactividad
gcloud
Usa el siguiente comando gcloud compute
backend-services
para actualizar la política de seguimiento de conexiones del servicio backend:
gcloud compute backend-services update BACKEND_SERVICE \ --region=REGION \ --tracking-mode=TRACKING_MODE \ --connection-persistence-on-unhealthy-backends=CONNECTION_PERSISTENCE_BEHAVIOR \ --idle-timeout-sec=IDLE_TIMEOUT_VALUE
Sustituye los marcadores de posición por valores válidos:
BACKEND_SERVICE
: el servicio de backend que estás actualizandoREGION
: la región del servicio backend que vas a actualizarTRACKING_MODE
: el modo de seguimiento de conexiones que se va a usar para los paquetes entrantes. Para ver la lista de valores admitidos, consulta Modo de seguimiento.CONNECTION_PERSISTENCE_BEHAVIOR
: el comportamiento de persistencia de la conexión cuando los back-ends no están en buen estado. Para ver la lista de valores admitidos, consulta Persistencia de la conexión en back-ends en mal estado.IDLE_TIMEOUT_VALUE
: número de segundos que debe mantenerse una entrada de la tabla de seguimiento de conexiones después de que el balanceador de carga procese el último paquete que coincida con la entrada.Solo puede modificar esta propiedad cuando el seguimiento de la conexión sea inferior a 5 tuplas (es decir, cuando la afinidad de sesión esté configurada como
CLIENT_IP
oCLIENT_IP_PROTO
, y el modo de seguimiento seaPER_SESSION
).El valor predeterminado es 600 segundos (10 minutos). El valor máximo configurable del tiempo de espera inactivo es de 57.600 segundos (16 horas).
Usar la afinidad zonal
En esta sección se explica cómo configurar un balanceador de carga de red de paso a través interno para habilitar la afinidad zonal en el servicio de backend del balanceador de carga. De forma predeterminada, la afinidad zonal está inhabilitada. Para obtener más información, consulta Afinidad zonal para balanceadores de carga de red de paso a través internos.
Usa el siguiente comando para configurar la opción de afinidad zonal
ZONAL_AFFINITY_STAY_WITHIN_ZONE
. Para obtener más información sobre cómo funciona esta opción, consulta Cómo funcionaZONAL_AFFINITY_STAY_WITHIN_ZONE
.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_STAY_WITHIN_ZONE \ --region=us-west1
Usa el siguiente comando para configurar la afinidad de zona de
ZONAL_AFFINITY_SPILL_CROSS_ZONE
con la proporción de desbordamiento0.0
predeterminada. Para obtener más información sobre cómo funciona esta opción, consulta las secciones Cómo funcionanZONAL_AFFINITY_SPILL_CROSS_ZONE
y la proporción de desbordamiento y Proporción de desbordamiento cero.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --region=us-west1
Usa el siguiente comando para configurar la
ZONAL_AFFINITY_SPILL_CROSS_ZONE
afinidad zonal con una proporción de desbordamiento del 30 %. Para obtener más información sobre cómo funciona esta opción, consulta las secciones Cómo funcionanZONAL_AFFINITY_SPILL_CROSS_ZONE
y la proporción de desbordamiento y Proporción de desbordamiento distinta de cero.gcloud beta compute backend-services update be-ilb \ --zonal-affinity-spillover=ZONAL_AFFINITY_SPILL_CROSS_ZONE \ --zonal-affinity-spillover-ratio=0.3 \ --region=us-west1
Crear una regla de reenvío en otra subred
En este procedimiento se crea una segunda dirección IP y una regla de reenvío en una subred diferente para demostrar que puedes crear varias reglas de reenvío para un balanceador de carga de red interno de tipo pasarela. La región de la regla de reenvío debe coincidir con la del servicio de backend.
Según las reglas de cortafuegos, los clientes de cualquier subred de la región pueden ponerse en contacto con la dirección IP del balanceador de carga de red interno de tipo pasarela.
Consola
Añade la segunda subred
En la Google Cloud consola, ve a la página Redes de VPC.
Haz clic en Crear red VPC.
Haz clic en
lb-network
.En la sección Subredes, haga lo siguiente:
- Haz clic en Añadir subred.
- En la sección Nueva subred, introduce la siguiente información:
- Nombre:
second-subnet
- Región:
us-west1
- Intervalo de direcciones IP:
10.5.6.0/24
- Nombre:
- Haz clic en Añadir.
Añadir la segunda regla de reenvío
En la Google Cloud consola, ve a la página Balanceo de carga.
Haz clic en el balanceador de carga
be-ilb
y, a continuación, en Editar.Haz clic en Configuración de frontend.
Haz clic en Añadir IP y puerto de frontend.
En la sección IP de frontend y puerto nuevos, define los siguientes campos y haz clic en Hecho:
- Nombre:
fr-ilb-2
- Versión de IP: IPv4
- Subred:
second-subnet
- IP interna:
ip-ilb
- Puertos:
80
y443
- Nombre:
Comprueba que haya una marca de verificación azul junto a Configuración del frontend antes de continuar.
Haz clic en Revisar y finalizar y revisa los ajustes de configuración de tu balanceador de carga.
Haz clic en Crear.
gcloud
Crea una segunda subred en la red
lb-network
de la regiónus-west1
:gcloud compute networks subnets create second-subnet \ --network=lb-network \ --range=10.5.6.0/24 \ --region=us-west1
Crea una segunda regla de reenvío para los puertos 80 y 443. Los demás parámetros de esta regla, como la dirección IP y el servicio de backend, son los mismos que los de la regla de reenvío principal,
fr-ilb
.gcloud compute forwarding-rules create fr-ilb-2 \ --region=us-west1 \ --load-balancing-scheme=internal \ --network=lb-network \ --subnet=second-subnet \ --address=10.5.6.99 \ --ip-protocol=TCP \ --ports=80,443 \ --backend-service=be-ilb \ --backend-service-region=us-west1
API
Realiza solicitudes POST
al método subnetworks.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks { "name": "second-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "ipCidrRange": "10.5.6.0/24", "privateIpGoogleAccess": false }
Crea la regla de reenvío haciendo una solicitud POST
al método forwardingRules.insert
.
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/forwardingRules { "name": "fr-ilb-2", "IPAddress": "10.5.6.99", "IPProtocol": "TCP", "ports": [ "80", "443" ], "loadBalancingScheme": "INTERNAL", "subnetwork": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/subnetworks/lb-subnet", "network": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/global/networks/lb-network", "backendService": "https://www.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb", "networkTier": "PREMIUM" }
Probar la nueva regla de reenvío
Conéctate a la instancia de VM cliente y prueba las conexiones HTTP y HTTPS a las direcciones IP.
Conéctate a la VM cliente:
gcloud compute ssh vm-client --zone=us-west1-a
Prueba la conectividad HTTP a las direcciones IP:
curl http://10.1.2.99 curl http://10.5.6.99
Prueba la conectividad HTTPS. Es necesario usar
--insecure
porque la configuración del servidor Apache en la configuración de ejemplo usa certificados autofirmados.curl https://10.1.2.99 --insecure curl https://10.5.6.99 --insecure
Observa que todas las VMs de backend gestionan las solicitudes, independientemente del protocolo (HTTP o HTTPS) o de la dirección IP que se utilice.
Usar subconjuntos de backend
La configuración de ejemplo crea un servicio de backend sin subconjuntos.
En este procedimiento se muestra cómo habilitar la creación de subconjuntos en el servicio de backend del balanceador de carga de red interno de ejemplo para que la implementación pueda escalarse a un mayor número de instancias de backend.
Solo debes habilitar el subconjunto si necesitas admitir más de 250 VMs de backend en un único balanceador de carga.
Para obtener más información sobre este caso práctico, consulta la sección sobre subconjuntos de backend.
gcloud
Usa el siguiente comando gcloud
para actualizar el servicio de backend be-ilb
y especificar la política de subconjuntos:
gcloud compute backend-services update be-ilb \ --subsetting-policy=CONSISTENT_HASH_SUBSETTING
API
Realiza una solicitud PATCH
al método regionBackendServices/patch
.
PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/us-west1/backendServices/be-ilb { "subsetting": { "policy": CONSISTENT_HASH_SUBSETTING } }
Crear un balanceador de carga para la replicación de paquetes
Replicación de paquetes te permite copiar y recoger datos de paquetes de instancias específicas de una VPC. Los datos recogidos pueden ayudarte a detectar amenazas de seguridad y monitorizar el rendimiento de las aplicaciones.
La replicación de paquetes requiere un balanceador de carga de red de paso a través interno para balancear el tráfico a un grupo de instancias de destinos de recopiladores. Para crear un balanceador de carga de red de transferencia interno para la creación de réplicas de paquetes, sigue estos pasos.
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 Load balancer name (Nombre del balanceador de carga), introduce un nombre.
- En Región, selecciona la región de las instancias de VM en las que quieras replicar paquetes.
- En Red, seleccione la red en la que quiera replicar los paquetes.
- Haz clic en Configuración de backend.
- En la sección Nuevo backend, en Grupo de instancias, selecciona el grupo de instancias al que quieras reenviar los paquetes.
- En la lista Comprobación del estado, selecciona Crear comprobación del estado,
introduce la siguiente información y haz clic en Guardar:
- En Name (Nombre), introduce un nombre para la comprobación del estado.
- En Protocolo, selecciona
HTTP
. - En Puerto, escribe
80
.
- Haz clic en Configuración de frontend.
- En la sección IP de frontend y puerto nuevos, haga lo siguiente:
- En Name (Nombre), escribe un nombre.
- En Subred, selecciona una subred de la misma región que las instancias que quieras replicar.
- En Puertos, selecciona Todos.
- Haga clic en Configuraciones avanzadas y seleccione la casilla Habilitar este balanceador de carga en la replicación de paquetes.
- Haz clic en Listo.
- Haz clic en Crear.
gcloud
Crea una comprobación del estado de HTTP regional para probar la conectividad HTTP con un grupo de instancias en el puerto 80:
gcloud compute health-checks create http HEALTH_CHECK_NAME \ --region=REGION \ --port=80
Haz los cambios siguientes:
HEALTH_CHECK_NAME
: el nombre de la comprobación del estado.REGION
: la región de las instancias de VM para las que quieres replicar paquetes.
Crea un servicio de backend para el tráfico HTTP:
gcloud compute backend-services create COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --health-checks-region=REGION \ --health-checks=HEALTH_CHECK_NAME \ --load-balancing-scheme=internal \ --protocol=tcp
Haz los cambios siguientes:
COLLECTOR_BACKEND_SERVICE
: el nombre del servicio de backend.REGION
: la región de las instancias de VM en la que quieres replicar paquetes.HEALTH_CHECK_NAME
: el nombre de la comprobación del estado.
Añade un grupo de instancias al servicio de backend:
gcloud compute backend-services add-backend COLLECTOR_BACKEND_SERVICE \ --region=REGION \ --instance-group=INSTANCE_GROUP \ --instance-group-zone=ZONE
Haz los cambios siguientes:
COLLECTOR_BACKEND_SERVICE
: el nombre del servicio de backend.REGION
: la región del grupo de instancias.INSTANCE_GROUP
: el nombre del grupo de instancias.ZONE
: la zona del grupo de instancias.
Crea una regla de reenvío para el servicio de backend:
gcloud compute forwarding-rules create FORWARDING_RULE_NAME \ --region=REGION \ --network=NETWORK \ --subnet=SUBNET \ --backend-service=COLLECTOR_BACKEND_SERVICE \ --load-balancing-scheme=internal \ --ip-protocol=TCP \ --ports=all \ --is-mirroring-collector
Haz los cambios siguientes:
FORWARDING_RULE_NAME
: el nombre de la regla de reenvío.REGION
: la región de la regla de reenvío.NETWORK
: la red de la regla de reenvío.SUBNET
: una subred de la región de las VMs en la que quieras replicar paquetes.COLLECTOR_BACKEND_SERVICE
: el servicio de backend de este balanceador de carga.
Siguientes pasos
- Consulta la descripción general del balanceador de carga de red de paso a través interno para obtener información básica importante.
- Consulta Conceptos de conmutación por error para los balanceadores de carga de red de paso a través internos para obtener información importante sobre la conmutación por error.
- Consulta Balanceo de carga interno y nombres de DNS para ver las opciones de nombres de DNS disponibles que puede usar tu balanceador de carga.
- Consulta Configurar la conmutación por error de los balanceadores de carga de red de paso a través internos para ver los pasos de configuración y un ejemplo de configuración de conmutación por error de un balanceador de carga de red de paso a través interno.
- Consulta Registro y monitorización del balanceador de carga de red de paso a través interno para obtener información sobre cómo configurar el registro y la monitorización de los balanceadores de carga de red de paso a través internos.
- Consulta Balanceadores de carga de red de paso a través internos y redes conectadas para obtener información sobre cómo acceder a balanceadores de carga de red de paso a través internos desde redes peer conectadas a tu red de VPC.
- Consulta el artículo Solucionar problemas de balanceadores de carga de red de paso a través internos para obtener información sobre cómo solucionar problemas con tu balanceador de carga de red de paso a través interno.
- Limpiar la configuración del balanceador de carga.
Apéndice: Introducción a los scripts de Bash de IPv6
En esta sección se ofrece una breve descripción de los diferentes comandos de red relacionados con la secuencia de comandos de inicio de Bash que se usa para instalar un servidor TCP IPv6 en las VMs de backend. No es necesario que vuelvas a seguir estos pasos. Solo se mencionan aquí para proporcionar contexto y facilitar la comprensión.
Muestra todas las rutas IPv6.
ip -6 route show table all
El resultado es el siguiente:
fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 62sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
En el resultado del paso anterior, identifica lo siguiente:
- Dirección IPv6 local de enlace (empieza por fe80::/10): en el resultado de ejemplo, la dirección local de enlace es fe80::57:2ff:fe36:ffbe. Esta dirección de enlace local se usa en la ruta predeterminada definida en la tabla de enrutamiento 1. Esta ruta predeterminada se crea en el paso 2.
- Subred /64: se hace referencia a esta subred en la regla de enrutamiento de la política basada en la fuente del paso 3.
Añade una ruta predeterminada personalizada en la tabla de enrutamiento 1.
El siguiente comando envía paquetes a la pasarela mediante la interfaz de red llamada
ens4
.sudo ip route add default via GATEWAY_ADDRESS dev ens4 table 1
Después de ejecutar este comando, se añade una ruta predeterminada a una tabla de enrutamiento personalizada (tabla 1), que apunta a la pasarela
fe80::57:2ff:fe36:ffbe
a través de la interfaz ens4.Si volvieras a ejecutar el comando
ip -6 route show table all
, el resultado sería el siguiente:default via fe80::57:2ff:fe36:ffbe dev ens4 table 1 metric 1024 pref medium fd20:307:120c:2000::/64 via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec pref medium fe80::/64 dev ens4 proto kernel metric 256 pref medium default via fe80::57:2ff:fe36:ffbe dev ens4 proto ra metric 100 expires 89sec mtu 1460 pref medium local ::1 dev lo table local proto kernel metric 0 pref medium local fd20:307:120c:2000:0:1::/96 dev ens4 table local proto 66 metric 1024 pref medium local fd20:307:120c:2000:0:b:: dev ens4 table local proto kernel metric 0 pref medium local fe80::56:24ff:feb1:59b3 dev ens4 table local proto kernel metric 0 pref medium multicast ff00::/8 dev ens4 table local proto kernel metric 256 pref medium
Añade una regla de enrutamiento de políticas basada en la fuente.
El siguiente comando añade una regla para enrutar todos los paquetes salientes que procedan de una subred especificada. Si la dirección de origen coincide con la subred, el sistema usa la ruta predeterminada definida en la tabla 1 para reenviar el tráfico.
sudo ip -6 rule add from SUBNET_RANGE table 1
Para ver la lista de reglas de enrutamiento de políticas, ejecuta el siguiente comando.
ip -6 rule show
El resultado es el siguiente:
0: from all lookup local 32765: from fd20:307:120c:2000::/64 lookup 1 32766: from all lookup main
La línea con
from fd20:... lookup 1
es la regla que has añadido, que indica al kernel que use la tabla de enrutamiento 1 para el tráfico procedente de esa subred.Permite que el servidor se enlace a una dirección IPv6 no local, es decir, la dirección IP virtual del balanceador de carga.
sudo sysctl -w net.ipv6.ip_nonlocal_bind=1