Configura el balanceo de cargas del proxy TCP

El balanceo de cargas del proxy TCP de Google Cloud te permite usar una sola dirección IP para todos los usuarios a nivel global. El balanceo de cargas del proxy TCP enruta de forma automática el tráfico a las instancias que están más cerca del usuario.

Esta guía contiene instrucciones para configurar TCP Proxy Load Balancing. Antes de comenzar, consulta la descripción general del balanceo de cargas del proxy TCP para obtener información sobre cómo funciona este servicio.

Resumen

En este ejemplo, se demuestra cómo configurar el balanceo de cargas del proxy TCP global en un servicio simple que existe en dos regiones: us-central1 y us-east1. En este ejemplo en particular, el servicio consiste en un conjunto de servidores Apache configurados para responder en el puerto 110. Muchos navegadores no admiten el puerto 110, por lo que, en la sección de prueba, se usa curl.

En este ejemplo, configurarás lo siguiente:

  1. Cuatro instancias distribuidas entre dos regiones
  2. Grupos de instancias
  3. Una verificación de estado para confirmar el funcionamiento de las instancias
  4. Un servicio de backend que supervisa las instancias y les impide superar el uso configurado
  5. El proxy TCP de destino
  6. Una dirección IPv4 externa estática y una regla de reenvío que envía el tráfico del usuario al proxy
  7. Una dirección IPv6 externa estática y una regla de reenvío que envía el tráfico del usuario al proxy
  8. Una regla de firewall que permite que el tráfico del balanceador de cargas y el verificador de estado llegue a las instancias

Una vez configurado el balanceador de cargas, probarás la configuración.

Permisos

Para seguir esta guía, debes poder crear instancias y modificar una red en un proyecto. Debes ser propietario o editor de un proyecto o tener todas las siguientes funciones de IAM de Compute Engine:

Tarea Función requerida
Crear redes, subredes y componentes del balanceador de cargas Administrador de red
Agregar y quitar reglas de firewall Administrador de seguridad
Crea instancias Administrador de instancias

Si deseas obtener más información, consulta las siguientes guías:

Configura instancias y grupos de instancias

En esta sección verás cómo crear grupos de instancias simples, agregarles instancias y, luego, agregar esas instancias a un servicio de backend con una verificación de estado. Un sistema de producción normalmente usaría grupos de instancias administrados basados en plantillas de instancias, pero esta configuración es más rápida para las pruebas iniciales.

Configura instancias

Para la prueba, instala Apache en cuatro instancias, dos en cada grupo de instancias. Por lo general, TCP Proxy Load Balancing no se usa para el tráfico HTTP, pero Apache es un software de uso común y es fácil de configurar para las pruebas.

En este ejemplo las instancias se crean con la etiqueta tcp-lb. Esta etiqueta se usa más adelante en la regla de firewall.

Console


Crea instancias

  1. Ve a la página Instancias de VM en Google Cloud Console.
    Ir a la página Instancias de VM
  2. Haz clic en Crear instancia.
  3. Establece el Nombre en ig-us-central1-1.
  4. Establece la Región en us-central1.
  5. Establece la Zona en us-central1-b.
  6. Haz clic en Administración, seguridad, discos, redes, instancia única para mostrar la configuración avanzada.
  7. En Administración, haz clic en Herramientas de redes y completa el campo Etiquetas con tcp-lb.
  8. Haz clic en Administración y, luego, ingresa la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  9. Deja los valores predeterminados para el resto de los campos.
  10. Haga clic en Crear.
  11. Crea ig-us-central1-2 con la misma configuración, pero con la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  12. Crea ig-us-east1-1 con la misma configuración, pero establece Región en us-east1 y Zona, en us-east1-b. Ingresa la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  13. Crea ig-us-east1-2 con la misma configuración, pero establece Región en us-east1 y Zona, en us-east1-b. Ingresa la siguiente secuencia de comandos en el campo Secuencia de comandos de inicio:
    sudo apt-get update
    sudo apt-get install apache2 -y
    sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
    sudo service apache2 restart
    echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | sudo tee /var/www/html/index.html

gcloud


  1. Crea ig-us-central1-1 en la zona us-central1-b.

    gcloud compute instances create ig-us-central1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-1</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-1].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-1 us-central1-b n1-standard-1             10.240.0.8  23.251.150.133 RUNNING
    
  2. Crea ig-us-central1-2 en la zona us-central1-b.

    gcloud compute instances create ig-us-central1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-central1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instances/ig-us-central1-2].
    NAME             ZONE          MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-central1-2 us-central1-b n1-standard-1             10.240.0.11 23.251.148.160 RUNNING
    
  3. Crea ig-us-east1-1 en la zona us-east1-b.

    gcloud compute instances create ig-us-east1-1 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-1</h1></body></html>' | tee /var/www/html/index.html
              EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-1].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-1 us-east1-b n1-standard-1             10.240.0.12 104.196.31.214 RUNNING
    
  4. Crea ig-us-east1-2 en la zona us-east1-b.

    gcloud compute instances create ig-us-east1-2 \
        --image-family debian-9 \
        --image-project debian-cloud \
        --tags tcp-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          sudo apt-get update
          sudo apt-get install apache2 -y
          sudo sed -i '/Listen 80/c\Listen 110' /etc/apache2/ports.conf
          sudo service apache2 restart
          echo '<!doctype html><html><body><h1>ig-us-east1-2</h1></body></html>' | tee /var/www/html/index.html
          EOF"
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instances/ig-us-east1-2].
    NAME          ZONE       MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
    ig-us-east1-2 us-east1-b n1-standard-1             10.240.0.13 104.196.25.101 RUNNING
    

Crea un grupo de instancias por cada zona y agrega las instancias

Console


  1. Ve a la página Grupos de instancias en Cloud Console.
    Ir a la página Grupos de instancias
  2. Haz clic en Crear grupo de instancias.
  3. Establece el campo Nombre como us-ig1.
  4. Establece la Zona en us-central1-b.
  5. Haz clic en Especificar la asignación del nombre de puerto. Un balanceador de cargas envía tráfico a un grupo de instancias a través de un puerto con nombre. Crea un puerto con nombre para asignar el tráfico entrante a un número de puerto específico.
    1. Configura el campo Nombre del puerto como tcp110.
    2. Configura el campo Números de puerto como 110.
  6. En Tipo de grupo, selecciona Grupo de instancias no administrado.
  7. En Instancias de VM, selecciona ig-us-central1-1 y ig-us-central1-2.
  8. Deja el resto de la configuración como está.
  9. Haga clic en Crear.
  10. Repite los pasos, pero configura los siguientes valores:
    • Nombre: us-ig2
    • Región: us-east1
    • Zona: us-east1-b
    • Nombre del puerto: tcp110
    • Números de puerto: 110
    • Instancias: ig-us-east1-1 e ig-us-east1-2.

gcloud


  1. Crea el grupo de instancias us-ig1.

    gcloud compute instance-groups unmanaged create us-ig1 \
        --zone us-central1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
    NAME    LOCATION       SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig1  us-central1-b  zone                     0
    
  2. Crea un puerto con nombre para el grupo de instancias.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports tcp110:110 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  3. Agrega ig-us-central1-1 e ig-us-central1-2 a us-ig1.

    gcloud compute instance-groups unmanaged add-instances us-ig1 \
        --instances ig-us-central1-1,ig-us-central1-2 \
        --zone us-central1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-central1-b/instanceGroups/us-ig1].
  4. Crea el grupo de instancias us-ig2.

    gcloud compute instance-groups unmanaged create us-ig2 \
        --zone us-east1-b
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
    NAME    LOCATION    SCOPE  NETWORK  MANAGED  INSTANCES
    us-ig2  us-east1-b  zone                     0
    
  5. Crea un puerto con nombre para el grupo de instancias.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports tcp110:110 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].
  6. Agrega ig-us-east1-1 e ig-us-east1-2 a us-ig2.

    gcloud compute instance-groups unmanaged add-instances us-ig2 \
        --instances ig-us-east1-1,ig-us-east1-2 \
        --zone us-east1-b
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2].

Ahora tienes un grupo de instancias por región y cada grupo de instancias tiene dos instancias de VM.

Configura el balanceador de cargas

Console


Crea el balanceador de cargas y configura un servicio de backend

  1. Ve a la página Balanceo de cargas en Google Cloud Console.
    Ir a la página Balanceo de cargas
  2. Haga clic en Crear balanceador de cargas.
  3. En Balanceo de cargas TCP, haz clic en Iniciar configuración.
  4. Configura Orientado a Internet o solo interno como De Internet a mis VM.
  5. Configura Varias regiones o una sola región como Varias regiones.
  6. Haz clic en Continuar.
  7. Configura el campo Nombre como my-tcp-lb.
  8. Haz clic en Configuración de backend.
  9. El Nombre del servicio de backend aparece como my-tcp-lb.
  10. Configura el campo Protocolo como TCP.
  11. En Nuevo backend, selecciona el grupo de instancias us-ig1.
  12. En el diálogo El grupo de instancias tiene un puerto con nombre, haz clic en Usar nombre de puerto existente.
  13. Deja el resto de la configuración como está.
  14. Haz clic en Agregar backend.
  15. Selecciona el grupo de instancias us-ig2.
  16. Configura el campo Números de puerto como 110.
  17. En Verificación de estado, selecciona Crear verificación de estado.
  18. Configura el Nombre de la verificación de estado como my-tcp-health-check.
  19. Configura el campo Protocolo como TCP.
  20. Configura el campo Puerto como 110.
  21. Deja el resto de la configuración igual.
  22. Haga clic en Guardar y continuar.
  • Verifica que haya una marca de verificación junto a Configuración de backend en Google Cloud Console. De no ser así, vuelve a revisar que hayas completado todos los pasos anteriores.
  • Configura servicios de frontend

    1. Haz clic en Configuración de frontend.
    2. Ingresa un Nombre de my-tcp-lb-forwarding-rule.
    3. Establece el Protocolo en TCP.
    4. En IP, selecciona Crear dirección IP:
      1. Ingresa un Nombre de tcp-lb-static-ip.
      2. Haz clic en Reservar.
    5. Configura el campo Puerto como 110.
    6. Si lo deseas, activa el Protocolo de proxy.
    7. Haz clic en Listo.
    8. Haz clic en Agregar IP y puerto de frontend.
    9. Ingresa un Nombre de my-tcp-lb-ipv6-forwarding-rule.
    10. Selecciona un protocolo de TCP.
    11. Establece la Versión IP en IPv6.
    12. En Dirección IP, haz clic en Crear dirección IP.
    13. Ingresa un nombre de tcp-lb-ipv6-static-ip.
    14. Haz clic en Reservar.
  • Configura el campo Puerto como 110.
  • Si lo deseas, activa el Protocolo de proxy.
  • Haga clic en Listo.
  • Verifica que haya una marca de verificación junto a Configuración de frontend en Google Cloud Console. De no ser así, vuelve a revisar que hayas completado todos los pasos anteriores.
  • Revisa y finaliza

    1. Haz clic en Revisar y finalizar.
    2. Vuelve a verificar la configuración.
    3. Haz clic en Crear.

    gcloud


    Crea una verificación de estado

    gcloud compute health-checks create tcp my-tcp-health-check --port 110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-tcp-health-check].
    NAME                PROTOCOL
    my-tcp-health-check TCP

    Crea un servicio de backend

    gcloud compute backend-services create my-tcp-lb \
        --global \
        --protocol TCP \
        --health-checks my-tcp-health-check \
        --timeout 5m \
        --port-name tcp110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
    NAME      BACKENDS PROTOCOL
    my-tcp-lb          TCP

    Como alternativa, puedes usar --protocol SSL para configurar la comunicación encriptada entre el balanceador de cargas y las instancias.

    Agrega grupos de instancias a tu servicio de backend

    gcloud compute backend-services add-backend my-tcp-lb \
        --global \
        --instance-group us-ig1 \
        --instance-group-zone us-central1-b \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].
    
    gcloud compute backend-services add-backend my-tcp-lb \
        --global \
        --instance-group us-ig2 \
        --instance-group-zone us-east1-b \
        --balancing-mode UTILIZATION \
        --max-utilization 0.8
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-tcp-lb].

    Configura un proxy TCP de destino

    Si quieres activar el encabezado de proxy, configúralo como PROXY_V1 en lugar de none.

    gcloud compute target-tcp-proxies create my-tcp-lb-target-proxy \
        --backend-service my-tcp-lb \
        --proxy-header NONE
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetTcpProxies/my-tcp-lb-target-proxy].
    NAME                   PROXY_HEADER SERVICE
    my-tcp-lb-target-proxy NONE         my-tcp-lb

    Reserva direcciones IPv4 e IPv6 estáticas globales

    Tus clientes pueden usar estas direcciones IP para llegar a tu servicio con balanceo de cargas.

    gcloud compute addresses create tcp-lb-static-ipv4 \
        --ip-version=IPV4 \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv4].
    NAME                 REGION ADDRESS                 STATUS
    tcp-lb-static-ip            [LB_STATIC_IPV4]        RESERVED
    gcloud compute addresses create tcp-lb-static-ipv6 \
        --ip-version=IPV6 \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/addresses/tcp-lb-static-ipv6].
    NAME                   REGION ADDRESS                 STATUS
    tcp-lb-static-ip-ipv6         [LB_STATIC_IPV6]        RESERVED

    Configura reglas de reenvío globales para ambas direcciones

    En lugar de [LB_STATIC_IPV4] y [LB_STATIC_IPV4], ingresa las direcciones IP relevantes. Puedes usar gcloud compute addresses list para encontrarlas.

    gcloud beta compute forwarding-rules create my-tcp-lb-ipv4-forwarding-rule \
        --global \
        --target-tcp-proxy my-tcp-lb-target-proxy \
        --address [LB_STATIC_IPV4] \
        --ports 110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv4-forwarding-rule].
    NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
    my-tcp-lb-ipv4-forwarding-rule        [LB_STATIC_IPV4] TCP         my-tcp-lb-target-proxy
    
    gcloud beta compute forwarding-rules create my-tcp-lb-ipv6-forwarding-rule \
        --global \
        --target-tcp-proxy my-tcp-lb-target-proxy \
        --address [LB_STATIC_IPV6] \
        --ports 110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-tcp-lb-ipv6-forwarding-rule].
    NAME                           REGION IP_ADDRESS       IP_PROTOCOL TARGET
    my-tcp-lb-ipv6-forwarding-rule        [LB_STATIC_IPV6] TCP         my-tcp-lb-target-proxy
    

    Crea una regla de firewall para el balanceador de cargas del proxy TCP

    Configura el firewall para permitir el tráfico del balanceador de cargas y el verificador de estado a las instancias. En este caso, abriremos el puerto TCP 110. La verificación de estado utilizará el mismo puerto. Debido a que el tráfico entre el balanceador de cargas y tus instancias usa IPv4, solo es necesario abrir los rangos de IPv4.

    Console


    1. Ve a la página Reglas de Firewall en Google Cloud Console.
      Ir a la página Reglas de firewall
    2. Haz clic en Crear regla de firewall.
    3. Ingresa un Nombre de allow-tcp-lb-and-health.
    4. En Red, selecciona default.
    5. En Destinos, selecciona Etiquetas de destino especificadas.
    6. Configura las Etiquetas de destino como tcp-lb.
    7. Establece Filtro de origen en IP ranges.
    8. Configura Rangos de IP de origen como 130.211.0.0/22 y 35.191.0.0/16.
    9. Establece el campo Protocolos y puertos permitidos en tcp:110.
    10. Haz clic en Crear.

    gcloud


     gcloud compute firewall-rules create allow-tcplb-and-health \
         --source-ranges 130.211.0.0/22,35.191.0.0/16 \
         --target-tags tcp-lb \
         --allow tcp:110
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-130-211-0-0-22].
    NAME                     NETWORK SRC_RANGES                   RULES      SRC_TAGS TARGET_TAGS
    allow-tcplb-and-health   default 130.211.0.0/22,35.191.0.0/16 tcp:110             tcp-lb

    Prueba el balanceador de cargas

    Después de reemplazar lb_ip por la dirección IPv4 o IPv6 del balanceador de cargas que figura en el campo  IP:Puerto, puedes acceder al balanceador de cargas con el siguiente comando:

    curl lb_ip:110
    

    Crea verificaciones de estado

    Las verificaciones de estado determinan qué instancias pueden recibir nuevas conexiones. Puedes configurar una verificación de estado TCP, SSL, HTTP o HTTPS para determinar el estado de tus instancias.

    • Si el servicio que se ejecuta en tus instancias de backend se basa en HTTP, usa una verificación de estado HTTP.
    • Si el servicio que se ejecuta en tus instancias de backend se basa en HTTPS, usa una verificación de estado HTTPS.
    • Si el servicio que se ejecuta en tus instancias de backend se basa en HTTP/2, usa una verificación de estado HTTP/2.
    • Si el servicio que se ejecuta en tus instancias de backend se basa en SSL, usa una verificación de estado SSL.
    • Usa una verificación de estado TCP siempre que no tengas un motivo específico para usar otro tipo.

    Reglas de firewall para verificaciones de estado

    Los sondeos de verificación de estado realizados en las instancias de balanceo de cargas provienen de las direcciones en los rangos 130.211.0.0/22 y 35.191.0.0/16. Estos son los rangos que el balanceador de cargas usa para conectarse a instancias de backend. Tus reglas de firewall deben permitir estas conexiones en el puerto relevante.

    Consulta la página sobre las verificaciones de estado para obtener más información.

    Opciones de configuración adicionales

    En esta sección, se expande el ejemplo de configuración para proporcionar opciones de configuración alternativas y adicionales. Todas las tareas son opcionales. Puedes realizarlas en cualquier orden.

    Protocolo PROXY para retener información de conexión del cliente

    TCP Proxy Load Balancing finaliza las conexiones TCP desde el cliente y crea conexiones nuevas a las instancias. De forma predeterminada, no se conservan la IP de cliente original y la información del puerto.

    Para conservar y enviar la información de conexión original a tus instancias, habilita el protocolo PROXY (versión 1). Este protocolo envía un encabezado adicional que contiene la dirección IP de origen, la dirección IP de destino y los números de puerto a la instancia como parte de la solicitud.

    Si configuras el protocolo PROXY para el tráfico de los usuarios, también debes configurarlo para las verificaciones de estado si estás entregando tráfico y comprobando el estado en el mismo puerto.

    El encabezado del protocolo PROXY generalmente será una sola línea de texto legible con el siguiente formato:

    PROXY TCP4 <client IP> <load balancing IP> <source port> <dest port>\r\n
    

    A continuación, se muestra un ejemplo del protocolo PROXY:

    PROXY TCP4 192.0.2.1 198.51.100.1 15221 110\r\n

    Cuando la IP de cliente es 192.0.2.1, la IP de balanceo de cargas es 198.51.100.1, el puerto del cliente es 15221 y el puerto de destino es 110.

    Cuando no se conoce la IP de cliente, el balanceador de cargas genera un encabezado de protocolo PROXY que tiene el siguiente formato:

    PROXY UNKNOWN\r\n
    

    Si verificas el estado y entregas contenido en el mismo puerto, puedes configurar el --proxy-header de la verificación de estado de modo que coincida con la configuración del balanceador de cargas. En este instructivo se usa el puerto 110 para verificar el estado y entregar contenido. Si usas puertos diferentes, puedes configurar esto para tu verificación de estado o no, según resulte apropiado.

    Habilita la afinidad de sesión

    En la configuración de ejemplo, se crea un servicio de backend sin afinidad de sesión.

    Estos procedimientos te muestran cómo actualizar un servicio de backend para el balanceador de cargas de proxy TCP de ejemplo, de modo que el servicio de backend use la afinidad de IP de cliente o la afinidad de cookie generada.

    Cuando la afinidad de IP de cliente está habilitada, el balanceador de cargas dirige las solicitudes de un cliente en particular a la misma VM de backend según un hash que se generó en la dirección IP del cliente y la dirección IP del balanceador de cargas (la dirección IP externa de una regla de reenvío externa).

    Console

    Para habilitar la afinidad de sesión de IP de cliente:

    1. Ve a la página Balanceo de cargas en Google Cloud Console.
      Ir a la página Balanceo de cargas
    2. Haz clic en Backends.
    3. Haz clic en my-tcp-lb (el nombre del servicio de backend que creaste para este ejemplo) y haz clic en Editar.
    4. En la página Detalles del servicio de backend, haz clic en Configuración avanzada.
    5. En Afinidad de sesión, selecciona IP de cliente en el menú.
    6. Haz clic en Actualizar.

    gcloud

    Usa el siguiente comando de gcloud para actualizar el servicio de backend my-tcp-lb y especificar la afinidad de sesión de IP de cliente:

    gcloud compute backend-services update my-tcp-lb \
        --global \
        --session-affinity=CLIENT_IP
    

    API

    Para establecer la afinidad de sesión de IP de cliente, realiza una solicitud PATCH al método backendServices/patch.

    PATCH https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/us-west1/backendServices/my-tcp-lb
    {
      "sessionAffinity": "CLIENT_IP"
    }
    

    Desvío de conexiones

    Puedes habilitar el desvío de conexiones en servicios de backend a fin de garantizar una interrupción mínima para tus usuarios cuando se finaliza una instancia que entrega tráfico, se quita de forma manual o la quita un escalador automático. Para obtener más información sobre el vaciado de conexiones, consulta la documentación Habilita el vaciado de conexiones.

    Balanceo de cargas del proxy TCP y firewalls de Google Cloud

    A diferencia de Network Load Balancing, no se puede controlar el acceso a TCP Proxy Load Balancing con reglas de firewall. Esto se debe a que el balanceo de cargas del proxy TCP se implementa en el perímetro

    Supervisa

    Para configurar la supervisión del balanceador de cargas del proxy TCP, consulta Usa la supervisión.

    Soluciona problemas

    Las páginas no se cargan desde la IP del balanceador de cargas

    Debido a que el puerto 110 es un puerto restringido para muchos navegadores, debes usar una herramienta como curl a fin de probar el balanceador de cargas. Si no puedes acceder a las páginas mediante curl, en el resto de esta sección se incluyen algunos pasos para solucionar el problema.

    Verifica el estado de las instancias

    Verifica que las instancias tengan el estado HEALTHY.

    gcloud compute backend-services get-health [BACKEND-SERVICE]
    

    Confirma que la regla de firewall sea correcta

    • El verificador de estado y el balanceador de cargas necesitan que 130.211.0.0/22 y 35.191.0.0/16 estén abiertas.
    • Si usas etiquetas de instancia, asegúrate de que la etiqueta aparezca dentro de TARGET_TAGS en la regla de firewall y revisa que todas las instancias tengan esa etiqueta. En este ejemplo, las instancias tienen la etiqueta tcp-lb.
    gcloud compute firewall-rules list
    
    NAME                      NETWORK SRC_RANGES                    RULES          SRC_TAGS TARGET_TAGS
    allow-tcplb-and-health    default 130.211.0.0/22,35.191.0.0/16  tcp:110                 tcp-lb
    

    Intenta llegar a instancias individuales

    De manera temporal, configura una regla de firewall que te permita acceder a las instancias de forma individual y, luego, intenta cargar una página desde una instancia específica.

    1. Abre el firewall para permitir el tráfico de cualquier origen a las instancias etiquetadas. Con ese fin, crea un filtro de origen que establezca el rango de IP de origen en 0.0.0.0/0 para el tráfico TCP en el puerto 110 hacia las instancias con la etiqueta tcp-lb.

      gcloud compute firewall-rules create allow-tcp110-0-0-0-0 \
          --source-ranges 0.0.0.0/0 \
          --target-tags tcp-lb \
          --allow tcp:110
      
      Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].
      NAME                 NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
      allow-tcp110-0-0-0-0 default 0.0.0.0/0  tcp:110          tcp-lb
      
    2. Busca la dirección EXTERNAL_IP de una de las instancias.

      gcloud compute instances list
      
      NAME             ZONE           MACHINE_TYPE  PREEMPTIBLE INTERNAL_IP EXTERNAL_IP    STATUS
      ig-us-central1-1 us-central1-b  n1-standard-1             10.240.0.8  EXTERNAL_IP RUNNING
      ig-us-central1-2 us-central1-b  n1-standard-1             10.240.0.11 EXTERNAL_IP RUNNING
      ig-us-east1-1    us-east1-b     n1-standard-1             10.240.0.12 EXTERNAL_IP RUNNING
      ig-us-east1-2    us-east1-b     n1-standard-1             10.240.0.13 EXTERNAL_IP RUNNING
    3. Accede a una o más instancias directo desde el navegador.

      curl [EXTERNAL_IP]:110
      
    4. Si no puedes acceder a tus instancias con este método, revisa si el software funciona de manera correcta. Si puedes acceder a tus instancias individualmente, verifica que tu regla de firewall del balanceador de cargas sea correcta.

      gcloud compute firewall-rules describe allow-tcp-lb-and-health
      
      allowed:
        IPProtocol: tcp
          ports:
          '110'
      creationTimestamp: '2017-03-16T15:21:34.119-07:00'
      description: ''
      id: '8144207668574597377'
      kind: compute#firewall
      name: allow-tcp-lb-and-health
      network: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/networks/default
      selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp-lb-and-health
      sourceRanges:
        130.211.0.0/22
        35.191.0.0/16
      targetTags:
        tcp-lb
    5. Cuando estés seguro de que las instancias funcionan, quita la regla de firewall que permite el acceso desde cualquier lugar.

      gcloud compute firewall-rules delete allow-tcp110-0-0-0-0
      
      The following firewalls will be deleted:
         [allow-tcp110-0-0-0-0]
      Do you want to continue (Y/n)?  y
      Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-tcp110-0-0-0-0].

    Qué sigue

    • Para obtener información sobre cómo funciona el balanceo de cargas del proxy TCP, consulta este artículo.