Configure o redirecionamento de HTTP para HTTPS para balanceadores de carga de aplicações internos regionais

Este tópico mostra como usar redirecionamentos do mapa de URLs para redirecionar todos os pedidos do balanceador de carga de aplicações internos de HTTP para HTTPS. O exemplo nesta página usa as portas conhecidas 80 (para HTTP) e 443 (para HTTPS). No entanto, não é obrigatório usar estes números de porta específicos. Cada regra de encaminhamento para um Application Load Balancer pode referenciar uma porta única de 1 a 65535.

Para configurar redirecionamentos de HTTP para HTTPS, tem de criar dois balanceadores de carga, um para o tráfego HTTPS e outro para o tráfego HTTP. Cada equilibrador de carga tem a sua própria regra de encaminhamento, proxy de destino e mapa de URLs, mas partilha o mesmo endereço IP. Para o balanceador de carga HTTP, não precisa de configurar um back-end porque o front-end redireciona o tráfego para o back-end do balanceador de carga HTTPS.

A um nível elevado, para redirecionar o tráfego HTTP para HTTPS, tem de fazer o seguinte:

  1. Crie um balanceador de carga HTTPS interno normal com um endereço IP interno reservado e partilhado.
  2. Teste o equilibrador de carga para se certificar de que está a funcionar.
  3. Redirecione o tráfego para o balanceador de carga HTTPS.

    Para o fazer, tem de criar um balanceador de carga HTTP interno parcial que tenha apenas um front-end. O frontend recebe pedidos e, em seguida, redireciona-os para o balanceador de carga HTTPS através dos seguintes recursos:

    • Uma regra de encaminhamento com o mesmo endereço IP interno reservado que o balanceador de carga HTTPS que criou no passo 1
    • Um proxy HTTP de destino
    • Um mapa de URLs que redireciona o tráfego para o balanceador de carga HTTPS

Conforme mostrado no diagrama seguinte, o balanceador de carga HTTPS é um balanceador de carga normal com os componentes do balanceador de carga de aplicações interno esperados.

O balanceador de carga HTTP tem o mesmo endereço IP que o balanceador de carga HTTPS e uma instrução de redirecionamento no mapa de URLs.

Configuração de redirecionamento interno de HTTP para HTTPS.
Configuração de redirecionamento interno de HTTP para HTTPS (clique para aumentar).

Crie o balanceador de carga HTTPS interno

Para configurar um Application Load Balancer interno regional, siga as instruções para configurar um Application Load Balancer interno.

Se já tiver um Application Load Balancer interno regional em funcionamento, certifique-se de que tem um endereço IP partilhado reservado para a regra de encaminhamento e, em seguida, avance para a secção seguinte, Redirecione o tráfego para o seu balanceador de carga HTTPS.

Para balanceadores de carga de aplicações internos entre regiões, use as instruções em Configure um balanceador de carga de aplicações interno entre regiões com back-ends de grupo de instâncias de VMs para criar dois balanceadores de carga e, em seguida, siga as instruções em Redirecione o tráfego para o seu balanceador de carga HTTPS.

Redirecione o tráfego para o seu balanceador de carga HTTPS

Crie um balanceador de carga de HTTP parcial que tenha o mesmo endereço IP que o balanceador de carga de HTTPS criado no passo anterior. O balanceador de carga parcial redireciona o tráfego da porta 80 para a porta 443.

Consola

Selecione o tipo de balanceador de carga

  1. Na Google Cloud consola, aceda à página Equilíbrio de carga.

    Aceda a Balanceamento de carga

  2. Clique em Criar equilibrador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicações (HTTP/HTTPS) e clique em Seguinte.
  4. Para Público ou interno, selecione Interno e clique em Seguinte.
  5. Para a Implementação em várias regiões ou numa única região, selecione Melhor para cargas de trabalho regionais e clique em Seguinte.
  6. Clique em Configurar.

Configuração básica

  1. Para o nome do balanceador de carga, introduza l7-ilb-http-redirect.
  2. Para Região, selecione us-west1.
  3. Para Rede, selecione lb-network.

Configure o serviço de back-end

  1. Clique em Configuração de back-end.
  2. No menu Selecionar serviços de back-end, selecione o serviço de back-end existente l7-ilb-backend-service.
  3. Clique em OK.

Configure o mapa de URLs

  1. Clique em Regras de encaminhamento.
  2. Para Modo, selecione Regra de anfitrião e caminho avançada.
  3. Clique em Adicionar regra de anfitrião e caminho.
  4. Defina Hosts como *.

  5. Para Correspondência de caminhos (correspondências, ações e serviços), introduza o seguinte código:

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

  6. Certifique-se de que o l7-ilb-backend-service é o único serviço de back-end para qualquer anfitrião não correspondente e qualquer caminho não correspondente.

Para ver informações sobre a gestão de tráfego, consulte o artigo Configure a gestão de tráfego para equilibradores de carga de aplicações internos.

Configure o front-end para HTTP

  1. Clique em Configuração do front-end.
  2. Defina o nome da regra de encaminhamento como l7-ilb-forwarding-rule.
  3. Defina Protocol como HTTP.
  4. Defina a Sub-rede como backend-subnet.
  5. Defina a Porta para 80.
  6. No menu Endereço IP, selecione o endereço IP partilhado que foi reservado para a regra de encaminhamento do balanceador de carga HTTPS.
  7. Clique em Concluído.

Reveja a configuração

  1. Clique em Rever e finalizar.
  2. Reveja as definições de configuração do equilibrador de carga.
  3. Opcional: clique em Código equivalente para ver o pedido da API REST que vai ser usado para criar o equilibrador de carga.
  4. Clique em Criar.

gcloud

  1. Crie um novo mapa de URLs criando um ficheiro YAML com a configuração de redirecionamento de tráfego. Substitua IP_ADDRESS pelo endereço IP partilhado que foi reservado para a regra de encaminhamento do 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. Importe o ficheiro YAML para o novo mapa de URLs:

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

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. Crie uma nova regra de encaminhamento e o endereço IP partilhado:

    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
    

Teste o redirecionamento de tráfego

  1. Estabeleça ligação à VM do cliente.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Envie um pedido HTTP para IP_ADDRESS na porta 80 e espere um redirecionamento de tráfego.

    curl -L -k IP_ADDRESS
  3. Veja o exemplo de saída.

    Page served from: l7-ilb-backend-w11t
    

    Adicione -vvv para ver mais detalhes.

    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

O que se segue?