Configura el redireccionamiento de HTTP a HTTPS para balanceadores de cargas de aplicaciones internos regionales

En este tema, se muestra cómo usar redireccionamientos de mapa de URL para redireccionar todas las solicitudes del balanceador de cargas 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 necesario que uses estos números de puerto específicos. Cada regla de reenvío para un balanceador de cargas de aplicaciones puede hacer referencia a un puerto único del 1 al 65535.

Si quieres configurar redireccionamientos de HTTP a HTTPS, debes crear dos balanceadores de cargas: uno para el tráfico de HTTPS y otro para el tráfico de HTTP. Cada balanceador de cargas tiene su propia regla de reenvío, proxy de destino y mapa de URL, pero comparten la misma dirección IP. Para el balanceador de cargas de HTTP, no necesitas configurar un backend porque el frontend redirecciona el tráfico al backend del balanceador de cargas de HTTPS.

En un alto nivel, para redireccionar el tráfico de HTTP a HTTPS, debes hacer lo siguiente:

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

    Para hacerlo, debes crear un balanceador de cargas de HTTP interno parcial que solo tenga un frontend. El frontend recibe solicitudes y, luego, las redirecciona al balanceador de cargas de HTTPS mediante los siguientes recursos:

    • Una regla de reenvío con la misma dirección IP interna reservada que el balanceador de cargas de HTTPS que creaste en el paso 1
    • Un proxy HTTP de destino
    • Un mapa de URL que redirecciona el tráfico al balanceador de cargas de HTTPS

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

El balanceador de cargas de HTTP tiene la misma dirección IP que el balanceador de cargas de HTTPS y una instrucción de redireccionamiento en el mapa de URL.






Configuración de redireccionamiento de HTTP a HTTPS interno
Configuración de redireccionamiento de HTTP a HTTPS interno (haz clic para agrandar)

Crea el balanceador de cargas de HTTPS interno

Para configurar un balanceador de cargas de aplicaciones interno regional, usa las instrucciones en Configura un balanceador de cargas de aplicaciones interno.

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

Para balanceadores de cargas internos de aplicaciones entre regiones (Versión preliminar), usa las instrucciones en laConfigura un balanceador de cargas de aplicaciones interno entre regiones con backends de grupos de instancias de VM para crear dos balanceadores de cargas y, luego, seguir las instrucciones en Redirecciona el tráfico al balanceador de cargas de HTTPS.

Redirecciona el tráfico al balanceador de cargas de HTTPS

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

Console

Inicia la configuración

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

    Ir a Balanceo de cargas

  2. Haz clic en Crear balanceador de cargas.
  3. En Tipo de balanceador de cargas, selecciona Balanceador de cargas de aplicaciones (HTTP/HTTPS) y haz clic en Siguiente.
  4. En Orientado al público o interno, selecciona Interno y haz clic en Siguiente.
  5. En Implementación entre regiones o de una sola región, selecciona Ideal para cargas de trabajo regionales y haz clic en Siguiente.
  6. Haz clic en Configurar.

Configuración básica

  1. Para el Nombre del balanceador de cargas, ingresa l7-ilb-http-redirect.
  2. En Región, selecciona us-west1.
  3. En Red, selecciona lb-network.

Configura 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 existente l7-ilb-backend-service.
  3. Haz clic en OK.

Configura el mapa de URL

  1. Haga clic en Reglas de enrutamiento.
  2. En Modo, selecciona Regla sencilla de host y ruta de acceso.
  3. Haz clic en Agregar regla de host y ruta de acceso.
  4. Establece Hosts como *.

  5. En Comparador de rutas de acceso (coincidencias, acciones y servicios), ingresa 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 los hosts y rutas de acceso no coincidentes.

A fin de obtener información sobre la administración del tráfico, consulta Configura la administración del tráfico para balanceadores de cargas de aplicaciones internos.

Configura el frontend para HTTP

  1. Haz clic en Configuración de frontend.
  2. Configura el nombre de la regla de reenvío como l7-ilb-forwarding-rule.
  3. Establece el Protocolo en HTTP.
  4. Establece Subred en backend-subnet.
  5. Configura el Puerto en 80.
  6. En el menú Dirección IP, selecciona la IP compartida que se reservó para la regla de reenvío del balanceador de cargas de HTTPS.
  7. Haz clic en Listo.

Revisa la configuración

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

gcloud

  1. Para crear un nuevo mapa de URL, crea un archivo YAML con la configuración de redireccionamiento del tráfico: Reemplaza IP_ADDRESS por la dirección IP compartida que se reservó para la regla de reenvío del balanceador de cargas de 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 a un mapa de URL nuevo:

    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 cargas de 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 nueva 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
    

Prueba el redireccionamiento del tráfico

  1. Conéctate a la 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 un redireccionamiento del tráfico.

    curl -L -k IP_ADDRESS
    
  3. Consulta el resultado de muestra.

    Page served from: l7-ilb-backend-w11t
    

    Agrega -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

¿Qué sigue?