Configurare il reindirizzamento da HTTP a HTTPS per i bilanciatori del carico delle applicazioni interni a livello di regione

Questo argomento spiega come utilizzare i reindirizzamenti della mappa URL per reindirizzare tutte le richieste interne del bilanciatore del carico delle applicazioni da HTTP a HTTPS. L'esempio in questa pagina utilizza le porte ben note 80 (per HTTP) e 443 (per HTTPS). Tuttavia, non è obbligatorio utilizzare questi numeri di porta specifici. Ogni regola di forwarding per un bilanciatore del carico delle applicazioni può fare riferimento a una singola porta da 1 a 65535.

Per configurare i reindirizzamenti da HTTP ad HTTPS, devi creare due bilanciatori del carico, uno per il traffico HTTPS e un altro per il traffico HTTP. Ogni bilanciatore del carico ha la propria regola di forwarding, il proprio proxy di destinazione e la propria mappa di URL, ma condividono lo stesso indirizzo IP. Per il bilanciatore del carico HTTP, non è necessario configurare un backend perché il frontend reindirizza il traffico al backend del bilanciatore del carico HTTPS.

A grandi linee, per reindirizzare il traffico HTTP a HTTPS, devi:

  1. Crea un bilanciatore del carico HTTPS interno normale con un indirizzo IP interno riservato e condiviso.
  2. Testa il bilanciatore del carico per assicurarti che funzioni.
  3. Reindirizza il traffico al bilanciatore del carico HTTPS.

    Per farlo, devi creare un bilanciatore del carico HTTP interno parziale con un solo frontend. Il frontend riceve le richieste e le reindirizza al bilanciatore del carico HTTPS utilizzando le seguenti risorse:

    • Una regola di forwarding con lo stesso indirizzo IP interno riservato del bilanciatore del carico HTTPS creato nel passaggio 1
    • Un proxy HTTP di destinazione
    • Una mappa URL che reindirizza il traffico al bilanciatore del carico HTTPS

Come mostrato nel seguente diagramma, il bilanciatore del carico HTTPS è un bilanciatore del carico normale con i componenti del bilanciatore del carico delle applicazioni interno previsti.

Il bilanciatore del carico HTTP ha lo stesso indirizzo IP del bilanciatore del carico HTTPS e un'istruzione di reindirizzamento nella mappa URL.

Configurazione del reindirizzamento da HTTP a HTTPS interno.
Configurazione del reindirizzamento interno da HTTP a HTTPS (fai clic per ingrandire).

Crea il bilanciatore del carico HTTPS interno

Per configurare un bilanciatore del carico delle applicazioni interno regionale, segui le istruzioni riportate nella sezione Configurare un bilanciatore del carico delle applicazioni interno.

Se hai già un bilanciatore del carico delle applicazioni interno regionale funzionante, assicurati che abbia un indirizzo IP riservato e condiviso per la regola di inoltro, quindi vai alla sezione successiva, Reindirizza il traffico al bilanciatore del carico HTTPS.

Per i bilanciatori del carico delle applicazioni interni tra regioni, segui le istruzioni riportate in Configurare un bilanciatore del carico delle applicazioni interno tra regioni con backend di gruppi di istanze VM per creare due bilanciatori del carico, quindi segui le istruzioni riportate in Rindirizzare il traffico al bilanciatore del carico HTTPS.

Reindirizza il traffico al bilanciatore del carico HTTPS

Crea un bilanciatore del carico HTTP parziale con lo stesso indirizzo IP del bilanciatore del carico HTTPS creato nel passaggio precedente. Il bilanciatore del carico parziale reindirizza il traffico dalla porta 80 alla porta 443.

Console

Avvia la configurazione

  1. Nella console Google Cloud, vai alla pagina Bilanciamento del carico.

    Vai a Bilanciamento del carico

  2. Fai clic su Crea bilanciatore del carico.
  3. In Tipo di bilanciatore del carico, seleziona Bilanciatore del carico delle applicazioni (HTTP/HTTPS) e fai clic su Avanti.
  4. In Pubblico o interno, seleziona Interno e fai clic su Avanti.
  5. In Deployment tra regioni o in una regione singola, seleziona Ideale per workload regionali e fai clic su Avanti.
  6. Fai clic su Configura.

Configurazione di base

  1. Inserisci l7-ilb-http-redirect come nome del bilanciatore del carico.
  2. In Regione, seleziona us-west1.
  3. In Rete, seleziona lb-network.

Configura il servizio di backend

  1. Fai clic su Configurazione backend.
  2. Nel menu Seleziona servizi di backend, seleziona il servizio di backend l7-ilb-backend-service esistente.
  3. Fai clic su OK.

Configura la mappa URL

  1. Fai clic su Regole di routing.
  2. In Modalità, seleziona Regola avanzata per host e percorso.
  3. Fai clic su Aggiungi regola host e percorso.
  4. Imposta Host su *.

  5. In Matcher percorso (corrispondenze, azioni e servizi), inserisci il seguente codice:

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

  6. Assicurati che l7-ilb-backend-service sia l'unico servizio di backend per qualsiasi host e percorso senza corrispondenza.

Per informazioni sulla gestione del traffico, consulta Configurare la gestione del traffico per i bilanciatori del carico delle applicazioni interni.

Configura il frontend per HTTP

  1. Fai clic su Configurazione frontend.
  2. Imposta il nome della regola di forwarding su l7-ilb-forwarding-rule.
  3. Imposta Protocollo su HTTP.
  4. Imposta Subnet su backend-subnet.
  5. Imposta Porta su 80.
  6. Nel menu Indirizzo IP, seleziona l'indirizzo IP condiviso che è stato riservato per la regola di inoltro del bilanciatore del carico HTTPS.
  7. Fai clic su Fine.

Rivedi la configurazione

  1. Fai clic su Esamina e finalizza.
  2. Rivedi le impostazioni di configurazione del bilanciatore del carico.
  3. (Facoltativo) Fai clic su Codice equivalente per visualizzare la richiesta dell'API REST che verrà utilizzata per creare il bilanciatore del carico.
  4. Fai clic su Crea.

gcloud

  1. Crea una nuova mappa URL creando un file YAML con la configurazione del reindirizzamento del traffico. Sostituisci IP_ADDRESS con l' indirizzo IP condiviso riservato per la regola di inoltro del bilanciatore del carico 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 il file YAML nella nuova mappa URL:

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. Crea il proxy di destinazione del bilanciatore del carico HTTP:

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. Crea una nuova regola di forwarding e l'indirizzo IP condiviso:

    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
    

Testa il reindirizzamento del traffico

  1. Connettiti alla VM client.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Invia una richiesta HTTP a IP_ADDRESS sulla porta 80 e aspettati un reindirizzamento del traffico.

    curl -L -k IP_ADDRESS
  3. Visualizza l'output di esempio.

    Page served from: l7-ilb-backend-w11t
    

    Aggiungi -vvv per visualizzare ulteriori dettagli.

    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

Passaggi successivi