Configura el balanceo de cargas del proxy de SSL

En este documento, se proporcionan instrucciones para configurar el balanceo de cargas del proxy SSL. Antes de que comiences, lee los conceptos del balanceo de cargas del proxy SSL para obtener información sobre su funcionamiento.

Configura el balanceo de cargas SSL

En este ejemplo, se muestra la configuración del balanceo de cargas SSL global para un servicio simple que existe en dos regiones: us-central1 y us-east1. Deberás configurar lo que se describe a continuación:

  1. Cuatro instancias repartidas en dos regiones
  2. Grupos de instancias para mantener las instancias
  3. Componentes de backend, que incluyen la información siguiente:
    • Verificación de estado: para supervisar el estado de la instancia
    • Servicio de backend: supervisa los grupos de instancias y evita que excedan el uso configurado.
    • Backends: mantienen los grupos de instancias.
  4. Componentes frontend, que incluyen lo siguiente:
    • Un recurso de certificado SSL. Puedes usar un certificado autoadministrado, en el que proporcionas tu propio certificado SSL, o un certificado administrado por Google, en el que Google emite un certificado para tu dominio. Para obtener más información, consulta los tipos de certificados SSL.
    • El propio proxy SSL con su certificado SSL.
    • Una dirección IPv4 estática externa y una regla de reenvío que envíe el tráfico del usuario al proxy.
    • Una dirección IPv6 estática externa y una regla de reenvío que envíe el tráfico del usuario al proxy.
  5. Una regla de firewall que permita el tráfico desde el balanceador de cargas y el verificador de estado a las instancias.
  6. De manera opcional, una política de SSL para controlar las características de SSL que tu balanceador de cargas de proxy SSL negocia con los clientes.

Luego, probarás la configuración.

Configura instancias y grupos de instancias

En esta sección, se muestra cómo crear instancias y grupos de instancias y, luego, agregarlas a los grupos de instancias. Por lo general, un sistema de producción usaría grupos de instancias administrados basados en plantillas de instancias, pero esta configuración es veloz para las pruebas iniciales.

Crea instancias

Para la prueba, debes instalar Apache en cuatro instancias, dos en cada grupo de instancias. Por lo general, no se debe usar el balanceo de cargas SSL para el tráfico HTTP, pero se suele usar Apache, que es fácil de configurar con el fin de realizar pruebas.

Crea estas instancias con la etiqueta ssl-lb, que la regla de firewall usará más adelante.

Console


Crea instancias

  1. Ve a la página Instancias de VM en Google Cloud Platform 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 Zona en us-central1-b.
  5. Haz clic en Administración, seguridad, discos, redes, instancia única para revelar la configuración avanzada.
  6. En Administración, propaga el campo Etiquetas con ssl-lb.
  7. Establece la Secuencia de comandos de inicio en
    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>ig-us-central1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  8. Para el resto de los campos, deja los valores predeterminados.
  9. Haz clic en Crear.
  10. Crea ig-us-central1-2 con la misma configuración, a excepción de que la Secuencia de comandos de inicio, que se debe establecer como se muestra a continuación
    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>ig-us-central1-2</h1></body></html>' | sudo tee /var/www/html/index.html
  11. Crea ig-us-east1-1 con la misma configuración, a excepción de la Zona, que se debe establecer en us-east1-b, y la Secuencia de comandos de inicio, que se debe establecer como se muestra a continuación
    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>ig-us-east1-1</h1></body></html>' | sudo tee /var/www/html/index.html
  12. Crea ig-us-east1-2 con la misma configuración, a excepción de la Zona, que se debe establecer en us-east1-b, y la Secuencia de comandos de inicio, que se debe establecer como se muestra a continuación
    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>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 ssl-lb \
        --zone us-central1-b \
        --metadata startup-script="#! /bin/bash
          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>SSL load balanced instance - US central 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 ssl-lb \
        --zone us-central1-b \
         --metadata startup-script="#! /bin/bash
          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>SSL load balanced instance - US central 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 ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          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>SSL load balanced instance - US east 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 ssl-lb \
        --zone us-east1-b \
        --metadata startup-script="#! /bin/bash
          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>SSL load balanced instance - US east 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 para cada zona y agrega las instancias

Console


  1. Dirígete a la página Grupos de instancias en Google Cloud Platform Console.
    Ir a la página Grupos de instancias
  2. Haz clic en Crear grupo de instancias.
  3. Establece el Nombre en us-ig1.
  4. Establece la zona en us-central1-b.
  5. Haz clic en Especificar la asignación del nombre del puerto.
    1. En Asignación de nombre del puerto, haz clic en Agregar elemento.
    2. Ingresa un Nombre de puerto de ssl-lb y los Números de puerto de 443.
  6. En Definición de instancia, haz clic en Seleccionar instancias existentes.
  7. En Instancias de VM, selecciona ig-us-central1-1 y, también, ig-us-central1-2.
  8. Deja el resto de la configuración como está.
  9. Haz clic en Crear.
  10. Repite los pasos, pero configura la información siguiente:
    • Nombre: us-ig2
    • Zona: us-east1-b
    • Nombre del puerto de ssl-lb y Números de puerto de 443
    • Instancias: ig-us-east1-1 y, además, ig-us-east1-2.
  11. Verifica si ahora tienes dos grupos de instancias, cada uno con dos instancias.

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   ZONE          NETWORK MANAGED INSTANCES
    us-ig1 us-central1-b                 0
  2. Configura un puerto con nombre para el grupo de instancias.

    gcloud compute instance-groups set-named-ports us-ig1 \
        --named-ports ssl-lb:443 \
        --zone us-central1-b
    
  3. Agrega ig-us-central1-1 y, también 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   ZONE       NETWORK MANAGED INSTANCES
    us-ig2 us-east1-b                 0
  5. Configura un puerto con nombre para el grupo de instancias.

    gcloud compute instance-groups set-named-ports us-ig2 \
        --named-ports ssl-lb:443 \
        --zone us-east1-b
    
  6. Agrega ig-us-east1-1 y, también 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 en cada una de las dos regiones, cada una con dos instancias.

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 de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Crear balanceador de cargas.
  3. En Balanceo de cargas TCP, haz clic en Iniciar configuración.
  4. En Orientado a Internet o solo interno, selecciona De Internet a mis VM.
  5. En Varias regiones o una sola región, selecciona **Varias regiones (o no estoy seguro todavía).
  6. Establece el Nombre del balanceador de cargas en my-ssl-lb.
  7. Haz clic en Configuración de backend.
  8. Deja el Protocolo configurado en TCP o, de manera opcional, selecciona *SSL.
  9. Acepta los valores predeterminados para Puerto con nombre y Tiempo de espera.
  10. Deja el Tipo de backend configurado en Grupos de instancias.
  11. En Backend nuevo, selecciona el grupo de instancias us-ig1.
  12. Establece los Números de puerto en 443.
  13. Deja el resto de la configuración como está.
  14. En Backend nuevo, selecciona el grupo de instancias us-ig2.
  15. Establece los Números de puerto en 443.
  16. Deja el resto de la configuración como está.
  17. Haz clic en Listo.
  18. En Verificación de estado, selecciona Crear verificación de estado.
    1. Establece el Nombre de la verificación de estado en my-ssl-health-check.
    2. Configura el Protocolo en SSL.
    3. Deja el resto de la configuración igual.
    4. Haz clic en Guardar y continuar.
  19. Revisa si hay una marca de verificación verde junto a la Configuración de Backend en Google Cloud Platform Console. De no ser así, revisa de nuevo para comprobar si completaste todos los pasos anteriores.

Configura servicios de frontend

  1. Haz clic en Configuración de frontend.
  2. En IP y puerto de frontend nuevos, ingresa un Nombre de my-ssl-lb-forwarding-rule.
  3. Establece el Protocolo en SSL.
  4. En Dirección IP, selecciona Crear dirección IP.
    1. Ingresa un Nombre de ssl-lb-static-ip.
    2. Haz clic en Reservar.
  5. En Certificado, selecciona Crear un certificado nuevo.
  6. Ingresa un Nombre de my-ssl-cert.
  7. Si eliges Subir mi certificado, sigue estos pasos:
    1. En los campos correspondientes, sube lo que se detalla a continuación:
      • Certificado de clave pública (archivo .crt)
      • Cadena de certificados (archivo .csr)
      • Clave privada (archivo .key)
    2. Si quieres agregar otro certificado SSL, haz clic en Agregar certificado y, luego, selecciónalo en el menú desplegable Certificados o selecciona Crear certificado nuevo y sigue las instrucciones anteriores.
    3. Si lo deseas, activa el Protocolo de proxy.
    4. Haz clic en Crear.
  8. Si eliges Crear un certificado administrado por Google, ingresa un Dominio.
  9. Haz clic en Listo.
  10. Haz clic en Agregar IP y puerto de frontend.
  11. Ingresa un Nombre de my-ssl-lb-ipv6-forwarding-rule.
  12. Establece la versión de IP en IPv6.
  13. En Dirección IP, selecciona Crear dirección IP.
    1. Ingresa un Nombre de ssl-lb-static-ipv6.
    2. Haz clic en Reservar.
  14. En Certificado, selecciona my-ssl-cert.
  15. Haz clic en Listo.
  16. Si quieres agregar recursos de certificado, además del recurso de certificado SSL principal, sigue los pasos siguientes:
    1. Selecciona un certificado de la lista de Certificados o haz clic en Crear un certificado nuevo y sigue las instrucciones anteriores.
  17. Haz clic en Listo.
  18. Si quieres crear una política de SSL de manera opcional, sigue los pasos siguientes:
    1. En Política de SSL, selecciona Crear política.
    2. Ingresa un Nombre de my-ssl-policy.
    3. Selecciona TLS 1.0 para la Versión mínima de TLS.
    4. Selecciona MODERNO para el Perfil. Se mostrarán las Características habilitadas y las Características inhabilitadas.
    5. Haz clic en Crear.
  19. Revisa si hay una marca de verificación verde junto a la Configuración de frontend en Google Cloud Platform Console. De no ser así, revisa de nuevo para comprobar si completaste 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 ssl my-ssl-health-check --port 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/healthChecks/my-ssl-health-check].
NAME                PROTOCOL
my-ssl-health-check SSL

Crea un servicio de backend

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

También puedes configurar la comunicación sin encriptar entre el balanceador de cargas y las instancias con --protocol TCP.

Agrega grupos de instancias a tu servicio de backend

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

Configura tus recursos de certificado SSL

Si usas certificados autoadministrados, debes tener, al menos, un certificado SSL para subir. Si no lo tienes, consulta Certificados SSL. Cuando usas varios certificados SSL, debes crearlos uno por uno.

Si usas certificados SSL autoadministrados y no tienes una clave privada ni un certificado firmado, puedes crear y usar un certificado autofirmado a fin de realizar pruebas.

Si quieres crear un recurso de certificado SSL autoadministrado, ingresa el comando siguiente:

gcloud compute ssl-certificates create my-ssl-cert \
    --certificate [CRT_FILE_PATH] \
    --private-key [KEY_FILE_PATH]
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert].
NAME      CREATION_TIMESTAMP
my-ssl-cert 2016-02-20T20:53:33.584-08:00

Si quieres crear un recurso de certificado SSL administrado por Google, ingresa el comando siguiente:

    gcloud beta compute ssl-certificates create www-ssl-cert \
      --domains [DOMAIN]

Configura un proxy SSL de destino

El balanceo de cargas SSL admite la creación de un proxy SSL de destino que tenga de uno a diez certificados SSL. Antes de que ejecutes este comando, debes crear un recurso de certificado SSL para cada certificado.

Si quieres activar el encabezado de proxy, debes establecerlo en PROXY_V1, en lugar de none. De manera opcional, puedes adjuntar una política de SSL al proxy de destino. Primero, crea la política.

gcloud compute ssl-policies create my-ssl-policy \
    --profile MODERN --min-tls-version 1.0

Luego, adjunta la política al proxy de destino.

gcloud compute target-ssl-proxies create my-ssl-lb-target-proxy \
    --backend-service my-ssl-lb \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...] \
    --ssl-policy my-ssl-policy \
    --proxy-header NONE
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

Reserva direcciones IPv4 y, también, IPv6 estáticas globales

Tus clientes usan estas direcciones IP para acceder a tu servicio de balanceo de cargas.

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

Configura reglas de reenvío globales

Crea reglas de reenvío globales asociadas al proxy de destino. Reemplaza [LB_STATIC_IP] y [LB_STATIC_IPV6] por las direcciones IP que generaste en Reservar una dirección IP estática global.

gcloud compute forwarding-rules create my-ssl-lb-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IP] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].
NAME                         REGION IP_ADDRESS     IP_PROTOCOL TARGET
my-ssl-lb-forwarding-rule           [LB_STATIC_IP] SSL         my-ssl-lb-target-proxy
gcloud compute forwarding-rules create my-ssl-lb-ipv6-forwarding-rule \
    --global \
    --target-ssl-proxy my-ssl-lb-target-proxy \
    --address [LB_STATIC_IPV6] \
    --ports 443
Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-ipv6-forwarding-rule].
NAME                           REGION    IP_ADDRESS       IP_PROTOCOL TARGET
my-ssl-lb-ipv6-forwarding-rule           [LB_STATIC_IPV6] SSL         my-ssl-lb-target-proxy

Crea una regla de firewall para el balanceador de cargas SSL

Configura el firewall para permitir el tráfico del balanceador de cargas y el verificador de estado a las instancias.

Console


  1. Ve a la página Reglas de firewall en Google Cloud Platform Console.
    Ir a la página de reglas de Firewall
  2. Haz clic en Crear regla de firewall.
  3. Ingresa un Nombre de allow-ssl-lb-and-health.
  4. En Red, selecciona default.
  5. En Destinos, selecciona Etiquetas de destino especificadas.
  6. Establece las Etiquetas de destino en ssl-lb.
  7. Establece el filtro de fuente en IP ranges.
  8. Establece los rangos de IP de origen en 130.211.0.0/2235.191.0.0/16.
  9. Establece los protocolos y puertos permitidos en tcp:443.
  10. Haz clic en Crear.

gcloud


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

Si usas un certificado administrado por Google, confirma que el estado de tu recurso de certificado sea ACTIVO. Para obtener más información, consulta el estado de los recursos del certificado SSL administrado por Google.

gcloud beta compute ssl-certificates list

Prueba el balanceador de cargas

En tu navegador web, conéctate a tu dirección IP estática con HTTPS. En esta configuración de prueba, las instancias usan certificados autofirmados. Por lo tanto, verás una advertencia en tu navegador la primera vez que accedas a una página. Haz clic en la advertencia para ver la página real. Reemplaza [IP_ADDRESS] por la dirección IPv4 o IPv6 que creaste antes.

https://[IP_ADDRESS]

Deberías ver uno de los hosts de la región más cercana a ti. Vuelve a cargar la página hasta que veas la otra instancia de esa región. Para ver las instancias de la otra región, detén las instancias en la región más cercana.

Como alternativa, puedes usar curl desde la línea de comandos de tu máquina local. Si usas un certificado autofirmado en el proxy SSL, también debes especificar -k. La opción curl -k permite que curl funcione incluso si tienes un certificado autofirmado o no. Si tienes un certificado normal, puedes quitar ese parámetro. Solo debes usar el parámetro -k para probar tu propio sitio. En circunstancias normales, un certificado válido es una medida de seguridad importante y no se deben ignorar sus advertencias.

Reemplaza [IP_ADDRESS] por la dirección IPv4 o IPv6 que creaste antes.

curl -k https://[IP_ADDRESS]

Comandos de proxy SSL adicionales

Crea una lista de proxies SSL de destino

Console


Dirígete a la página de la lista de proxy de destino en Google Cloud Platform Console.
Ir a la página de lista de proxy de destino

gcloud


gcloud compute target-ssl-proxies list
NAME                   PROXY_HEADER SERVICE   SSL_CERTIFICATES
my-ssl-lb-target-proxy NONE         my-ssl-lb my-ssl-cert

Describe los proxies SSL de destino.

Console


  1. Dirígete a la página de la lista de proxy de destino en Google Cloud Platform Console.
    Ir a la página de lista de proxy de destino
  2. Haz clic en el nombre de tu proxy SSL de destino.

gcloud


gcloud compute target-ssl-proxies describe [PROXY_NAME]

creationTimestamp: '2016-02-20T20:55:17.633-08:00'
id: '9208913598676794842'
kind: compute#targetSslProxy
name: my-ssl-lb-target-proxy
proxyHeader: NONE
selfLink: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy
service: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-ssl-lb
sslCertificates:

  • https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/sslCertificates/my-ssl-cert

Borra el proxy SSL de destino

Si quieres borrar un proxy de destino, primero debes borrar toda regla de reenvío global que haga referencia a este.

Console


  1. Dirígete a la página de la lista de reglas de reenvío global en Google Cloud Platform Console.
    Ir a la página de la lista de reglas de reenvío global
  2. Selecciona la casilla de verificación junto a tu regla de reenvío global.
  3. Haz clic en Borrar.
  4. Dirígete a la página de la lista de proxy de destino en Google Cloud Platform Console.
    Ir a la página de lista de proxy de destino
  5. Selecciona la casilla de verificación junto a tu proxy SSL de destino.
  6. Haz clic en Borrar.

Como alternativa, puedes borrar todos los componentes del balanceador de cargas de la manera siguiente:

  1. Ve a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en el ícono de la papelera al lado derecho de la fila deseada.
  3. Haz clic en Borrar balanceador de cargas para confirmar.

gcloud


  1. Borra la regla de reenvío global.

    gcloud compute forwarding-rules delete my-ssl-lb-forwarding-rule \
        --global
    

    The following global forwarding rules will be deleted:

    • [my-ssl-lb-forwarding-rule]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/forwardingRules/my-ssl-lb-forwarding-rule].

  2. Borra el proxy SSL.

    gcloud compute target-ssl-proxies delete my-ssl-lb-target-proxy
    

    The following target ssl proxies will be deleted:

    • [my-ssl-lb-target-proxy]

    Do you want to continue (Y/n)? y

    Deleted [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Actualiza un servicio de backend para el proxy SSL de destino

Puedes usar el comando update para apuntar tu proxy SSL a otro servicio de backend. En este ejemplo, se crea un servicio de backend nuevo que apunta el proxy hacia él. Luego, realiza una actualización y apunta el proxy al servicio de backend original.

Console


Usa la herramienta de línea de comandos de gcloud para este paso.

gcloud


  1. Crea un segundo servicio de backend con la misma verificación de estado.

    gcloud compute backend-services create my-other-backend-service \
        --protocol SSL \
        --health-checks my-ssl-health-check \
        --global
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/backendServices/my-other-backend-service].
    NAME                     BACKENDS PROTOCOL
    my-other-backend-service          SSL
  2. Apunta el proxy SSL al backend nuevo.

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-other-backend-service
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].
  3. Este servicio de backend no tiene instancias, por lo que si intentas usar el proxy en este momento, no obtendrás tus páginas web. Para seguir probando la configuración original, apunta el proxy SSL al primer servicio de backend.

    gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
        --backend-service my-ssl-lb
    
    Updated [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Actualiza el recurso del certificado SSL para el proxy SSL de destino

Usa este comando para reemplazar el certificado SSL en el proxy SSL. Has creado los recursos de certificados SSL adicionales que necesitarás.

Console


  1. Ve a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Editar junto al balanceador de cargas.
  3. Haz clic en Configuración de frontend.
  4. En el menú desplegable Certificado, selecciona el certificado nuevo.
  5. Haz clic en Add certificate en caso de que necesites agregar más certificados.
  6. Haz clic en Listo.

gcloud


Con un máximo de diez certificados SSL, ejecuta el comando siguiente:

gcloud compute target-ssl-proxies set-ssl-certificates {PROXY_NAME] \
    --ssl-certificates [SSL_CERT_1][,[SSL_CERT_2],...]

Actualizado [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/targetSslProxies/my-ssl-lb-target-proxy].

Parámetros opcionales

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

El balanceo de cargas de Google Cloud con proxy SSL finaliza las conexiones SSL del cliente y crea conexiones nuevas a las instancias. Por lo tanto, la IP de cliente original y la información del puerto no se conservan de manera predeterminada.

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.

También puedes configurar el protocolo PROXY para las verificaciones de estado de TCP y SSL.

El encabezado del protocolo PROXY, por lo general, será una sola línea de texto legible para el usuario con el formato siguiente:

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

En este ejemplo, la dirección IP de cliente es 192.0.2.1, la dirección IP del balanceo de cargas es 198.51.100.1, el puerto del cliente es 15221 y el puerto de destino es 443:

PROXY TCP4 192.0.2.1 198.51.100.1 15221 443\r\n

Cuando no se sabe la dirección IP de cliente, el balanceador de cargas genera un encabezado de protocolo PROXY con el formato siguiente:

PROXY UNKNOWN\r\n

Actualiza el encabezado del protocolo PROXY para el proxy

Usa este comando a fin de cambiar el encabezado del protocolo PROXY para un proxy SSL de destino existente.

Console


  1. Ve a la página Balanceo de cargas de Google Cloud Platform Console.
    Ir a la página Balanceo de cargas
  2. Haz clic en Editar para tu balanceador de cargas.
  3. Haz clic en Configuración de frontend.
  4. Cambia el valor del campo del Protocolo Proxy.
  5. Haz clic en Actualizar para guardar los cambios.

gcloud


gcloud compute target-ssl-proxies update my-ssl-lb-target-proxy \
    --proxy-header [NONE | PROXY_V1]

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 desvío de conexiones, consulta la documentación sobre cómo habilitar el desvío de conexión.

Componentes del balanceador de cargas

Verificaciones de estado

Las verificaciones de estado determinan qué instancias pueden recibir conexiones nuevas. 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 SSL, usa una verificación de estado SSL.
  • Usa una verificación de estado TCP, a menos 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 de tus instancias provienen de direcciones en los rangos 130.211.0.0/2235.191.0.0/16. Tus reglas de firewall deben permitir estas conexiones en el puerto relevante. Si quieres obtener instrucciones, consulta la sección sobre cómo crear una regla de firewall para el balanceador de cargas SSL.

Consulta Verificaciones de estado a fin de obtener más información sobre las verificaciones de estado.

Servicio de backend

Un recurso de servicio de backend proporciona información de configuración al balanceador de cargas, incluido lo siguiente.

  • Los servicios de backend dirigen el tráfico entrante a uno o más backends conectados (según el modo de balanceo de cargas, que se explica más adelante). Cada backend consta de un grupo de instancias y una configuración adicional para balancear el tráfico entre las instancias del grupo de instancias. Cada grupo de instancias consta de una o más instancias.
  • Cada servicio de backend también especifica qué verificaciones de estado se realizan para las instancias en los grupos de instancias que se agregaron al servicio de backend.
  • La duración de las conexiones de proxy SSL inactivas a través del balanceador de cargas está limitada por el tiempo de espera del servicio de backend.

Cuando configuras un servicio de backend, debes agregar instancias y especificar un modo de balanceo que determine cuánto tráfico puede enviar el balanceador de cargas a las instancias. Una vez que se alcanza el límite, se envían solicitudes adicionales a la instancia que se encuentra más cerca del usuario, si tiene capacidad.

El proxy SSL admite los modos de balanceo siguientes:

  • UTILIZATION (predeterminado): las instancias pueden aceptar tráfico si el uso de CPU promedio actual del grupo de instancias está por debajo de un valor especificado. Para configurar este valor, usa el parámetro --max-utilization y pasa un valor de entre 0.0 (0%) y 1.0 (100%). El valor predeterminado es 0.8 (80%).
  • CONNECTION: las instancias pueden aceptar tráfico si la cantidad de conexiones es inferior a un valor especificado. Este valor puede ser uno de los que se detallan a continuación:
    • --max-connections: la cantidad máxima de conexiones en todas las instancias de backend en el grupo de instancias.
    • --max-connections-per-instance: la cantidad máxima de conexiones que puede controlar una sola instancia. Las solicitudes se reenvían si el promedio del grupo no supera esta cantidad.

Puedes especificar un --max-connections o --max-connections-per-instance, incluso si estableces el modo de balanceo en UTILIZATION. Si --max-utilization y el parámetro de conexión se especifican, se considera que el grupo está en uso pleno cuando se alcanza cualquiera de los límites.

Para obtener más información sobre el recurso de servicio de backend, consulta la Explicación de los servicios de backend.

Certificados SSL

Si quieres usar el balanceo de cargas SSL, debes crear, al menos, un certificado SSL que pueda usar el proxy de destino para el balanceador de cargas. Puedes configurar el proxy de destino con hasta quince certificados SSL.

Estos certificados pueden ser autoadministrados o administrados por Google.

Si usas certificados SSL autoadministrados y no tienes una clave privada ni un certificado firmado, puedes crear y usar un certificado autofirmado a fin de realizar pruebas. Consulta Certificados SSL para obtener más información. No uses un certificado autofirmado para fines de producción. Si usas varios certificados SSL, debes crear un recurso de certificado SSL para cada certificado.

Regla de reenvío

Crea una regla de reenvío a fin de reenviar direcciones IP y puertos específicos al proxy SSL de destino. Cuando el tráfico del cliente llega a tu dirección IP externa, esta regla de reenvío le indica a la red que envíe ese tráfico a tu proxy SSL.

Consulta las Reglas de reenvío para obtener más información.

Recomendaciones

  • Debes configurar el balanceador de cargas para que anteponga un encabezado de protocolo PROXY versión 1 si quieres conservar la información de conexión del cliente.
  • Si tu tráfico es HTTPS, debes usar el Balanceo de cargas HTTPS y no el SSL proxy para el balanceo de cargas.

Supervisión

Para obtener información sobre la supervisión del balanceo de cargas de proxy de SSL, consulta Supervisión del proxy TCP/SSL.

Soluciona problemas

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

Verifica el estado de las instancias

Verifica que las instancias tengan el estado SALUDABLE.

gcloud compute backend-services get-health my-ssl-lb
---
backend: https://www.googleapis.com/resourceviews/v1/projects/[PROJECT_ID]/zones/us-central1-b/resourceViews/us-ig1
status:
  kind: compute#backendServiceGroupHealth
---
backend: https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/zones/us-east1-b/instanceGroups/us-ig2
status:
  kind: compute#backendServiceGroupHealth

Confirma que tu regla de firewall sea correcta

  • El verificador de estado y el balanceador de cargas requieren estas direcciones IP para permitir el tráfico: 130.211.0.0/2235.191.0.0/16.
  • Si usas SSL entre el balanceador de cargas y las instancias, debes usar las verificaciones de estado de SSL. Asegúrate de que la regla de firewall permita tcp:443 desde los rangos de direcciones IP de origen 130.211.0.0/22 y 35.191.0.0/16.
  • Si usas TCP entre el balanceador de cargas y las instancias, usa las verificaciones de estado de TCP. Asegúrate de que la regla de firewall permita tcp:80 desde los rangos de IP de origen 130.211.0.0/22 y 35.191.0.0/16.
  • Si usas etiquetas de la instancia, asegúrate de que la etiqueta se muestre en la lista TARGET_TAGS de la regla de firewall y asegúrate de que todas tus instancias tengan esta etiqueta. En este ejemplo, las instancias se etiquetan con ssl-lb.
gcloud compute firewall-rules list
NAME                      NETWORK SRC_RANGES                  RULES                        SRC_TAGS TARGET_TAGS
allow-ssl-lb-and-health  default 130.211.0.0/22,35.191.0.0/16 tcp:443                      ssl-lb

Intenta llegar a instancias individuales

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

  1. Abre el firewall para permitir el tráfico desde cualquier fuente hasta las instancias etiquetadas.

    gcloud compute firewall-rules create allow-ssl-0-0-0-0   \
        --source-ranges 0.0.0.0/0   \
        --target-tags ssl-lb    \
        --allow tcp:443
    
    Created [https://www.googleapis.com/compute/v1/projects/[PROJECT_ID]/global/firewalls/allow-ssl-0-0-0-0].
    NAME              NETWORK SRC_RANGES RULES   SRC_TAGS TARGET_TAGS
    allow-ssl-0-0-0-0 default 0.0.0.0/0  tcp:443          ssl-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. Luego, accede a una o más de tus instancias directo desde tu navegador.

    https://[EXTERNAL_IP]
    
  4. Si no puedes acceder a tus instancias con este método, asegúrate de que el software se ejecute de forma correcta. Si es así, asegúrate de que la regla de firewall del balanceador de cargas sea correcta.

    gcloud compute firewall-rules describe allow-ssl-lb-and-health
    
    allowed:
      IPProtocol: tcp
      ports:
      '443'
    creationTimestamp: '2016-02-20T22:27:15.094-08:00'
    description: ''
    id: '5304629236729177644'
    kind: compute#firewall
    name: allow-130-211-0-0-22-ssl
    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-ssl-lb-and-health
    sourceRanges:
      130.211.0.0/22,35.191.0.0/16
    targetTags:
      ssl-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-ssl-0-0-0-0
    
    The following firewalls will be deleted:
       [allow-ssl-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-ssl-0-0-0-0].

Próximos pasos

¿Te sirvió esta página? Envíanos tu opinión:

Enviar comentarios sobre…