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:
- Crea un balanceador de carga HTTPS interno normal con una dirección IP interna compartida y reservada.
- Prueba el balanceador de carga para asegurarte de que funciona.
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.
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
En la Google Cloud consola, ve a la página Balanceo de carga.
- Haga clic en Crear balanceador de carga.
- En Tipo de balanceador de carga, selecciona Balanceador de carga de aplicación (HTTP/HTTPS) y haz clic en Siguiente.
- En Público o interno, selecciona Interno y haz clic en Siguiente.
- 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.
- Haz clic en Configurar.
Configuración básica
- En el nombre del balanceador de carga, introduce
l7-ilb-http-redirect
. - En Región, selecciona
us-west1
. - En Red, selecciona
lb-network
.
Configurar el servicio de backend
- Haz clic en Configuración de backend.
- En el menú Seleccionar servicios de backend, selecciona el servicio de backend
l7-ilb-backend-service
. - Haz clic en Aceptar.
Configurar el mapa de URL
- Haz clic en Reglas de enrutamiento.
- En Modo, selecciona Regla de host y ruta avanzada.
- Haz clic en Añadir regla de host y ruta.
Asigna el valor
*
a Hosts.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
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
- Haz clic en Configuración de frontend.
- Asigna el nombre
l7-ilb-forwarding-rule
a la regla de reenvío. - Define Protocol (Protocolo) como
HTTP
. - Asigna el valor
backend-subnet
a Subred. - Asigna el valor
80
a Port. - 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.
- Haz clic en Listo.
Revisar la configuración
- Haz clic en Revisar y finalizar.
- Revisa los ajustes de configuración de tu balanceador de carga.
- Opcional: Haz clic en Código equivalente para ver la solicitud de la API REST que se usará para crear el balanceador de carga.
- Haz clic en Crear.
gcloud
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
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
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
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
Conéctate a tu VM cliente.
gcloud compute ssh l7-ilb-client-us-west1-a \ --zone=us-west1-a
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
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
Para saber cómo funcionan los balanceadores de carga de aplicación internos, consulta la descripción general de los balanceadores de carga de aplicación internos.
Para gestionar el recurso de subred de solo proxy que requieren los balanceadores de carga de aplicaciones internos, consulta Subred de solo proxy para balanceadores de carga de aplicaciones internos.