Configurar la redirección de HTTP a HTTPS en balanceadores de carga de aplicaciones internos regionales

En este tema se explica cómo usar redirecciones de mapa de URLs para redirigir todas las solicitudes de balanceador de carga de aplicaciones interno de HTTP a HTTPS. En el ejemplo de esta página se usan los puertos conocidos 80 (para HTTP) y 443 (para HTTPS). Sin embargo, no es obligatorio usar estos números de puerto específicos. Cada regla de reenvío de un balanceador de carga de aplicaciones puede hacer referencia a un único puerto del intervalo 1-65535.

Para configurar redireccionamientos de HTTP a HTTPS, debes crear dos balanceadores de carga: uno para el tráfico HTTPS y otro para el tráfico HTTP. Cada balanceador de carga tiene su propia regla de reenvío, proxy de destino y mapa de URLs, pero todos comparten la misma dirección IP. En el caso del balanceador de carga HTTP, no es necesario configurar un backend porque el frontend redirige el tráfico al backend del balanceador de carga HTTPS.

A grandes rasgos, para redirigir el tráfico HTTP a HTTPS, debes hacer lo siguiente:

  1. Crea un balanceador de carga HTTPS interno normal con una dirección IP interna compartida y reservada.
  2. Prueba el balanceador de carga para asegurarte de que funciona.
  3. Redirige el tráfico al balanceador de carga HTTPS.

    Para ello, debes crear un balanceador de carga HTTP interno parcial que solo tenga un frontend. El frontend recibe las solicitudes y, a continuación, las redirige al balanceador de carga HTTPS mediante los siguientes recursos:

    • Una regla de reenvío con la misma dirección IP interna reservada que el balanceador de carga HTTPS que has creado en el paso 1
    • Un proxy HTTP de destino
    • Un mapa de URLs que redirige el tráfico al balanceador de carga HTTPS

Como se muestra en el siguiente diagrama, el balanceador de carga HTTPS es un balanceador de carga normal con los componentes del balanceador de carga de aplicaciones interno esperados.

El balanceador de carga HTTP tiene la misma dirección IP que el balanceador de carga HTTPS y una instrucción de redirección en el mapa de URLs.

Configuración de redireccionamiento interno de HTTP a HTTPS.
Configuración de redirección interna de HTTP a HTTPS (haga clic para ampliar).

Crear el balanceador de carga HTTPS interno

Para configurar un balanceador de carga de aplicación interno regional, sigue las instrucciones de configurar un balanceador de carga de aplicación interno.

Si ya tienes un balanceador de carga de aplicación interno regional que funciona, asegúrate de que tenga una dirección IP compartida reservada para la regla de reenvío y, a continuación, ve a la siguiente sección, Redirigir el tráfico a tu balanceador de carga HTTPS.

En el caso de los balanceadores de carga de aplicaciones internos entre regiones, sigue las instrucciones de Configurar un balanceador de carga de aplicaciones interno entre regiones con backends de grupos de instancias de máquina virtual para crear dos balanceadores de carga y, a continuación, sigue las instrucciones de Redirigir el tráfico a tu balanceador de carga HTTPS.

Redirigir el tráfico a tu balanceador de carga HTTPS

Crea un balanceador de carga HTTP parcial que tenga la misma dirección IP que el balanceador de carga HTTPS creado en el paso anterior. El balanceador de carga parcial redirige el tráfico del puerto 80 al puerto 443.

Consola

Selecciona el tipo de balanceador de carga

  1. En la Google Cloud consola, ve a la página Balanceo de carga.

    Ir a Balanceo de carga

  2. Haga clic en Crear balanceador de carga.
  3. En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Público o interno, selecciona Interno y haz clic en Siguiente.
  5. En Implementación en una sola región o en varias regiones, selecciona La mejor opción para cargas de trabajo regionales y haz clic en Siguiente.
  6. Haz clic en Configurar.

Configuración básica

  1. En el nombre del balanceador de carga, introduce l7-ilb-http-redirect.
  2. En Región, selecciona us-west1.
  3. En Red, selecciona lb-network.

Configurar el servicio de backend

  1. Haz clic en Configuración de backend.
  2. En el menú Seleccionar servicios de backend, selecciona el servicio de backend l7-ilb-backend-service.
  3. Haz clic en Aceptar.

Configurar el mapa de URL

  1. Haz clic en Reglas de enrutamiento.
  2. En Modo, selecciona Regla de host y ruta avanzada.
  3. Haz clic en Añadir regla de host y ruta.
  4. Asigna el valor * a Hosts.

  5. En Comparador de rutas (coincidencias, acciones y servicios), introduce el siguiente código:

    name: matcher1
    defaultUrlRedirect:
      httpsRedirect: true
      hostRedirect: IP_ADDRESS:443
      redirectResponseCode: PERMANENT_REDIRECT

  6. Asegúrate de que l7-ilb-backend-service sea el único servicio de backend para cualquier host o ruta sin coincidencia.

Para obtener información sobre la gestión del tráfico, consulta Configurar la gestión del tráfico de balanceadores de carga de aplicación internos.

Configurar el frontend para HTTP

  1. Haz clic en Configuración de frontend.
  2. Asigna el nombre l7-ilb-forwarding-rule a la regla de reenvío.
  3. Define Protocol (Protocolo) como HTTP.
  4. Asigna el valor backend-subnet a Subred.
  5. Asigna el valor 80 a Port.
  6. En el menú Dirección IP, selecciona la dirección IP compartida que se ha reservado para la regla de reenvío del balanceador de carga HTTPS.
  7. Haz clic en Listo.

Revisar la configuración

  1. Haz clic en Revisar y finalizar.
  2. Revisa los ajustes de configuración de tu balanceador de carga.
  3. Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
  4. Haz clic en Crear.

gcloud

  1. Crea un mapa de URLs creando un archivo YAML con la configuración de redirección del tráfico. Sustituye IP_ADDRESS por la dirección IP compartida que se reservó para la regla de reenvío del balanceador de carga HTTPS.

    defaultService: regions/us-west1/backendServices/l7-ilb-backend-service
    kind: compute#urlMap
    name: l7-ilb-redirect-url-map
    hostRules:
    - hosts:
     - '*'
     pathMatcher: matcher1
    pathMatchers:
    - name: matcher1
     defaultUrlRedirect:
           hostRedirect: IP_ADDRESS:443
           redirectResponseCode: PERMANENT_REDIRECT
           httpsRedirect: True
  2. Importa el archivo YAML al nuevo mapa de URLs:

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. Crea el proxy de destino del balanceador de carga HTTP:

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. Crea una regla de reenvío y la dirección IP compartida:

    gcloud compute forwarding-rules create l7-ilb-forwarding-rule \
       --load-balancing-scheme=INTERNAL_MANAGED \
       --network=lb-network \
       --subnet=backend-subnet \
       --address=IP_ADDRESS \
       --ports=80 \
       --region=us-west1 \
       --target-http-proxy=l7-ilb-http-proxy \
       --target-http-proxy-region=us-west1
    

Probar la redirección del tráfico

  1. Conéctate a tu VM cliente.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Envía una solicitud HTTP a IP_ADDRESS en el puerto 80 y espera una redirección del tráfico.

    curl -L -k IP_ADDRESS
  3. Consulta el ejemplo de salida.

    Page served from: l7-ilb-backend-w11t
    

    Añade -vvv para ver más detalles.

    curl -L -k IP_ADDRESS -vvv
    

    • Rebuilt URL to: IP_ADDRESS/
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 80 (#0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / > < HTTP/1.1 308 Permanent Redirect < location: https://IP_ADDRESS:443/ < date: Fri, 07 Aug 2020 05:07:18 GMT < via: 1.1 google < content-length: 0 <
    • Curl_http_done: called premature == 0
    • Connection #0 to host IP_ADDRESS left intact
    • Issue another request to this URL: 'https://IP_ADDRESS:443/'
    • Trying IP_ADDRESS...
    • TCP_NODELAY set
    • Connected to IP_ADDRESS (IP_ADDRESS) port 443 (#1)
    • ALPN, offering h2
    • ALPN, offering http/1.1
    • Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
    • successfully set certificate verify locations:
    • CAfile: /etc/ssl/certs/ca-certificates.crt CApath: /etc/ssl/certs ... ...
    • SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
    • ALPN, server accepted to use h2
    • Server certificate:
    • subject: O=Google TESTING; CN=test_cert_1
    • start date: Jan 1 00:00:00 2015 GMT
    • expire date: Jan 1 00:00:00 2025 GMT
    • issuer: O=Google TESTING; CN=Intermediate CA
    • SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
    • Using HTTP2, server supports multi-use
    • Connection state changed (HTTP/2 confirmed)
    • Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0
    • Using Stream ID: 1 (easy handle 0x561a6b0e3ea0) > GET / HTTP/1.1 > Host: IP_ADDRESS > User-Agent: curl/7.52.1 > Accept: / >
    • Connection state changed (MAX_CONCURRENT_STREAMS updated)! < HTTP/2 200 < date: Fri, 07 Aug 2020 05:07:18 GMT < server: Apache/2.4.25 (Debian) < last-modified: Thu, 06 Aug 2020 13:30:21 GMT < etag: "2c-5ac357d7a47ec" < accept-ranges: bytes < content-length: 44 < content-type: text/html < via: 1.1 google < Page served from: l7-ilb-backend-https-w11t
    • Curl_http_done: called premature == 0
    • Connection #1 to host IP_ADDRESS left intact

Siguientes pasos