Configurer un équilibreur de charge d'application classique avec des buckets Cloud Storage

Ce document explique comment créer un équilibreur de charge d'application externe afin d'acheminer les requêtes de contenu statique vers des buckets Cloud Storage. Une fois que vous avez configuré un équilibreur de charge avec des buckets backend, les requêtes vers les chemins d'URL commençant par /love-to-fetch sont envoyées au bucket Cloud Storage us-east1, et toutes les autres requêtes sont envoyées au bucket Cloud Storage europe-north1, quelle que soit la région de l'utilisateur.

Si vos backends diffusent du contenu dynamique via HTTP(S), envisagez d'utiliser des services de backend au lieu de buckets backend.


Pour obtenir des conseils détaillés sur cette tâche directement dans la console Google Cloud, cliquez sur Visite guidée :

Visite guidée


Buckets Cloud Storage en tant que backends de l'équilibreur de charge

Un équilibreur de charge d'application externe utilise un mappage d'URL pour diriger le trafic provenant de chemins d'URL spécifiées vers vos backends.

Dans le diagramme suivant, l'équilibreur de charge envoie du trafic avec le chemin d'accès /love-to-fetch/ vers un bucket Cloud Storage, dans la région us-east1. Toutes les autres requêtes sont distribuées vers un bucket Cloud Storage, dans la région europe-north1.

L'équilibreur de charge envoie du trafic vers un backend Cloud Storage.
Distribuer le trafic vers Cloud Storage

Par défaut, Cloud Storage utilise le même cache que Cloud CDN. Si vous activez Cloud CDN sur le bucket backend, vous pouvez utiliser les contrôles Cloud CDN sur votre contenu. Les contrôles Cloud CDN incluent, par exemple, les modes cache, les URL signées et l'invalidation. Cloud CDN vous permet également de mettre en cache du contenu volumineux (> 10 Mo). Si vous n'activez pas Cloud CDN sur votre bucket backend, vous ne pouvez utiliser que les en-têtes Cache-Control d'origine pour contrôler la mise en cache du contenu plus petit, tel que défini par les métadonnées Cloud Storage.

Avant de commencer

Assurez-vous que votre configuration remplit les conditions préalables suivantes. Si vous utilisez l'utilitaire gcloud storage, vous pouvez l'installer en suivant les instructions de la section Découvrir le stockage d'objets avec l'outil gcloud.

Définir un projet par défaut

Console

  1. Connectez-vous à votre compte Google Cloud. Si vous débutez sur Google Cloud, créez un compte pour évaluer les performances de nos produits en conditions réelles. Les nouveaux clients bénéficient également de 300 $ de crédits gratuits pour exécuter, tester et déployer des charges de travail.
  2. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  3. Vérifiez que la facturation est activée pour votre projet Google Cloud.

  4. Dans Google Cloud Console, sur la page de sélection du projet, sélectionnez ou créez un projet Google Cloud.

    Accéder au sélecteur de projet

  5. Vérifiez que la facturation est activée pour votre projet Google Cloud.

gcloud

gcloud config set project PROJECT_ID

Remplacez PROJECT_ID par le projet que vous utilisez dans le cadre de ce guide.

Terraform

export GOOGLE_CLOUD_PROJECT=PROJECT_ID

Autorisations

Pour suivre ce guide, vous devez créer des buckets Cloud Storage et un équilibreur de charge dans un projet. Vous devez être propriétaire ou éditeur du projet, ou disposer des rôles IAM Compute Engine suivants :

Tâche Rôle requis
Créer des composants pour l'équilibreur de charge Administrateur réseau
Créer des buckets Cloud Storage Administrateur des objets Storage

Pour en savoir plus, consultez les guides suivants :

Configurer une ressource de certificat SSL

Pour un équilibreur de charge HTTPS, créez une ressource de certificat SSL, comme décrit dans la documentation ci-dessous :

Nous vous recommandons d'utiliser un certificat géré par Google.

Dans cet exemple, nous partons du principe que vous disposez déjà d'une ressource de certificat SSL nommée www-ssl-cert.

Préparer votre contenu et vos buckets Cloud Storage

Le processus de préparation des buckets Cloud Storage est le suivant :

  • Créez les buckets.

  • Copiez le contenu dans les buckets.

  • Fournissez un accès public aux buckets.

Créer des buckets Cloud Storage

Dans cet exemple, vous allez créer deux buckets Cloud Storage auxquels l'équilibreur de charge pourra accéder. Pour les déploiements de production, nous vous recommandons de choisir un bucket multirégional, qui réplique automatiquement les objets sur plusieurs régions Google Cloud. Cela peut améliorer la disponibilité de votre contenu et augmenter la tolérance aux pannes au sein de votre application.

Notez les noms des buckets Cloud Storage que vous créez, car vous les utiliserez ultérieurement. Dans ce guide, ils sont appelés BUCKET_1_NAME et BUCKET_2_NAME.

Console

  1. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.

    Accéder à Buckets Cloud Storage

  2. Cliquez sur Créer un bucket.

  3. Dans le champ Nommer votre bucket, saisissez un nom unique qui respecte les consignes de dénomination.

  4. Cliquez sur Choisir où stocker vos données.

  5. Définissez le Type d'emplacement sur Région.

  6. Définissez le champ Emplacement sur europe-north1. Il s'agit de BUCKET_1_NAME dans ce guide.

  7. Cliquez sur Créer.

  8. Cliquez sur Buckets pour revenir à la page des buckets Cloud Storage. Suivez ces instructions pour créer un second bucket, mais définissez le champ Emplacement sur us-east1. Il s'agit de BUCKET_2_NAME dans ce guide.

gcloud

gcloud storage buckets create gs://BUCKET_1_NAME --project=PROJECT_ID --default-storage-class=standard --location=europe-north1 --uniform-bucket-level-access
gcloud storage buckets create gs://BUCKET_2_NAME --project=PROJECT_ID --default-storage-class=standard --location=us-east1 --uniform-bucket-level-access

Remplacez BUCKET_1_NAME et BUCKET_2_NAME par les noms des buckets que vous souhaitez créer.

Terraform

Pour créer les buckets, utilisez la ressource google_storage_bucket.

# Create Cloud Storage buckets
resource "random_id" "bucket_prefix" {
  byte_length = 8
}

resource "google_storage_bucket" "bucket_1" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-1"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

resource "google_storage_bucket" "bucket_2" {
  name                        = "${random_id.bucket_prefix.hex}-bucket-2"
  location                    = "us-east1"
  uniform_bucket_level_access = true
  storage_class               = "STANDARD"
  // delete bucket and contents on destroy.
  force_destroy = true
}

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Transférer du contenu vers vos buckets Cloud Storage

Pour pouvoir tester la configuration ultérieurement, copiez les images suivantes d'un bucket Cloud Storage public dans vos propres buckets Cloud Storage.

gcloud

  1. Cliquez sur Activer Cloud Shell.

  2. Exécutez les commandes suivantes dans Cloud Shell, en remplaçant les variables de nom de buckets par les noms de vos buckets Cloud Storage :

gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_1_NAME/never-fetch/
gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://BUCKET_2_NAME/love-to-fetch/

Terraform

Pour copier des éléments dans le bucket, vous pouvez utiliser la ressource google_storage_bucket_object.

resource "google_storage_bucket_object" "cat_image" {
  name         = "never-fetch/three-cats.jpg"
  source       = "images/three-cats.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_1.name
}

resource "google_storage_bucket_object" "dog_image" {
  name         = "love-to-fetch/two-dogs.jpg"
  source       = "images/two-dogs.jpg"
  content_type = "image/jpeg"

  bucket = google_storage_bucket.bucket_2.name
}

Vous pouvez également utiliser la ressource null_resource.

resource "null_resource" "upload_cat_image" {
provisioner "local-exec" {
  command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/three-cats.jpg gs://${google_storage_bucket.bucket_1.name}/never-fetch/"
}
}

resource "null_resource" "upload_dog_image" {
provisioner "local-exec" {
  command = "gcloud storage cp gs://gcp-external-http-lb-with-bucket/two-dogs.jpg gs://${google_storage_bucket.bucket_2.name}/love-to-fetch/"
}
}

Dans la console Google Cloud, cliquez sur Actualiser sur la page d'informations de chaque bucket pour vérifier que le fichier a bien été copié.

Rendre vos buckets Cloud Storage lisibles publiquement

Lorsque vous rendez les buckets Cloud Storage lisibles publiquement, tous les internautes peuvent répertorier et afficher leurs objets, ainsi que consulter leurs métadonnées (à l'exclusion des LCA). N'incluez pas d'informations sensibles dans vos buckets publics.

Pour réduire la probabilité d'exposition accidentelle d'informations sensibles, ne stockez pas les objets publics et les données sensibles dans le même bucket.

Console

Pour autoriser tous les utilisateurs à afficher des objets dans vos buckets, répétez la procédure suivante pour chaque bucket :

  1. Dans la console Google Cloud, accédez à la page Buckets Cloud Storage.

    Accéder à Buckets Cloud Storage

  2. Cliquez sur le nom du bucket, puis sur l'onglet Autorisations.

  3. Cliquez sur Ajouter.

  4. Dans le champ Nouveaux comptes principaux, saisissez allUsers.

  5. Dans le champ Sélectionnez un rôle, cliquez sur Cloud Storage > Lecteur des objets Storage.

  6. Cliquez sur Enregistrer.

  7. Cliquez sur Autoriser l'accès public.

gcloud

Pour autoriser tous les utilisateurs à afficher des objets dans vos buckets, exécutez les commandes suivantes :

gcloud storage buckets add-iam-policy-binding gs://BUCKET_1_NAME --member=allUsers --role=roles/storage.objectViewer
gcloud storage buckets add-iam-policy-binding gs://BUCKET_2_NAME --member=allUsers --role=roles/storage.objectViewer

Terraform

Pour autoriser tous les utilisateurs à afficher les objets de vos buckets, utilisez la ressource google_storage_bucket_iam_member et spécifiez le membre allUsers.

# Make buckets public
resource "google_storage_bucket_iam_member" "bucket_1" {
  bucket = google_storage_bucket.bucket_1.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

resource "google_storage_bucket_iam_member" "bucket_2" {
  bucket = google_storage_bucket.bucket_2.name
  role   = "roles/storage.objectViewer"
  member = "allUsers"
}

Réserver une adresse IP externe

Une fois que vous avez configuré vos buckets Cloud Storage, vous pouvez réserver une adresse IP externe statique globale que votre audience utilisera pour atteindre votre équilibreur de charge.

Cette étape est facultative mais recommandée, car une adresse IP externe statique fournit une adresse unique vers laquelle vous pouvez faire pointer votre domaine.

Console

  1. Dans Google Cloud Console, accédez à la page Adresses IP externes.

    Accéder à la page "Adresses IP externes"

  2. Cliquez sur Réserver une adresse statique.

  3. Dans le champ Nom, saisissez example-ip.

  4. Définissez le Niveau de service réseau sur Premium.

  5. Définissez Version IP sur IPv4.

  6. Définissez le Type sur Global.

  7. Cliquez sur Réserver.

gcloud

gcloud compute addresses create example-ip \
    --network-tier=PREMIUM \
    --ip-version=IPV4 \
    --global

Notez l'adresse IPv4 réservée :

gcloud compute addresses describe example-ip \
    --format="get(address)" \
    --global

Terraform

Pour réserver une adresse IP externe, utilisez la ressource google_compute_global_address.

# Reserve IP address
resource "google_compute_global_address" "default" {
  name = "example-ip"
}

Créer un équilibreur de charge d'application externe avec des buckets backend

Ces instructions concernent la création d'un équilibreur de charge HTTP ou HTTPS. Pour créer un équilibreur de charge HTTPS, vous devez ajouter une ressource de certificat SSL à l'interface de l'équilibreur de charge. Pour en savoir plus, consultez la page Présentation des certificats SSL.

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 Public (externe), puis cliquez sur Suivant.
  5. Pour Déploiement global ou dans une seule région, sélectionnez Recommandé pour les charges de travail globales, puis cliquez sur Suivant.
  6. Pour Génération de l'équilibreur de charge, sélectionnez Équilibreur de charge d'application classique, puis cliquez sur Suivant.
  7. Cliquez sur Configurer.

Configuration de base

  1. Dans le champ Nom, saisissez http-lb.

Configurer le backend

  1. Cliquez sur Backend configuration (Configuration du backend).

  2. Cliquez sur le champ Services de backend et buckets backend, puis sur Créer un bucket backend.

  3. Dans le champ Nom du bucket backend, saisissez cats.

  4. Dans le champ Bucket Cloud Storage, cliquez sur Parcourir.

  5. Sélectionnez BUCKET_1_NAME, puis cliquez sur Sélectionner. La création du bucket backend cats en fait d'abord le bucket par défaut, où toutes les requêtes de trafic sans correspondance sont dirigées. Vous ne pouvez pas modifier les règles de redirection d'un bucket backend par défaut dans l'équilibreur de charge.

  6. Cliquez sur Create (Créer).

  7. Suivez la même procédure pour créer un bucket backend nommé dogs, puis sélectionnez BUCKET_2_NAME.

  8. Cliquez sur OK.

Configurer des règles de routage

Les règles de routage déterminent la manière dont le trafic est dirigé. Pour configurer le routage, vous devez configurer des règles d'hôte et des outils de mise en correspondance des chemins, qui sont des composants de configuration d'un mappage d'URL de l'équilibreur de charge d'application externe. Pour configurer les règles de cet exemple, procédez comme suit :

  1. Cliquez sur Règles d'hôte et de chemin d'accès.
  2. Pour dogs, saisissez * dans le champ Hôtes et /love-to-fetch/* dans le champ Chemins d'accès.

Configurer l'interface

  1. Cliquez sur Frontend configuration (Configuration du frontend).

  2. Vérifiez que les options suivantes sont configurées avec ces valeurs :

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTP
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP example-ip
    Port 80

    Si vous souhaitez créer un équilibreur de charge HTTPS au lieu d'un équilibreur de charge HTTP, vous devez disposer d'un certificat SSL (gcloud compute ssl-certificates list) et remplir les champs comme suit.

    Propriété Valeur (saisissez une valeur ou sélectionnez une option spécifiée)
    Protocole HTTP(S)
    Niveau de service réseau Premium
    Version IP IPv4
    Adresse IP example-ip
    Port 443
    Sélectionnez un certificat ou créez-en un.
    Facultatif : Activer la redirection HTTP vers HTTPS Cochez cette case pour activer les redirections.

    Cochez cette case pour créer un équilibreur de charge HTTP partiel supplémentaire qui utilise la même adresse IP que votre équilibreur de charge HTTPS et redirige les requêtes HTTP vers l'interface HTTPS de votre équilibreur de charge.

    Cette case ne peut être cochée que lorsque le protocole HTTPS est sélectionné et qu'une adresse IP réservée est utilisée.

  3. Cliquez sur OK.

Vérifier la configuration

  1. Cliquez sur Review and finalize (Vérifier et finaliser).

  2. Examinez l'interface, les règles d'hôte et de chemin d'accès, ainsi que les buckets backend.

  3. Cliquez sur Create (Créer), puis attendez que l'équilibreur de charge soit créé.

  4. Cliquez sur le nom de l'équilibreur de charge (http-lb).

  5. Notez l'adresse IP de l'équilibreur de charge pour la prochaine tâche. Dans ce guide, elle est appelée IP_ADDRESS.

gcloud

Configurer le backend

gcloud compute backend-buckets create cats \
  --gcs-bucket-name=BUCKET_1_NAME
gcloud compute backend-buckets create dogs \
  --gcs-bucket-name=BUCKET_2_NAME

Configurez le mappage d'URL

gcloud compute url-maps create http-lb \
  --default-backend-bucket=cats
gcloud compute url-maps add-path-matcher http-lb \
  --path-matcher-name=path-matcher-2 \
  --new-hosts=* \
  --backend-bucket-path-rules="/love-to-fetch/*=dogs" \
  --default-backend-bucket=cats

Configurer le proxy cible

gcloud compute target-http-proxies create http-lb-proxy \
  --url-map=http-lb

Configurer la règle de transfert

gcloud compute forwarding-rules create http-lb-forwarding-rule \
  --load-balancing-scheme=EXTERNAL \
  --network-tier=PREMIUM \
  --address=example-ip \
  --global \
  --target-http-proxy=http-lb-proxy \
  --ports=80

Terraform

Pour créer l'équilibreur de charge, utilisez les ressources Terraform suivantes.

Configurer le backend

Pour créer le backend, utilisez la ressource google_compute_backend_bucket.

# Create LB backend buckets
resource "google_compute_backend_bucket" "bucket_1" {
  name        = "cats"
  description = "Contains cat image"
  bucket_name = google_storage_bucket.bucket_1.name
}

resource "google_compute_backend_bucket" "bucket_2" {
  name        = "dogs"
  description = "Contains dog image"
  bucket_name = google_storage_bucket.bucket_2.name
}

Configurez le mappage d'URL

Pour créer le mappage d'URL, utilisez la ressource google_compute_url_map.

# Create url map
resource "google_compute_url_map" "default" {
  name = "http-lb"

  default_service = google_compute_backend_bucket.bucket_1.id

  host_rule {
    hosts        = ["*"]
    path_matcher = "path-matcher-2"
  }
  path_matcher {
    name            = "path-matcher-2"
    default_service = google_compute_backend_bucket.bucket_1.id

    path_rule {
      paths   = ["/love-to-fetch/*"]
      service = google_compute_backend_bucket.bucket_2.id
    }
  }
}

Configurer le proxy cible

Pour créer le proxy HTTP cible, utilisez la ressource google_compute_target_http_proxy.

# Create HTTP target proxy
resource "google_compute_target_http_proxy" "default" {
  name    = "http-lb-proxy"
  url_map = google_compute_url_map.default.id
}

Configurer la règle de transfert

Pour créer la règle de transfert, utilisez la ressource google_compute_global_forwarding_rule.

# Create forwarding rule
resource "google_compute_global_forwarding_rule" "default" {
  name                  = "http-lb-forwarding-rule"
  ip_protocol           = "TCP"
  load_balancing_scheme = "EXTERNAL_MANAGED"
  port_range            = "80"
  target                = google_compute_target_http_proxy.default.id
  ip_address            = google_compute_global_address.default.id
}

REMARQUE : Pour passer le mode à l'équilibreur de charge d'application classique, définissez l'attribut load_balancing_scheme sur "EXTERNAL" au lieu de "EXTERNAL_MANAGED".

Pour savoir comment appliquer ou supprimer une configuration Terraform, consultez la page Commandes Terraform de base.

Envoyer du trafic vers votre équilibreur de charge

Quelques minutes après avoir configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP.

Console

Dans un navigateur Web, accédez aux adresses suivantes pour tester votre équilibreur de charge, en remplaçant IP_ADDRESS par l'adresse IP de l'équilibreur de charge :

  • http://IP_ADDRESS/love-to-fetch/two-dogs.jpg

  • http://IP_ADDRESS/never-fetch/three-cats.jpg

Si vous avez configuré un équilibreur de charge HTTP, assurez-vous que votre navigateur ne redirige pas automatiquement les requêtes vers HTTPS.

gcloud

Utilisez la commande curl pour tester la réponse à partir des URL suivantes. Remplacez IP_ADDRESS par l'adresse IPv4 de l'équilibreur de charge :

curl http://IP_ADDRESS/love-to-fetch/two-dogs.jpg
curl http://IP_ADDRESS/never-fetch/three-cats.jpg

Limites