Configurar o redirecionamento de HTTP para HTTPS em balanceadores de carga de aplicativo internos regionais

Neste tópico, mostramos como usar redirecionamentos de mapa de URL para redirecionar todas as solicitações do balanceador de carga de aplicativo interno de HTTP para HTTPS. O exemplo nesta página usa as portas conhecidas 80 (para HTTP) e 443 (para HTTPS). No entanto, não é necessário usar esses números de porta específicos. Cada regra de encaminhamento para um balanceador de carga de aplicativo pode ter referência a uma única porta de 1 a 65535.

Ao usar redirecionamentos HTTP para HTTPS, é preciso criar dois balanceadores de carga, um para tráfego HTTPS e outro para o tráfego HTTP. Cada balanceador de carga tem a própria regra de encaminhamento, proxy de destino e mapa de URLs, mas eles compartilham o mesmo endereço IP. Para o balanceador de carga HTTP, não é necessário configurar um back-end porque o front-end redireciona o tráfego para o back-end do balanceador de carga HTTPS.

Em geral, para redirecionar o tráfego HTTP para HTTPS, é preciso seguir as etapas a seguir:

  1. Crie um balanceador de carga HTTPS interno normal com um endereço IP interno compartilhado reservado.
  2. Teste o balanceador de carga HTTPS para verificar se ele está funcionando.
  3. Redirecione o tráfego para o balanceador de carga HTTPS.

    Para isso, crie um balanceador de carga HTTP interno parcial que tenha apenas um front-end. O front-end recebe solicitações e as redireciona para o balanceador de carga HTTPS usando os seguintes recursos:

    • Uma regra de encaminhamento com o mesmo endereço IP interno reservado que o balanceador de carga HTTPS criado na etapa 1
    • Um proxy HTTP de destino.
    • Um mapa de URL que redireciona o tráfego para o balanceador de carga HTTPS.

Conforme mostrado no diagrama a seguir, o balanceador de carga HTTPS é um balanceador de carga normal com os componentes do balanceador de carga interno de aplicativo 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 URL.

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

Criar o balanceador de carga HTTPS interno

Para configurar um balanceador de carga de aplicativo regional interno, use as instruções em Como configurar um balanceador de carga de aplicativo interno.

Se você já tiver um balanceador de carga de aplicativo interno regional em funcionamento, verifique se ele tem um endereço IP compartilhado e reservado para a regra de encaminhamento e, em seguida, avance para o próxima seção, Redirecionar o tráfego para o balanceador de carga HTTPS.

Para balanceadores de carga de aplicativo internos entre regiões, use as instruções em Configurar um balanceador de carga de aplicativo interno entre regiões com back-ends de grupo de instâncias de VM para criar dois balanceadores de carga e, depois, siga as instruções em Como redirecionar o tráfego para o balanceador de carga HTTPS.

Redirecionar o tráfego para o balanceador de carga HTTPS

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

Console

Iniciar a configuração

  1. No console do Google Cloud, acesse a página Balanceamento de carga.

    Acessar o "Balanceamento de carga"

  2. Clique em Criar balanceador de carga.
  3. Em Tipo de balanceador de carga, selecione Balanceador de carga de aplicativo (HTTP/HTTPS) e clique em Próxima.
  4. Em Voltado ao público ou interno, selecione Interno e clique em Próxima.
  5. Em Implantação entre regiões ou região única, selecione Melhor para cargas de trabalho regionais e clique em Próxima.
  6. Clique em Configurar.

Configuração básica

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

Configurar 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 l7-ilb-backend-service.
  3. Clique em OK.

Configurar o mapa de URL

  1. Clique em Regras de roteamento.
  2. Em Modo, selecione Regra de host e caminho avançado.
  3. Clique em Adicionar host e regra de caminho.
  4. Defina Hosts como *.

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

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

  6. Certifique-se de que l7-ilb-backend-service seja o único serviço de back-end para qualquer host e qualquer caminho sem correspondência.

Para informações sobre o gerenciamento de tráfego, consulte Configurar o gerenciamento de tráfego para balanceadores de carga de aplicativos internos.

Configurar o front-end para HTTP

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

Analise a configuração

  1. Clique em Analisar e finalizar.
  2. Revise suas configurações do balanceador de carga.
  3. Opcional: clique em Código equivalente para conferir a solicitação de API REST que será usada para criar o balanceador de carga.
  4. Clique em Criar.

gcloud

  1. Crie um novo mapa de URL criando um arquivo YAML com a configuração de redirecionamento de tráfego. Substitua IP_ADDRESS pelo endereço IP compartilhado 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 arquivo YAML para o novo mapa de URL.

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. Criar o proxy de destino do 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. Criar uma nova regra de encaminhamento e o endereço IP compartilhado:

    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
    

Testar o redirecionamento de tráfego

  1. Conecte-se à VM do cliente.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Envie uma solicitação 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

A seguir