Compila la conexión a Internet para VM privadas

En este documento, se describen las opciones para conectarse desde y hacia Internet mediante recursos de Compute Engine que tienen direcciones IP privadas. Esto es útil para los desarrolladores que crean servicios de Google Cloud y los administradores de red de los entornos de Google Cloud.

En este instructivo, suponemos que estás familiarizado con la implementación de VPC, con Compute Engine y con redes de TCP/IP básicas.

Objetivos

  • Obtén más información sobre las opciones disponibles para conectarte entre VM privadas por fuera de su VPC.
  • Crea una instancia de Identity-Aware Proxy (IAP) de túneles de TCP que sea adecuada para servicios interactivos, como SSH.
  • Crea una instancia de Cloud NAT para permitir que las VM realicen conexiones salientes a Internet.
  • Configura un balanceador de cargas de HTTP para admitir conexiones entrantes desde Internet a tus VM.

Costos

En este instructivo, se usan componentes facturables de Google Cloud, que incluyen los siguientes:

Usa la calculadora de precios para generar una estimación de los costos según el uso previsto. Calculamos que el total para ejecutar este instructivo es inferior a $5 por día.

Antes de comenzar

  1. Accede a tu cuenta de Google Cloud. Si eres nuevo en Google Cloud, crea una cuenta para evaluar el rendimiento de nuestros productos en situaciones reales. Los clientes nuevos también obtienen $300 en créditos gratuitos para ejecutar, probar y, además, implementar cargas de trabajo.
  2. En la página del selector de proyectos de Google Cloud Console, selecciona o crea un proyecto de Google Cloud.

    Ir al selector de proyecto

  3. Asegúrate de que la facturación esté habilitada para tu proyecto de Cloud. Descubre cómo confirmar que tienes habilitada la facturación en un proyecto.

Introducción

Las direcciones IP privadas proporcionan una serie de ventajas sobre las direcciones IP públicas (externas), incluidas las que se detallan a continuación:

  • Superficie de ataque reducida. Quitar direcciones IP externas de las VM dificulta a los atacantes alcanzar a las VM y explotar posibles vulnerabilidades.
  • Mayor flexibilidad. Agregar una capa de abstracción, como un balanceador de cargas o un servicio de NAT, permite una entrega de servicios más confiable y flexible, en comparación con las direcciones IP externas estáticas.

En esta solución, se analizan tres situaciones, como se describe en la tabla siguiente:

Interactivo Recuperación Activo
Se inicia una conexión SSH desde un host remoto directamente a una VM con IAP para TCP.

Ejemplo: administración remota mediante SSH o RDP

Una VM inicia una conexión a un host externo en Internet mediante Cloud NAT.

Ejemplo: actualizaciones del SO y API externas

Un host remoto inicia una conexión a una VM a través de un balanceador de cargas global de Google Cloud.

Ejemplo: frontends de aplicaciones, WordPress

Algunos entornos pueden implicar solo una de estas situaciones. Sin embargo, muchos entornos requieren todas las situaciones, que es totalmente compatible con Google Cloud.

En las secciones siguientes, se describe un entorno multirregional con un servicio de balanceo de cargas de HTTP respaldado por dos VM en dos regiones. Estas VM usan Cloud NAT para las comunicaciones salientes. Para la administración, se puede acceder a las VM a través de SSH en túnel a través de IAP.

En el diagrama siguiente, se proporciona una descripción general de los tres casos de uso y los componentes relevantes.

Arquitectura de la solución que muestra el flujo desde el cliente a través del balanceador de cargas hasta las instancias de VM, Cloud NAT para el acceso desde las instancias hacia Internet e IAP para permitir el acceso SSH directo desde un cliente hacia las instancias.

Crea instancias de VM

Para comenzar con el instructivo, crearás un total de cuatro instancias de máquina virtual (VM): dos instancias por región en dos regiones diferentes. Se otorga a todas las instancias el mismo rótulo identificador, que luego la regla de firewall usa para permitir que el tráfico entrante llegue a tus instancias.

En el siguiente diagrama, se muestran las instancias de VM y los grupos de instancias que creaste distribuidos en dos zonas.

Arquitectura de la solución en la que se destacan las cuatro instancias de VM en 2 zonas.

La secuencia de comandos de inicio que agregas a cada instancia instala Apache y crea una página principal única para cada instancia.

El procedimiento incluye instrucciones para usar Cloud Console y los comandos de gcloud. La manera más sencilla de usar los comandos de gcloud es con Cloud Shell.

Console

  1. En Cloud Console, ve a la página Instancias de VM:

    IR A LA PÁGINA INSTANCIAS DE VM

  2. Haz clic en Crear instancia.

  3. Establece el Nombre como www-1.

  4. Establece la Zona en us-central1-b.

  5. Haz clic en Administración, seguridad, discos, redes, instancia única.

  6. Haz clic en Redes y aplica la siguiente configuración:

    • Para el tráfico HTTP, en el cuadro Etiquetas de red, ingresa http-tag.
    • En Interfaces de red, haz clic en .
    • En IP externa, selecciona Ninguna.
  7. Haz clic en Administración y configura la Secuencia de comandos de inicio de la siguiente manera:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 1</h1></body></html>' | sudo tee /var/www/html/index.html
    
  8. Haz clic en Crear.

  9. Crea www-2 con la misma configuración, excepto que debes configurar la Secuencia de comandos de inicio de la siguiente manera:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 2<h1></body></html>' | sudo tee /var/www/html/index.html
    
  10. Crea www-3 con la misma configuración, excepto que debes configurar la Zona en europe-west1-b y la Secuencia de comandos de inicio de la siguiente manera:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 3</h1></body></html>' | sudo tee /var/www/html/index.html
    
  11. Crea www-4 con la misma configuración, excepto que debes configurar la Zona en europe-west1-b y la Secuencia de comandos de inicio de la siguiente manera:

    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo a2ensite default-ssl
    sudo a2enmod ssl
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>server 4</h1></body></html>' | sudo tee /var/www/html/index.html
    

gcloud

  1. Abre Cloud Shell:

    Abrir Cloud Shell

  2. Crea una instancia llamada www-1 en us-central1-b con una secuencia de comandos de inicio básica:

    gcloud compute instances create www-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-1</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  3. Crea una instancia con el nombre www-2 en us-central1-b:

    gcloud compute instances create www-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone us-central1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-2</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  4. Crea una instancia con el nombre www-3, esta vez en europe-west1-b:

    gcloud compute instances create www-3 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-3</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    
  5. Crea una instancia con el nombre www-4, también en europe-west1-b:

    gcloud compute instances create www-4 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --zone europe-west1-b \
        --tags http-tag \
        --network-interface=no-address \
        --metadata startup-script="#! /bin/bash
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>www-4</h1></body></html>' | tee /var/www/html/index.html
    EOF"
    

Terraform

  1. Abre Cloud Shell:

    Abrir Cloud Shell

  2. Clona el repositorio desde GitHub:

    git clone https://github.com/GoogleCloudPlatform/gce-public-connectivity-terraform

  3. Cambia el directorio de trabajo por el directorio del repositorio:

    cd iap

  4. Instala Terraform.

  5. Reemplaza [YOUR-ORGANIZATION-NAME] en el archivo scripts/set_env_vars.sh por el nombre de tu organización de Google Cloud.

  6. Establece las variables de entorno:

    source scripts/set_env_vars.sh

  7. Aplica la configuración de Terraform:

    terraform apply

Configura túneles IAP para interactuar con las instancias

Para acceder a instancias de VM, debes conectarte a las instancias con herramientas como SSH o RDP. En la configuración que crearás en este instructivo, no puedes conectarte directamente a las instancias. Sin embargo, puedes usar el redireccionamiento de TCP en IAP, que permite el acceso remoto a estos patrones interactivos.

Para este instructivo, debes usar SSH.

En esta sección, harás lo siguiente:

  1. Te conectarás a una instancia de Compute Engine mediante el túnel IAP.
  2. Agregarás un segundo usuario con permiso de túnel IAP en IAM.

En el diagrama siguiente, se describe la arquitectura que se compila en esta sección. Las zonas grises se analizan en otras secciones de este instructivo.

Arquitectura de la solución en la que se muestra cómo IAP proporciona acceso SSH entre un cliente y las instancias.

Limitaciones de IAP

  • Ancho de banda: La característica de redireccionamiento de IAP de TCP no se diseñó para la transferencia masiva de datos. IAP se reserva el derecho de limitar la cantidad de usuarios que se consideran que abusan de este servicio.
  • Duración de la conexión: IAP no desconectará las sesiones activas, a menos que sea necesario para tareas de mantenimiento.
  • Protocolo: IAP de TCP no es compatible con UDP.

Crea reglas de firewall para permitir la creación de túneles

A fin de que puedas conectarte a tus instancias con SSH, debes abrir un puerto adecuado en firewall. Las conexiones IAP provienen de un conjunto específico de direcciones IP (35.235.240.0/20). Por lo tanto, puedes limitar la regla a este rango de CIDR.

Console

  1. En Cloud Console, ve a la página Firewalls:

    IR A LA PÁGINA FIREWALLS

  2. Haz clic en Crear regla de firewall.

  3. Establece el Nombre como allow-ssh-from-iap.

  4. Deja Red de VPC como default.

  5. En Destinos, selecciona Rótulos de identificación de destino especificados.

  6. Configura los Rótulos identificadores de destino como http-tag.

  7. Deja el Filtro de fuente configurado en los Rangos de IP.

  8. Establece los Rangos de IP de origen en 35.235.240.0/20.

  9. Establece los Protocolos y puertos permitidos en tcp:22.

  10. Haz clic en Crear.

    La regla de firewall nueva puede tardar unos minutos en aparecer en la consola.

gcloud

  • Crea una regla de firewall con el nombre allow-ssh-from-iap:

    gcloud compute firewall-rules create allow-ssh-from-iap \
        --source-ranges 35.235.240.0/20 \
        --target-tags http-tag \
        --allow tcp:22
    

Terraform

  1. Copia el archivo de Terraform con las reglas de firewall en el directorio actual:

    cp iap/vpc_firewall_rules.tf .

  2. Aplica la configuración de Terraform:

    terraform apply

Prueba los túneles

  • En Cloud Shell, conéctate a la instancia www-1 con IAP:

    gcloud compute ssh www-1 \
        --zone us-central1-b \
        --tunnel-through-iap
    

Si la conexión se establece de forma correcta, acabas de crear una sesión SSH que se conecta a través de un túnel por IAP directo a tu VM privada.

Otorga acceso a usuarios adicionales

IAP usa tus funciones y permisos del proyecto existentes cuando te conectas a instancias de VM. De forma predeterminada, los propietarios de las instancias son los únicos usuarios que tienen la función Usuario de túnel protegido con IAP. Si deseas permitir que otros usuarios tengan acceso a tus VM mediante túneles IAP, debes otorgarles esta función.

  1. En Cloud Console, ve a Seguridad (Security) > Identity-Aware Proxy (Identity-Aware Proxy):

    Opción para IAP en la página de seguridad de Cloud Console.

    Si ves un mensaje que te indica que necesitas configurar la pantalla de consentimiento de OAuth, ignora el mensaje; no es relevante para IAP de TCP.

  2. Selecciona la pestaña Recursos de SSH y TCP.

  3. Selecciona las VM que creaste:

    Consola que muestra las 4 instancias seleccionadas.

  4. A la derecha, haz clic en Agregar miembro.

  5. Agrega los usuarios a los que deseas otorgar permisos, selecciona la función Usuario de túnel protegido con IAP y haz clic en Guardar:

    Cuadro de diálogo “Agregar miembros” con un nombre de miembro nuevo agregado y la función “Usuario de túnel protegido con IAP” seleccionada.

Resumen

Ahora puedes conectarte a tus instancias mediante SSH para administrarlas o solucionar problemas.

Muchas aplicaciones necesitan realizar conexiones salientes para descargar parches, conectarse con socios o descargar recursos. En la siguiente sección, configurarás Cloud NAT para permitir que tus VM alcancen estos recursos.

Implementa Cloud NAT para la recuperación

El servicio Cloud NAT permite que las instancias de VM de Google Cloud que no tienen direcciones IP externas se conecten a Internet. Cloud NAT implementa NAT de salida junto con una ruta predeterminada para permitir que tus instancias lleguen a Internet. Este no implementa NAT de entrada. Los hosts fuera de tu red de VPC pueden responder solo a las conexiones establecidas que iniciaron tus instancias; no pueden iniciar sus propias conexiones a tus instancias con Cloud NAT.

Cloud NAT es un recurso regional. Puedes configurarlo para permitir el tráfico de todos los rangos de direcciones IP principales y secundarios de las subredes de una región. También puedes configurarlo para que se aplique solo a algunos de esos rangos.

En esta sección, configurarás una puerta de enlace de Cloud NAT en cada región que usaste con anterioridad. En el diagrama siguiente, se describe la arquitectura que se compila en esta sección. Las zonas grises se analizan en otras secciones de este instructivo.

Arquitectura de la solución que muestra instancias de Cloud NAT entre Internet y las instancias.

Crea una configuración de NAT con Cloud Router

Debes crear la instancia de Cloud Router en la misma región que las instancias que necesitan usar Cloud NAT. Cloud NAT solo se usa para colocar información de NAT en las VM; no se usa como parte de la puerta de enlace de Cloud NAT real.

Esta configuración permite a todas las instancias de la región usar Cloud NAT para todos los rangos de IP principales y de IP de alias. También asigna de forma automática las direcciones IP externas de la puerta de enlace NAT. Para obtener más opciones, consulta la documentación de gcloud compute routers.

Console

  1. Ve a la página Cloud NAT:

    IR A LA PÁGINA CLOUD NAT

  2. Haz clic en Comenzar o Crear puerta de enlace de NAT.

  3. Establece el Nombre de puerta de enlace en nat-config.

  4. Establece la red de VPC en default.

  5. Establece la Región en us-central1.

  6. En Cloud Router, selecciona Crear router nuevo y, luego, haz lo siguiente:

    • Establece el Nombre como nat-router-us-central1.
    • Haz clic en Crear.
  7. Haz clic en Crear.

  8. Repite el procedimiento, pero sustituye estos valores:

    • Nombre: nat-router-europe-west1
    • Región:: europe-west1

gcloud

  1. Crea instancias de Cloud Router en cada región:

    gcloud compute routers create nat-router-us-central1 \
        --network default \
        --region us-central1
    
    gcloud compute routers create nat-router-europe-west1 \
        --network default \
        --region europe-west1
    
  2. Configura los routers de Cloud NAT:

    gcloud compute routers nats create nat-config \
        --router-region us-central1 \
        --router nat-router-us-central1 \
        --nat-all-subnet-ip-ranges \
         --auto-allocate-nat-external-ips
    
    gcloud compute routers nats create nat-config \
        --router-region europe-west1 \
        --router nat-router-europe-west1 \
        --nat-all-subnet-ip-ranges \
        --auto-allocate-nat-external-ips
    

Terraform

  1. Copia el archivo de configuración de NAT de Terraform en el directorio actual:

    cp nat/vpc_nat_gateways.tf .

  2. Aplica la configuración de Terraform:

    terraform apply

Prueba la configuración de Cloud NAT

Ahora puedes probar que estás habilitado para realizar solicitudes de salida de tus instancias de VM a Internet.

  1. Espera hasta 3 minutos para que la configuración de NAT se propague a la VM.
  2. En Cloud Shell, conéctate a tu instancia mediante el túnel que creaste:

    gcloud beta compute ssh www-1 --tunnel-through-iap
    
  3. Cuando accedas a la instancia, usa el comando de curl para realizar una solicitud de salida:

    curl example.com
    

    Verás el siguiente resultado:

    <html>
    <head>
    <title>Example Domain</title>
    ...
    ...
    ...
    </head>
    
    <body>
    <div>
        <h1>Example Domain</h1>
        <p>This domain is established to be used for illustrative examples in documents.
            You may use this domain in examples without prior coordination or asking for
            permission.
        </p>
        <p><a href="http://www.iana.org/domains/example">More information...</a></p>
    </div>
    </body>
    </html>
    
    

Si el comando se ejecuta de forma correcta, has validado que tus VM pueden conectarse a Internet mediante Cloud NAT.

Resumen

Ahora, tus instancias pueden realizar conexiones salientes para descargar parches y recursos, o conectarse con socios.

En la siguiente sección, agregarás el balanceo de cargas a la implementación y lo configurarás para que los clientes remotos puedan iniciar solicitudes a tus servidores.

Crea un servicio de balanceo de cargas HTTP para la entrega

Usar Cloud Load Balancing para tu aplicación tiene muchas ventajas. Puede proporcionar balanceo de cargas sin interrupciones y escalable para más de un millón de consultas por segundo. También puede descargar la sobrecarga de SSL de tus VM, enrutar consultas a la mejor región para tus usuarios según la ubicación y disponibilidad, y admitir protocolos modernos, como HTTP/2 y QUIC.

Para este instructivo, puedes aprovechar otra función clave: proxi de conexión IP Anycast global. Esta característica proporciona una dirección IP pública única que finaliza en el perímetro distribuido de forma global de Google. Luego, los clientes pueden conectarse a los recursos alojados en direcciones IP privadas en cualquier parte de Google Cloud. Esta configuración ayuda a proteger las instancias de ataques de DSD y ataques directos. También se habilitan funciones, como Google Cloud Armor, para mayor seguridad.

En esta sección del instructivo, haz lo siguiente:

  1. Crea una regla de firewall para permitir el acceso desde los balanceadores de cargas.
  2. Asigna direcciones IPv4 y, también, IPv6 estáticas y globales para el balanceador de cargas.
  3. Crea un grupo de instancias para tus instancias.
  4. Puedes empezar a enviar tráfico a tus instancias.

En el diagrama siguiente, se describe la arquitectura que se compila en esta sección. Las zonas grises se analizan en otras secciones de este instructivo.

Arquitectura en la que se destacan 4 instancias en 2 grupos de instancias.

Abre el firewall

La siguiente tarea es crear una regla de firewall para permitir el tráfico de los balanceadores de cargas a tus instancias de VM. Con esta regla, se habilita el tráfico del rango de direcciones de Google Cloud que usan los balanceadores de cargas y las verificaciones de estado. La regla de firewall usa la etiqueta http-tag que creaste antes. Además, la regla de firewall permite que el tráfico al puerto designado pueda alcanzar instancias que tienen la etiqueta.

Console

  1. En Cloud Console, ve a la página Firewalls:

    IR A LA PÁGINA FIREWALLS

  2. Haz clic en Crear regla de firewall.

  3. Establece el Nombre como allow-lb-and-healthcheck.

  4. Deja la red de VPC como default.

  5. En Destinos, selecciona Rótulos de identificación de destino especificados.

  6. Configura los Rótulos identificadores de destino como http-tag.

  7. Deja el Filtro de fuente configurado en los Rangos de IP.

  8. Configura Rangos de IP de origen como 130.211.0.0/22 y 35.191.0.0/16.

  9. Establece los Protocolos y puertos permitidos en tcp:80.

  10. Haz clic en Crear.

    La regla de firewall nueva puede tardar unos minutos en aparecer en la consola.

gcloud

  • Crea una regla de firewall con el nombre allow-lb-and-healthcheck:

    gcloud compute firewall-rules create allow-lb-and-healthcheck \
        --source-ranges 130.211.0.0/22,35.191.0.0/16 \
        --target-tags http-tag \
         --allow tcp:80
    

Terraform

  1. Copia los archivos de configuración del balanceo de cargas de Terraform en el directorio actual:

    cp lb/* .

  2. Aplica la configuración de Terraform:

    terraform apply

Asigna una dirección IP externa a los balanceadores de cargas

Si entregas tráfico a Internet, debes asignar una dirección externa para el balanceador de cargas. Puedes asignar una dirección IPv4, una dirección IPv6 o ambas. En esta sección, se reservan las direcciones estáticas IPv4 y, también, IPv6 adecuadas para agregar a DNS.

No se aplican cargos adicionales para las direcciones IP públicas, ya que se usan con un balanceador de cargas.

Console

  1. En Cloud Console, ve a la página Direcciones IP externas:

    IR LAS PÁGINAS DE DIRECCIONES IP EXTERNAS

  2. Haz clic en Reservar dirección estática para reservar una dirección IPv4.

  3. Establece el Nombre como lb-ip-cr.

  4. Deja Tipo configurado como Global.

  5. Haz clic en Reservar.

  6. Haz clic en Reservar dirección estática de nuevo para reservar una dirección IPv6.

  7. Establece el Nombre como lb-ipv6-cr.

  8. Configura la Versión de IP como IPv6.

  9. Deja Tipo configurado como Global.

  10. Haz clic en Reservar.

gcloud

  1. Crea una dirección IP estática con el nombre lb-ip-cr para IPv4:

    gcloud compute addresses create lb-ip-cr \
        --ip-version=IPV4 \
        --global
    
  2. Crea una dirección IP estática con el nombre lb-ipv6-cr para IPv6:

    gcloud compute addresses create lb-ipv6-cr \
        --ip-version=IPV6 \
        --global
    

Crea grupos de instancias y agrega instancias

Los balanceadores de cargas de Google Cloud requieren grupos de instancias que actúan como backends para el tráfico. En este instructivo, se usan grupos de instancias no administrados para que sea más simple. Sin embargo, también podrías usar grupos de instancias administrados para aprovechar ciertas características, como el ajuste de escala automático, la reparación automática, la implementación regional (multizona) y la actualización automática.

En esta sección, crearás un grupo de instancias para cada una de las zonas que usas.

Console

  1. En Cloud Console, ve a la página Grupos de instancias:

    IR A LA PÁGINA GRUPOS DE INSTANCIAS

  2. Haz clic en Crear grupo de instancias.

  3. En el lado izquierdo, haz clic en Nuevo grupo de instancias no administrado.

  4. Establece el Nombre como us-resources-w.

  5. Establece la Región en us-central1

  6. Establece la Zona en us-central1-b.

  7. Selecciona Red (predeterminada) y Subred (predeterminada).

  8. En Instancias de VM, haz lo siguiente:

    • Haz clic en Agregar una instancia y, luego, selecciona www-1.
    • Vuelve a hacer clic en Agregar una instancia y, luego, selecciona www-2.
    • Haz clic en Crear.
  9. Repite este procedimiento para crear un segundo grupo de instancias, pero usa los valores siguientes:

    • Nombre: europe-resources-w
    • Zona: europe-west1-b
    • Instancias: www-3 y www-4
  10. En la página Grupo de instancias, confirma que tienes dos grupos de instancias, cada uno con dos instancias.

gcloud

  1. Crea el grupo de instancias us-resources-w:

    gcloud compute instance-groups unmanaged create us-resources-w \
        --zone us-central1-b
    
  2. Agrega las instancias www-1 y www-2:

    gcloud compute instance-groups unmanaged add-instances us-resources-w \
        --instances www-1,www-2 \
        --zone us-central1-b
    
  3. Crea el grupo de instancias europe-resources-w:

    gcloud compute instance-groups unmanaged create europe-resources-w \
        --zone europe-west1-b
    
  4. Agrega las instancias www-3 y www-4:

    gcloud compute instance-groups unmanaged add-instances europe-resources-w \
        --instances www-3,www-4 \
        --zone europe-west1-b
    

Configura el servicio del balanceo de cargas

La funcionalidad del balanceador de cargas implica varios servicios conectados. En esta sección, configurarás y conectarás los servicios. Los servicios que crearás son los siguientes:

  • Puertos con nombre, que el balanceador de cargas usa para dirigir el tráfico a grupos de instancias.
  • Una verificación de estado, que consulta tus instancias para ver si están en buen estado. El balanceador de cargas envía tráfico solo a instancias en buen estado.
  • Servicios de backend, que supervisan el uso y el estado de la instancia. Los servicios de backend saben si las instancias del grupo de instancias pueden recibir tráfico. Si las instancias no pueden recibir tráfico, el balanceador de cargas redirecciona el tráfico, siempre que las instancias en otros lugares tengan capacidad suficiente. Un backend define la capacidad de los grupos de instancias que contiene (uso máximo de CPU o consultas por segundo máximas).
  • Un Mapa de URL, que analiza la URL de la solicitud y puede reenviar solicitudes a servicios de backend específicos en función del host y la ruta de la solicitud URL. En este instructivo, debido a que no se usan reenvíos basados en el contenido, el mapa de URL solo contiene la asignación predeterminada.
  • Un proxy de destino, que recibe la solicitud del usuario y la reenvía al mapa de URL.
  • Dos reglas de reenvío global, una para IPv4 y, también, una destinada a IPv6, que contienen los recursos de la dirección IP externa global. Las reglas de reenvío global reenvían la solicitud entrante al proxy de destino.

Crea el balanceador de cargas

En esta sección, crearás el balanceador de cargas y configurarás un servicio de backend predeterminado para controlar tu tráfico. También crearás una verificación de estado.

Console

  1. En Cloud Console, ve a la página Crear balanceador de cargas:

    IR A LA PÁGINA CREAR BALANCEADOR DE CARGAS

  2. En Balanceo de cargas de HTTP(S), haz clic en Iniciar configuración.

  3. Establece el Nombre como web-map.

  4. En el panel izquierdo de la página Balanceador de cargas de HTTP(S) nuevo, haz clic en Configuración de backend.

  5. En la lista Crear o seleccionar servicios y depósitos de backend, selecciona Servicios de backend y, a continuación, Crear un servicio de backend. Verás el cuadro de diálogo Crear servicio de backend.

  6. Establece el Nombre como web-map-backend-service.

  7. Configura el Protocolo. En el protocolo HTTP, deja los valores configurados como predeterminados.

  8. En Tipo de backend, selecciona Grupos de instancias.

  9. En Backends, configura el Grupo de instancias como us-resources-w.

  10. Haz clic en Agregar backend.

  11. Selecciona el grupo de instancias europe-resources-w y, luego, haz lo siguiente:

    • Para el tráfico HTTP entre el balanceador de cargas y las instancias, asegúrate de que los Números de puerto estén establecidos en 80.
    • Deja los valores predeterminados para el resto de los campos.
  12. Haz clic en Listo.

  13. En Verificación de estado, selecciona Crear una verificación de estado o Crear otra verificación de estado.

  14. Configura los parámetros de verificación de estado siguientes:

    • Nombre: http-basic-check
    • Protocolo: HTTP
    • Puerto: 80
  15. Haz clic en Crear.

gcloud

  1. Para cada grupo de instancias, define un servicio HTTP y asigna un nombre de puerto al puerto relevante:

    gcloud compute instance-groups unmanaged set-named-ports us-resources-w \
        --named-ports http:80 \
        --zone us-central1-b
    
    gcloud compute instance-groups unmanaged set-named-ports europe-resources-w \
        --named-ports http:80 \
        --zone europe-west1-b
    
  2. Crea una verificación de estado mediante el siguiente comando:

    gcloud compute health-checks create http http-basic-check \
        --port 80
    
  3. Crea un servicio de backend mediante el siguiente comando:

    gcloud compute backend-services create web-map-backend-service \
        --protocol HTTP \
        --health-checks http-basic-check \
        --global
    

    Configura la marca --protocol como HTTP, ya que usas HTTP para ir a las instancias. Para la verificación de estado, usa la verificación de estado http-basic-check que creaste antes.

  4. Agrega tus grupos de instancias como backends a los servicios de backend:

    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group us-resources-w \
        --instance-group-zone us-central1-b \
        --global
    
    gcloud compute backend-services add-backend web-map-backend-service \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8 \
        --capacity-scaler 1 \
        --instance-group europe-resources-w \
        --instance-group-zone europe-west1-b \
        --global
    

Configura reglas de host y ruta

Console

  • En el panel izquierdo de la página Nuevo balanceador de cargas de HTTP(S), haz clic en Reglas de host y ruta.

    Para este instructivo, no necesitas configurar ninguna la regla de host ni las rutas, ya que todo el tráfico irá a la regla predeterminada. Por lo tanto, puedes aceptar los valores predeterminados propagados previamente.

gcloud

  1. Crea un mapa de URL predeterminado que dirija todas las solicitudes entrantes a todas tus instancias:

    gcloud compute url-maps create web-map \
        --default-service web-map-backend-service
    
  2. Crea un proxy HTTP de destino para enrutar las solicitudes al mapa de URL:

    gcloud compute target-http-proxies create http-lb-proxy \
        --url-map web-map
    

Configura el frontend

Console

  1. En el panel izquierdo de la página Balanceador de cargas de HTTP(S) nuevo, haz clic en Configuración de frontend.
  2. Establece el Nombre como http-cr-rule.
  3. Establece el Protocolo en HTTP.
  4. Establece la Versión IP en IPv4.
  5. En la lista Dirección IP, selecciona lb-ip-cr, la dirección que creaste antes.
  6. Confirma que el Puerto esté establecido en 80.
  7. Haz clic en Listo.
  8. Haz clic en Agregar IP y puerto de frontend.
  9. Establece el Nombrecomo http-cr-ipv6-rule.
  10. En Protocolo, selecciona HTTP.
  11. Establece la Versión IP en IPv6.
  12. En la lista Dirección IP, selecciona lb-ipv6-cr, la otra dirección que creaste antes.
  13. Confirma que el Puerto esté establecido en 80.
  14. Haz clic en Crear.
  15. Haz clic en Listo.

gcloud

  1. Obtén las direcciones IP estáticas que creaste para tu balanceador de cargas. Toma nota de ellos, ya que los usarás en el paso siguiente.

    gcloud compute addresses list
    
  2. Crea dos reglas de reenvío globales a fin de enrutar las solicitudes entrantes al proxy, una para IPv4 y otra destinada a IPv6. Reemplaza lb_ip_address en el comando por la dirección IPv4 estática que creaste y reemplaza lb_ipv6_address por la dirección IPv6 también que creaste.

    gcloud compute forwarding-rules create http-cr-rule \
        --address lb_ip_address \
        --global \
        --target-http-proxy http-lb-proxy \
        --ports 80
    
    gcloud compute forwarding-rules create http-cr-ipv6-rule \
        --address lb_ipv6_address \
        --global \
        --target-http-proxy http-lb-proxy \
       --ports 80
    

Revisa y finaliza

  1. En Cloud Console, ve a la página Crear balanceador de cargas:

    IR A LA PÁGINA CREAR BALANCEADOR DE CARGAS

  2. En el panel del lado izquierdo de la página Nuevo balanceador de cargas de HTTP(S), haz clic en Revisar y finalizar.

  3. Compara tu configuración con lo que pretendías crear.

  4. Si la configuración es correcta, haz clic en Crear.

    Volverás a las páginas del balanceo de cargas. Después de crear el balanceador de cargas, aparecerá una marca de verificación verde junto a este, lo que indica que está en ejecución.

Una vez que creas las reglas de reenvío globales, la configuración puede tardar varios minutos en propagarse.

Prueba la configuración

En esta sección, enviarás una solicitud HTTP a tu instancia para verificar que la configuración del balanceo de cargas funcione.

Console

  1. En Cloud Console, ve a la página Balanceo de cargas:

    IR A LA PÁGINA BALANCEO DE CARGAS

  2. Selecciona el balanceador de cargas con el nombre web-map para ver los detalles del balanceador de cargas que acabas de crear.

  3. En la sección Backend de la página, confirma que las instancias estén en buen estado. Para esto, mira la columna Buen estado.

    La información sobre el estado de las instancias puede tardar unos minutos en aparecer en la pantalla.

  4. Una vez que puedas ver que las instancias están en buen estado, copia el valor IP:Port de la sección Frontend y pégalo en tu navegador.

    Allí, verás tu página de contenido predeterminada.

gcloud

  1. Obtén las direcciones IP de tus reglas de reenvío globales y toma nota para el paso siguiente:

    gcloud compute forwarding-rules list
    
  2. Usa el comando curl para probar la respuesta de varias URL de tus servicios. Prueba tanto IPv4 como IPv6 En IPv6, debes encerrar la dirección entre [], como http://[2001:DB8::]/.

    curl http://ipv4-address
    
    curl -g -6 "http://[ipv6-address]/"
    

Resumen

Tus VM pueden entregar tráfico a Internet y puedes obtener datos de Internet. También puedes acceder a ellas mediante SSH a fin de realizar tareas de administración. Toda esta funcionalidad solo se logra mediante direcciones IP privadas, lo que ayuda a protegerlas de ataques directos, ya que no expone las direcciones IP a las que se puede acceder desde Internet.

Realice una limpieza

Para evitar que se apliquen cargos a tu cuenta de Google Cloud por los recursos usados en este instructivo, borra el proyecto que contiene los recursos o conserva el proyecto y borra los recursos individuales.

Borra el proyecto

  1. En Cloud Console, ve a la página Administrar recursos.

    Ir a Administrar recursos

  2. En la lista de proyectos, elige el proyecto que quieres borrar y haz clic en Borrar.
  3. En el diálogo, escribe el ID del proyecto y, luego, haz clic en Cerrar para borrar el proyecto.

¿Qué sigue?