Usa el reenvío de protocolos

Compute Engine es compatible con el reenvío de protocolos, que te permite crear objetos de regla de reenvío que pueden enviar paquetes a una instancia de destino sin NAT. Cada instancia de destino contiene una única instancia de máquina virtual (VM) que recibe y maneja el tráfico de las reglas de reenvío correspondientes.

El reenvío de protocolos puede usarse en varias situaciones, incluidas las siguientes:

Para el hosting virtual por IP, las redes privadas virtuales (VPN) y el balanceo de cargas, Compute Engine admite el reenvío de los protocolos siguientes:

Para las VIP privadas, solo se admiten TCP y UDP:

El reenvío de protocolos se cobra con las mismas tarifas que el servicio de balanceo de cargas. Para obtener más información, consulta la página de precios.

Guía de inicio rápido

En esta guía de inicio rápido, se supone que ya sabes usar bash.

Para crear una regla de reenvío que envía tráfico a una sola instancia, debes seguir estos pasos:

  1. Crea una instancia de destino.

    Tu instancia de destino es una única instancia de VM, pero esta puede existir en el momento en que creas la instancia de destino o puede crearse después.

  2. Crea una regla de reenvío.

    La instancia de destino debe existir antes de crear una regla de reenvío. Si los paquetes entrantes coinciden con la IP, el protocolo y (si corresponde) el rango de puertos que entrega tu regla de reenvío, la regla de reenvío dirige ese tráfico a tu instancia de destino.

En el resto de esta guía de inicio rápido, se demuestran los pasos anteriores en detalle de la siguiente manera:

  1. Configura un servidor Apache en una instancia de VM.
  2. Crea una instancia de destino y las reglas de reenvío correspondientes.
  3. Envía tráfico a una sola instancia de destino.

Al final de esta guía de inicio rápido, sabrás cómo configurar el reenvío de protocolos de varias reglas de reenvío a una sola instancia de destino.

Configura una instancia de VM y, luego, instala Apache

Para crear una única instancia de VM con Apache instalado, haz lo siguiente:

  1. Crea algunas secuencias de comandos de inicio para tu nueva instancia.

    Según el sistema operativo, el contenido de la secuencia de comandos de inicio puede ser distinto.

    • Si planeas usar una imagen de Debian en la instancia, ejecuta el siguiente comando:

      me@local:~$ echo "sudo apt-get update && sudo apt-get -y install apache2 && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir -p /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

    • Si planeas usar una imagen de CentOS en la instancia, ejecuta el siguiente comando:

      me@local:~$ echo "sudo yum -y install httpd && sudo service httpd restart && mkdir -p /var/www1 &&
      mkdir -p /var/www2 && mkdir /var/www3 && hostname > /var/www/html/index.html &&
      echo w1 > /var/www1/index.html && echo w2 > /var/www2/index.html && echo w3 > /var/www3/index.html" > 
      $HOME/pf_startup.sh

  2. Crea un rótulo identificador para tu futura VM a fin de ayudar a aplicarle un firewall más adelante:

    me@local:~$ TAG="www-tag"
    
  3. Crea una instancia de VM a fin de manejar el tráfico para tus reglas de reenvío:

    gcloud compute instances create pf-instance \
        --image-project debian-cloud --image-family debian-9 --tags $TAG \
        --metadata-from-file startup-script=$HOME/pf_startup.sh
    
  4. Crea una regla de firewall para permitir el tráfico externo a esta instancia de VM:

    gcloud compute firewall-rules create www-firewall --target-tags $TAG --allow tcp
    

Configuraste con éxito una instancia de VM. Ahora puedes empezar con la configuración de reenvío de protocolos.

Crea una instancia de destino y las reglas de reenvío correspondientes

  1. Crea una instancia de destino.

    Las instancias de destino contienen una única instancia de VM que recibe y maneja el tráfico de una regla de reenvío. Las instancias de destino no tienen una política NAT, así que puedes usarlas para configurar tus propias conexiones VPN con protocolos IPsec de forma directa.

    Debes crear una instancia de destino antes de poder crear un objeto de regla de reenvío porque las reglas de reenvío deben hacer referencia a un recurso de destino existente. No es posible crear una regla de reenvío que dirija el tráfico a un recurso de destino no existente. Por ejemplo, crea una instancia de destino de la siguiente manera:

    gcloud compute target-instances create pf-target-instance --instance pf-instance
    
  2. Crea objetos de regla de reenvío.

    Un objeto de regla de reenvío dirige el tráfico que hace coincidir el puerto y el protocolo IP con una instancia de destino especificada. Para obtener más información, revisa la documentación de reglas de reenvío.

    Para este ejemplo, los siguientes comandos crean tres reglas de reenvío, cada una con una dirección IP efímera que reenvía el tráfico de TCP a tu instancia de destino. De forma opcional, si tienes algunas direcciones IP externas estáticas, puedes usarlas con estas reglas de reenvío mediante la determinación de la marca --address IP-ADDRESS.

    gcloud compute forwarding-rules create pf-rule1 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule2 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    
    gcloud compute forwarding-rules create pf-rule3 --ip-protocol TCP \
        --ports 80 --target-instance pf-target-instance
    

Puedes empezar a enviar tráfico a la instancia de destino.

Envía tráfico a tu instancia

  1. Obtén las direcciones IP externas de tus nuevas reglas de reenvío.

    Ejecuta gcloud compute forwarding-rules list para obtener las direcciones IP externas de tus reglas de reenvío. Por ejemplo, en la siguiente tabla, se enumeran las direcciones IP efímeras que se asignan para las reglas de reenvío que se crearon antes.

    Si elegiste usar direcciones IP reservadas, se enumeran aquí en lugar de las direcciones IP efímeras.

    gcloud compute forwarding-rules list
    
    NAME     REGION      IP_ADDRESS     IP_PROTOCOL TARGET
    pf-rule1 us-central1 [ADDRESS_1]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule2 us-central1 [ADDRESS_2]    TCP         us-central1-a/targetInstances/pf-target-instance
    pf-rule3 us-central1 [ADDRESS_3]    TCP         us-central1-a/targetInstances/pf-target-instance

    Toma nota de las direcciones IP para el siguiente paso.

  2. Configura los hosts virtuales Apache de la instancia de VM para entregar información diferente según la URL de destino.

    Primero, conéctate a tu instancia:

    gcloud compute ssh pf-instance
    

    Luego, edita el archivo /etc/apache2/sites-enabled/000-default.conf y agrega las siguientes líneas. Para las líneas VirtualHostcd .., usa las direcciones IP que viste cuando ejecutaste el paso anterior.

    <VirtualHost [ADDRESS_1]>
     DocumentRoot /var/www1
     <Directory /var/www1>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_2]>
     DocumentRoot /var/www2
     <Directory /var/www2>
      Require all granted
     </Directory>
    </VirtualHost>
    <VirtualHost [ADDRESS_3]>
     DocumentRoot /var/www3
     <Directory /var/www3>
      Require all granted
     </Directory>
    </VirtualHost>
    

    Por último, reinicia Apache:

    user@myinst:~$ sudo /etc/init.d/apache2 restart
    
  3. Intenta enviar tráfico a la instancia.

    En tu máquina local, realiza una solicitud a las direcciones IP externas que entregan las reglas de reenvío que creaste.

    Usa curl para enviar tráfico a las direcciones IP. La respuesta muestra w1, w2 o w3, según la dirección IP.

    me@local:~$curl [ADDRESS_1]
    w1
    
    me@local:~$ curl [ADDRESS_2]
    w2
    
    me@local:~$ curl [ADDRESS_3]
    w3
    

    Tu configuración de reenvío de protocolo está lista.

Reglas de reenvío

Las reglas de reenvío funcionan junto con los grupos y las instancias de destino para asistir a las características de balanceo de cargas y de reenvío de protocolos. Para usar el balanceo de cargas y el reenvío de protocolos, debes crear una regla de reenvío que dirija el tráfico a grupos de destino específicos (para el balanceo de cargas) o instancias de destino (para el reenvío de protocolos). No es posible usar estas características sin una regla de reenvío.

Los recursos de reglas de reenvío se encuentran en el grupo de reglas de reenvío. Cada regla de reenvío hace coincidir una dirección IP, un protocolo y, como opción, un rango de puertos particulares con un solo grupo o instancia de destino. Cuando el tráfico se envía a una dirección IP externa entregada por una regla de reenvío, esta dirige el tráfico al grupo o instancias de destino correspondientes. Puedes crear hasta 50 objetos de regla de reenvío por proyecto.

Los siguientes son algunos puntos para tener en cuenta cuando se trabaja con reglas de reenvío:

  • El nombre de una regla de reenvío debe ser único en este proyecto, debe tener de 1 a 63 caracteres de longitud y coincidir con la expresión regular [a-z]([-a-z0-9]*[a-z0-9])?, lo que significa que el primer carácter debe ser una letra minúscula y todos los caracteres siguientes deben ser rayas, letras minúsculas o dígitos, excepto el último carácter, que no puede ser una raya.

  • Si no especificas un protocolo de reglas de reenvío, se usa el TCP predeterminado. También ten en cuenta que ciertos protocolos solo pueden usarse con grupos o instancias de destino:

    • Si usas ESP, AH, SCTP o ICMP, debes especificar una instancia de destino. No es posible especificar un grupo de destino cuando se usan estos protocolos.
    • Si usas TCP o UDP, puedes especificar un grupo de destino o una instancia de destino.
  • Los rangos de puertos solo se pueden especificar para los protocolos TCP, UDP y SCTP.

Agrega una regla de reenvío

Para agregar una nueva regla de reenvío, puedes usar el comando gcloud compute forwarding-rules create o crear una solicitud HTTP POST a la colección de reglas de reenvío. El siguiente es un ejemplo de cómo crear una regla de reenvío a una instancia de destino con la herramienta de línea de comandos de gcloud:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --load-balancing-scheme internal | external \
    --region [REGION] \
    [--target-instance-zone [ZONE]] \
    --ip-protocol TCP --ports 80 \
    --target-instance [TARGET_INSTANCE]

Si omites la marca --target-instance-zone, la herramienta de línea de comandos de gcloud te solicitará que elijas una zona si no configuraste la propiedad compute/zone con gcloud config set compute/zone. Para obtener más información, consulta cómo configurar una zona o región predeterminada.

El comando gcloud compute forwarding-rules create admite establecer una instancia como destino cuando el esquema de balanceo de cargas es interno.

En el siguiente ejemplo, se muestra cómo crear una regla de reenvío para un grupo de destino:

gcloud compute forwarding-rules create [FORWARDING_RULE] \
    --target-pool [TARGET_POOL] \
    [--region [REGION]]

Si omites la marca --region, la herramienta de línea de comandos de gcloud te solicita que elijas una región si no configuraste la propiedad compute/region con gcloud config set compute/region. Para obtener más información, consulta cómo configurar una zona o región predeterminada.

Para obtener una descripción completa de las marcas que puedes usar, consulta el comando create de las reglas de reenvío o escribe gcloud compute forwarding-rules create --help.

Para agregar una regla de reenvío con la API, realiza una solicitud HTTP POST al siguiente URI:

https://compute.googleapis.com/compute/v1/projects/myproject/regions/us-central1/forwardingRules

El cuerpo de la solicitud debe contener los siguientes campos:

{
 "name": "example-forwarding-rule",
 "IPAddress": "`10.1.1.1",
 "IPProtocol": "TCP",
 "portRange": "80",
 "target": "zones/us-central1-f/targetInstances/example-target-instances"
}

Si deseas aprender a enumerar reglas de reenvío, borrarlas y obtener información sobre una de ellas, consulta las páginas de referencia de la API y del SDK sobre gcloud:

Instancias de destino

Un recurso de instancia de destino contiene una instancia de VM que maneja el tráfico de una o más reglas de reenvío y es ideal para reenviar ciertos tipos de tráfico de protocolo que deben ser administrados por una sola fuente (por ejemplo, ESP y AH), pero también puedes usar una instancia de destino para los protocolos TCP y UDP. Las instancias de destino no tienen una política de NAT aplicada, por lo que se pueden usar cuando se requiere tráfico de IPsec sin NAT para redes privadas virtuales (VPN).

Las instancias de destino deben estar en la misma región que la regla de reenvío. Las instancias de destino también deben estar en la misma zona que la instancia de VM. Por ejemplo, si tu regla de reenvío está en us-central1 y la instancia que deseas usar está en us-central1-a, la instancia de destino debe estar en us-central1-a. Si la instancia está en us-central1-b, la instancia de destino también debe estar en us-central1-b.

Agrega una instancia de destino

Para agregar una nueva instancia de destino, puedes usar el comando gcloud compute target-instances o crear una solicitud HTTP POST a la colección targetInstances. No es posible crear recursos de instancia de destino con GCP Console. En el siguiente ejemplo, se muestra cómo crear una instancia de destino con la herramienta de línea de comandos de gcloud:

gcloud compute target-instances create [TARGET_INSTANCE] --instance INSTANCE

Si omites la marca --zone, la herramienta de línea de comandos de gcloud te solicitará que elijas una zona si no configuraste la propiedad compute/zone con gcloud config set compute/zone. Para obtener más información, consulta cómo configurar una zona o región predeterminada.

Para obtener una descripción completa de las marcas que puedes usar, consulta el comando create o escribe gcloud compute target-instances create --help.

En la API, realiz una solicitud HTTP POST al siguiente URI:

https://compute.googleapis.com/compute/v1/projects/myproject/zones/us-central1-f/targetInstances

Con el siguiente cuerpo de solicitud:

body = {
  "name": "example-target-instance",
  "instance": "zones/us-central1-f/instances/example-instance"
}

Si deseas aprender a enumerar instancias de destino, borrarlas y obtener información sobre una de ellas, consulta las páginas de referencia de la API y del SDK sobre gcloud:

Reenvío de protocolos para VIP privadas

El reenvío de protocolos puede usarse para reglas de reenvío regionales privadas con direcciones privadas (RFC 1918). Usa esta característica para configurar reglas de reenvío privadas que envían tráfico de TCP o UDP a una instancia de destino en la misma región. También puedes cambiar con facilidad las reglas de reenvío regionales privadas para usar instancias de destino o servicios de backend.

Una instancia de destino contiene una instancia de backend que maneja el tráfico de una o más reglas de reenvío. Solo puedes configurar una regla de reenvío privada para apuntar a cada instancia de destino.

Regla de reenvío privada con instancia de destino (haz clic para agrandar).
Regla de reenvío privada con instancia de destino (haz clic para agrandar)

Usa el reenvío de protocolos con reglas de reenvío privadas en las siguientes circunstancias:

  • Si deseas implementar una sola instancia de backend para tu servicio y quieres administrar las verificaciones de estado y otros aspectos por tu cuenta
  • Si deseas conservar una dirección IP privada de la regla de reenvío y quieres cambiar la instancia de destino a la que apunta la regla de reenvío
  • Si deseas mantener estable la implementación con la capacidad de mover con facilidad varias instancias de backend (servicio de backend) de una sola instancia (instancia de destino) sin cambiar la dirección IP de la regla de reenvío privada

Transición entre una instancia de destino y un servicio de backend

Puedes actualizar una regla de reenvío privada que dirige tráfico a una instancia de destino con una sola instancia de VM para que dirija tráfico a un servicio de backend o viceversa. Cuando actualizas una regla de reenvío privada de esta manera, se conserva la dirección IP de la regla de reenvío. Es posible que se interrumpan las conexiones existentes durante esta transición, ya que el cambio habilita o inhabilita el balanceo de cargas para instancias de servicios de backend.

Transición de un servicio de backend a una instancia de destino (haz clic para agrandar)
Transición de un servicio de backend a una instancia de destino (haz clic para agrandar)

Puedes hacer una transición entre una instancia de destino y un servicio de backend solo con reglas de reenvío privadas. No puedes hacer esto con reenvíos de protocolo que usan reglas de reenvío externas.

Actualiza el destino de una regla de reenvío privada

Si tu regla de reenvío es privada, puedes pasar de apuntar a una instancia de destino a apuntar a un servicio de backend:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --backend-service my-backend-service

Entonces, puedes volver a una instancia de destino:

    gcloud compute forwarding-rules set-target my-forwarding-rule
        --target-instance my-target-instance

Soluciona problemas de reenvío de protocolos para reglas de reenvío privadas

Restricción regional

El reenvío de protocolos para reglas de reenvío privadas es un producto regional. Todos los clientes y VM de instancia de destino deben encontrarse en la misma región.

Mensaje de error: “An internal target instance can only be the target of one forwarding rule" (Una instancia de destino interna solo puede ser el destino de una única regla de reenvío)

Si ves el mensaje de error An internal target instance can only be the target of one forwarding rule, es posible que estés intentando configurar dos reglas de reenvío que apuntan a la misma instancia de destino. No puedes apuntar varias reglas de reenvío a la misma instancia de destino.

Restricciones

  • Cuando usas las instancias de destino con reglas de reenvío privadas, los únicos protocolos compatibles son TCP y UDP.

Límites

  • En cada red, puedes configurar hasta 100 reglas de reenvío privadas que apunten a instancias de destino.

  • Puedes tener 5 puertos por regla de reenvío privada.

¿Te ha resultado útil esta página? Enviar comentarios:

Enviar comentarios sobre...

Documentación de Compute Engine