Configurer la redirection HTTP vers HTTPS pour les équilibreurs de charge d'application internes régionaux

Cette rubrique explique comment utiliser les redirections de mappage d'URL pour rediriger toutes les requêtes de l'équilibreur de charge d'application interne du protocole HTTP vers HTTPS. L'exemple de cette page utilise les ports connus 80 (pour HTTP) et 443 (pour HTTPS). Toutefois, vous n'êtes pas obligé d'utiliser ces numéros de port spécifiques. Chaque règle de transfert d'un équilibreur de charge d'application peut référencer un port unique compris entre 1 et 65 535.

Pour utiliser des redirections HTTP vers HTTPS, vous devez créer deux équilibreurs de charge, un pour le trafic HTTPS et un pour le trafic HTTP. Chaque équilibreur de charge possède ses propres règles de transfert, proxy cible et mappage d'URL, mais ils partagent la même adresse IP. Pour l'équilibreur de charge HTTP, il n'est pas nécessaire de configurer un backend, car l'interface redirige le trafic vers le backend de l'équilibreur de charge HTTPS.

En règle générale, pour rediriger le trafic HTTP vers HTTPS, vous devez suivre la procédure suivante :

  1. Créez un équilibreur de charge HTTPS interne normal avec une adresse IP interne réservée et partagée.
  2. Testez l'équilibreur de charge HTTPS pour vous assurer qu'il fonctionne.
  3. Redirigez le trafic vers l'équilibreur de charge HTTPS.

    Pour ce faire, vous devez créer un équilibreur de charge HTTP interne partiel qui ne comporte qu'une interface. L'interface reçoit les requêtes, puis les redirige vers l'équilibreur de charge HTTPS à l'aide des ressources suivantes :

    • Une règle de transfert avec la même adresse IP interne réservée que l'équilibreur de charge HTTPS que vous avez créé à l'étape 1
    • Un proxy HTTP cible
    • Un mappage d'URL qui redirige le trafic vers l'équilibreur de charge HTTPS

Comme le montre le schéma suivant, l'équilibreur de charge HTTPS est un équilibreur de charge normal doté des composants d'équilibreur de charge d'application interne attendus.

L'équilibreur de charge HTTP possède la même adresse IP que l'équilibreur de charge HTTPS, et une instruction de redirection dans le mappage d'URL.

Configuration de la redirection HTTP vers HTTPS interne
Configuration de la redirection HTTP vers HTTPS interne (cliquez pour agrandir).

Créer l'équilibreur de charge HTTPS interne

Pour configurer un équilibreur de charge d'application interne régional, suivez les instructions de la section Configurer un équilibreur de charge d'application interne.

Si vous disposez déjà d'un équilibreur de charge d'application interne régional opérationnel, assurez-vous qu'il dispose d'une adresse IP partagée réservée et partagée pour la règle de transfert, puis passez à la section suivante, Rediriger le trafic vers l'équilibreur de charge HTTPS.

Pour les équilibreurs de charge d'application internes interrégionaux, suivez les instructions indiquées dans Configurer un équilibreur de charge d'application interne interrégional avec des backends de groupes d'instances de VM pour créer deux équilibreurs de charge, puis suivez les instructions indiquées dans Rediriger le trafic vers l'équilibreur de charge HTTPS.

Rediriger le trafic vers l'équilibreur de charge HTTPS

Créez un équilibreur de charge HTTP partiel ayant la même adresse IP que l'équilibreur de charge HTTPS créé à l'étape précédente. L'équilibreur de charge partiel redirige le trafic du port 80 vers le port 443.

Console

Démarrer la configuration

  1. Dans Google Cloud Console, accédez à la page Équilibrage de charge.

    Accéder à la page "Équilibrage de charge"

  2. Cliquez sur Créer un équilibreur de charge.
  3. Dans le champ Type d'équilibreur de charge, sélectionnez Équilibreur de charge d'application (HTTP/HTTPS), puis cliquez sur Suivant.
  4. Pour Public ou interne, sélectionnez Interne, puis cliquez sur Suivant.
  5. Pour Déploiement interrégional ou dans une seule région, sélectionnez Recommandé pour les charges de travail régionales, puis cliquez sur Suivant.
  6. Cliquez sur Configurer.

Configuration de base

  1. Pour le nom de l'équilibreur de charge, saisissez l7-ilb-http-redirect.
  2. Pour Région, sélectionnez us-west1.
  3. Pour Réseau, sélectionnez lb-network.

Configurer le service de backend

  1. Cliquez sur Configuration du backend.
  2. Dans le menu Sélectionner des services de backend, sélectionnez le service de backend existant l7-ilb-backend-service.
  3. Cliquez sur OK.

Configurez le mappage d'URL

  1. Cliquez sur Règles de routage.
  2. Sous Mode, sélectionnez Règle d'hôte et de chemin d'accès avancée.
  3. Cliquez sur Ajouter une règle d'hôte et de chemin d'accès.
  4. Pour Hôtes, définissez *.

  5. Pour Outil de mise en correspondance des chemins d'accès (correspondances, actions et services), saisissez le code suivant :

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

  6. Assurez-vous que l7-ilb-backend-service est le seul service de backend pour tous les hôtes et chemins sans correspondance.

Pour en savoir plus sur la gestion du trafic, consultez la page Configurer la gestion du trafic pour les équilibreurs de charge d'application internes.

Configurer l'interface pour HTTP

  1. Cliquez sur Configuration de l'interface.
  2. Définissez le nom de la règle de transfert sur l7-ilb-forwarding-rule.
  3. Définissez le paramètre Protocole sur HTTP.
  4. Définissez le paramètre Sous-réseau sur backend-subnet.
  5. Définissez le paramètre Port sur 80.
  6. Dans le menu Adresse IP, sélectionnez l'adresse IP partagée qui a été réservée pour la règle de transfert de l'équilibreur de charge HTTPS.
  7. Cliquez sur OK.

Vérifier la configuration

  1. Cliquez sur Vérifier et finaliser.
  2. Vérifiez les paramètres de configuration de votre équilibreur de charge.
  3. Facultatif : cliquez sur Code équivalent pour afficher la requête API REST qui sera utilisée pour créer l'équilibreur de charge.
  4. Cliquez sur Créer.

gcloud

  1. Créez un mappage d'URL en créant un fichier YAML avec la configuration de redirection du trafic. Remplacez IP_ADDRESS par l'adresse IP partagée qui a été réservée pour la règle de transfert de l'équilibreur de charge 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. Importez le fichier YAML dans le nouveau mappage d'URL :

    gcloud compute url-maps import l7-ilb-redirect-url-map \
       --source=/tmp/url_map.yaml \
       --region=us-west1
    
  3. Créez le proxy cible de l'équilibreur de charge HTTP :

    gcloud compute target-http-proxies create l7-ilb-http-proxy \
       --url-map=l7-ilb-redirect-url-map \
       --region=us-west1
    
  4. Créez une règle de transfert et l'adresse IP partagée :

    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
    

Tester la redirection du trafic

  1. Connectez-vous à la VM cliente.

    gcloud compute ssh l7-ilb-client-us-west1-a \
       --zone=us-west1-a
    
  2. Envoyez une requête HTTP à IP_ADDRESS sur le port 80, et attendez-vous à une redirection de trafic.

    curl -L -k IP_ADDRESS
    
  3. Consultez l'exemple de sortie.

    Page served from: l7-ilb-backend-w11t
    

    Ajoutez -vvv pour afficher plus de détails.

    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

Étapes suivantes