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 sola instancia de máquina virtual 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. Lee la página de precios para obtener más información.

Guía de inicio rápido

En esta guía de inicio rápido, se da por sentado que estás familiarizado con 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.

    La instancia de destino deberá contener una sola instancia de máquina virtual, 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 la regla de reenvío, esta regla dirigirá el tráfico a la 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 máquina virtual.
  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.

Instala Apache y configura una instancia de máquina virtual

Para empezar, creemos una sola instancia de máquina virtual con Apache instalado.

  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 una etiqueta para la futura máquina virtual a fin de poder aplicarle un firewall más adelante:

    me@local:~$ TAG="www-tag"
    
  3. Crea una instancia de máquina virtual nueva para manejar el tráfico de las 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 en esta instancia de máquina virtual:

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

Configuraste con éxito una instancia de máquina virtual. Ahora puedes empezar con la configuración de reenvío de protocolos.

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

  1. Crea una instancia de destino.

    Las instancias de destino contienen una sola instancia de máquina virtual que recibe y maneja 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 directamente.

    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 detalles, consulta la documentación sobre las reglas de reenvío.

    En este ejemplo, los siguientes comandos crearán tres reglas de reenvío, cada una con direcciones IP efímeras que reenvían el tráfico de TCP a la instancia de destino. Si no, si tienes algunas direcciones IP externas estáticas, puedes usarlas con estas reglas de reenvío si especificas 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
    

Listo. 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 las reglas de reenvío. Por ejemplo, en la siguiente tabla se enumeran las direcciones IP efímeras que se asignaron para las reglas de reenvío que se crearon antes.

    Si optaste por usar direcciones IP reservadas, se enumerarán 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 máquina virtual para entregar información diferente según la URL de destino.

    Primero, establece una conexión SSH a la 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 VirtualHost, 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 la máquina local, haremos una solicitud a las direcciones IP externas que entregan las reglas de reenvío que creamos.

    Usa curl para enviar tráfico a las direcciones IP. La respuesta mostrará 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
    

    Listo. Acabas de terminar tu primera configuración de reenvío de protocolos.

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 a 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, tener de 1 a 63 caracteres de longitud y coincidir con la expresión regular: [a-z]([-a-z0-9]*[a-z0-9])? que significa que el primer carácter debe ser una letra minúscula y todos los siguientes deben ser un guion, una letra minúscula o un dígito, excepto el último carácter, que no puede ser un guion.

  • 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 protocolos TCP, UDP y SCTP.

Agrega una regla de reenvío

Para agregar una regla de reenvío nueva, puedes usar el comando gcloud compute forwarding-rules create o crear una solicitud HTTP POST dirigida al grupo de reglas de reenvío. Este es un ejemplo de la creación de 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 solicita que elijas una zona si no configuraste la propiedad compute/zone con gcloud config set compute/zone. Para obtener más información, lee Configura una zona o región predeterminada.

El comando gcloud compute forwarding-rules create permite que se configure una instancia de destino como destino cuando el esquema de balanceo de cargas es interno.

Este es un ejemplo de la creación de una regla de reenvío a 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 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, lee Configura una zona o región predeterminada.

Para obtener una descripción completa de las marcas que puedes usar, consulta el comando create de 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 a la URI siguiente:

https://www.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 quieres obtener más información para enumerar reglas de reenvío, obtener información sobre una regla de reenvío específica y borrar reglas de reenvío, consulta las páginas de referencia del SDK de gcloud y de la API:

Instancias de destino

Un recurso de instancia de destino contiene una instancia de máquina virtual que maneja el tráfico de una o más reglas de reenvío y es ideal en el reenvío de ciertos tipos de tráfico de protocolos que deben ser administrados por una sola fuente (p. ej., ESP y AH), pero también puedes usar una instancia de destino para protocolos TCP y UDP. Las instancias de destino no tienen una política NAT aplicada, así que pueden usarse con tráfico que requiere tráfico IPsec sin NAT para redes privadas virtuales (VPN).

Las instancias de destino deben encontrarse en la misma región que la regla de reenvío. Las instancias de destino también deben encontrarse en la misma zona que la instancia de máquina virtual. Por ejemplo, si la regla de reenvío se encuentra en us-central1 y la instancia que quieres usar se encuentra en us-central1-a, la instancia de destino debe encontrarse en us-central1-a. Si la instancia se encontrara en us-central1-b, la instancia de destino también debe encontrarse en us-central1-b.

Agrega una instancia de destino

Para agregar una instancia de destino nueva, puedes usar el comando gcloud compute target-instances o crear una solicitud HTTP POST dirigida al grupo targetInstances. No es posible crear recursos de instancia de destino mediante GCP Console. Este es un ejemplo de la creación de 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 solicita que elijas una zona si no configuraste la propiedad compute/zone con gcloud config set compute/zone. Para obtener más información, lee Configura 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, realiza una solicitud HTTP POST a la URI siguiente:

https://www.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 quieres obtener más información para enumerar instancias de destino, obtener información sobre una instancia de destino específica y borrar instancias de destino, consulta las páginas de referencia del SDK de gcloud y de la API:

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 de privadas en las siguientes circunstancias.

  • Deseas implementar una sola instancia de backend para tu servicio y quieres administrar las verificaciones de estado y otros aspectos por tu cuenta.
  • 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.
  • 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. Puede 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 el reenvío de protocolos con 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: “Una instancia de destino interna solo puede ser el destino de una sola regla de reenvío”

Si ves el mensaje de error An internal target instance can only be the target of one forwarding rule, puedes intentar configurar dos reglas de reenvío que apunten 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

  • Puedes configurar 100 reglas de reenvío privadas que apunten a instancias de destino por red.

  • 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