Vous pouvez utiliser un backend externe lorsque le contenu est hébergé sur site ou dans un autre cloud. Le backend externe vous permet de diffuser le contenu à partir de Cloud CDN de Google.
Ce document décrit le processus de configuration de services de stockage d'objets tiers, tels qu'Amazon Simple Storage Service (Amazon S3) et Azure Blob Storage, en tant que backend externe pour Cloud CDN. Les backends externes et Cloud CDN fonctionnent conjointement avec un équilibreur de charge d'application externe.
Architecture
Pour créer le backend externe, vous créez un groupe de points de terminaison du réseau (NEG, network endpoint group) Internet qui pointe vers le service de stockage tiers en tant que backend de l'équilibreur de charge. Les NEG Internet sont utilisés pour les backend externes.
Pour configurer le bucket de stockage tiers en tant que backend, procédez comme suit :
- Préparez le bucket de stockage tiers pour diffuser du contenu.
- Créez un NEG Internet qui utilise le nom de domaine complet du bucket.
- Configurez l'équilibreur de charge d'application externe avec le NEG Internet en tant que backend.
- Testez la configuration.
Préparer le bucket pour diffuser le contenu
Avant de commencer la configuration dans Google Cloud, assurez-vous que le bucket est configuré correctement. Ces instructions supposent que vous utilisez un bucket Amazon S3 et que vous disposez des autorisations nécessaires pour modifier le bucket et les objets Amazon S3.
Assurez-vous que le bucket Amazon S3 et les objets qu'il contient sont publics ou que vous avez configuré l'authentification d'origine privée pour le bucket Amazon S3.
Assurez-vous que le contenu répond aux exigences de mise en cache, répertoriées dans la section Contenu pouvant être mis en cache. Si vous devez ajouter des métadonnées d'objet, consultez la base de connaissances AWS, par exemple Modifier des métadonnées d'objet.
Vous aurez besoin du point de terminaison du bucket Amazon S3 (le nom de domaine complet) lorsque vous configurerez le NEG Internet. Pour obtenir les informations sur le point de terminaison, suivez les instructions fournies dans la base de connaissances AWS, par exemple Accéder à un bucket. Vous pouvez également obtenir l'URL du point de terminaison Amazon S3 à partir de la page de présentation de l'objet.
Créer un NEG Internet qui utilise le nom d'hôte du bucket
Pour plus de simplicité, cet exemple utilise le nom de domaine complet backend.example.com
. Veillez à remplacer ce nom par le nom de domaine complet de votre bucket de stockage tiers, qui peut ressembler à http://unique-name-bucket.s3-us-west-1.amazonaws.com/
.
Ce guide s'appuie sur un exemple pour décrire les principes fondamentaux de l'utilisation d'un backend externe (parfois appelé origine personnalisée) dans un équilibreur de charge d'application externe. Un backend externe est un point de terminaison externe à Google Cloud. Lorsque vous utilisez un backend externe avec un équilibreur de charge d'application externe, vous pouvez améliorer les performances en utilisant la mise en cache Cloud CDN.
Ce guide explique comment configurer un équilibreur de charge d'application externe global à l'aide d'un service de backend équipé de Cloud CDN et agissant comme proxy vers un serveur de backend externe situé à l'adresse backend.example.com
.
Dans cet exemple, l'équilibreur de charge accepte les requêtes HTTPS des clients et les transfère vers le backend externe en tant que requêtes HTTPS. Cet exemple part du principe que le backend externe est compatible avec HTTPS.
Vous pouvez également configurer un équilibreur de charge pour qu'il accepte les requêtes HTTP ou HTTPS, et utiliser HTTPS lors de l'envoi par proxy de requêtes au backend externe.
Dans ce guide, nous partons du principe que vous avez déjà configuré un équilibreur de charge et que vous ajoutez un nouveau backend externe. Pour en savoir plus, consultez la section Configurer un équilibreur de charge d'application classique avec un groupe d'instances géré d'instances géré.
La figure 1 présente un exemple d'architecture.
Dans le schéma, www.example.com
comporte une interface d'équilibreur de charge avec l'adresse IP 120.1.1.1
. En cas de défaut de cache (miss), les requêtes utilisateur pour /cart/id/1223515
sont extraites du backend externe via HTTPS. Le reste du trafic entrant est dirigé soit vers le service de backend Google Cloud avec des VM Compute Engine, soit vers le bucket du backend, en fonction du mappage d'URL.
Avant de commencer
Avant de suivre ce guide, familiarisez-vous avec les points suivants :
Présentation des groupes de points de terminaison du réseau Internet, y compris de leurs limites.
Autorisations
Pour suivre ce guide, vous devez créer un groupe de points de terminaison du réseau (NEG) Internet, puis créer ou modifier un équilibreur de charge d'application externe dans un projet. Vous devez être propriétaire ou éditeur du projet ou disposer des deux rôles IAM Compute Engine suivants.
Tâche | Rôle requis |
---|---|
Créer et modifier des composants d'équilibreur de charge | Administrateur réseau |
Créer et modifier des NEG | Administrateur d'instances Compute |
Configurer un équilibreur de charge avec un backend externe
Cette section vous explique comment configurer et tester un NEG Internet.
Vue d'ensemble de la configuration
La configuration d'un NEG Internet implique les opérations suivantes :
- La définition du point de terminaison Internet d'un NEG Internet
- L'ajout d'un NEG Internet en tant que backend à un service de backend
- La définition du trafic utilisateur à mapper vers ce service de backend via la configuration du mappage d'URL de votre équilibreur de charge d'application externe
- L'ajout à la liste d'autorisation des plages d'adresses IP nécessaires
Cet exemple crée les ressources suivantes :
- Une règle de transfert avec l'adresse IP
120.1.1.1
, qui dirige les demandes entrantes vers un serveur proxy cible. - Le
networkTier
de la règle de transfert doit êtrePREMIUM
. - Le proxy cible analyse chaque requête par rapport au mappage d'URL afin de déterminer le service de backend adapté à la requête.
- Pour les backends externes, le proxy cible doit être
TargetHttpProxy
ouTargetHttpsProxy
. Cet exemple utiliseTargetHttpsProxy
. - Le service Cloud CDN activé (facultatif) sur le service de backend permet de mettre en cache et de diffuser les réponses des caches de Cloud CDN.
- Cet exemple inclut un en-tête personnalisé, qui est obligatoire lorsque le backend externe attend une valeur particulière pour l'en-tête
Host
de la requête HTTP.
La configuration se présente comme suit :
Créer le point de terminaison NEG et Internet
Console
- Dans la console Google Cloud, accédez à la page Groupes de points de terminaison du réseau.
Accéder à la page "Groupes de points de terminaison du réseau"
- Cliquez sur Créer un groupe de points de terminaison du réseau.
- Saisissez le nom du groupe de points de terminaison du réseau :
example-fqdn-neg
. - Pour le type de groupe de points de terminaison du réseau, sélectionnez Groupe de points de terminaison du réseau Internet.
- Pour le port par défaut, saisissez
443
. - Pour le nouveau point de terminaison du réseau, sélectionnez Nom de domaine complet et port.
- Comme nom de domaine complet, saisissez
backend.example.com
. - Pour le type de port, sélectionnez Par défaut et vérifiez que le numéro de port est
443
. - Cliquez sur Créer.
gcloud
Créez un NEG Internet et définissez
--network-endpoint-type
surinternet-fqdn-port
(le nom d'hôte et le port où votre backend externe peut être atteint) :gcloud compute network-endpoint-groups create example-fqdn-neg \ --network-endpoint-type="internet-fqdn-port" --global
Ajoutez votre point de terminaison au NEG. Si aucun port n'est spécifié, le port est défini par défaut sur
80
(HTTP) ou443
(HTTPS, HTTP/2) en fonction du protocole configuré dans le service de backend. Veillez à inclure l'option--global
:gcloud compute network-endpoint-groups update example-fqdn-neg \ --add-endpoint="fqdn=backend.example.com,port=443" \ --global
Répertoriez les NEG Internet créés :
gcloud compute network-endpoint-groups list --global
Résultat :
NAME LOCATION ENDPOINT_TYPE SIZE example-fqdn-neg global INTERNET_FQDN_PORT 1
Répertoriez le point de terminaison dans ce NEG :
gcloud compute network-endpoint-groups list-network-endpoints example-fqdn-neg \ --global
Sortie :
INSTANCE IP_ADDRESS PORT FQDN backend.example.com
Ajouter un backend externe à un équilibreur de charge
L'exemple suivant met à jour un équilibreur de charge existant.
Dans l'équilibreur de charge existant, le service par défaut est un service Google Cloud. L'exemple modifie le mappage d'URL existant en lui ajoutant un outil de mise en correspondance des chemins d'accès, qui envoie toutes les demandes de cart/id/1223515
au service de backend images
associé au NEG Internet.
Console
Créer le service de backend et ajouter le NEG Internet
- Dans Google Cloud Console, accédez à la page Équilibrage de charge.
- Pour ajouter le service de backend à un équilibreur de charge existant, sélectionnez votre équilibreur de charge d'application classique, cliquez sur Menu, puis sélectionnez Modifier.
- Cliquez sur Configuration du backend.
- Dans le menu Services de backend et buckets de backend, sélectionnez Créer un service de backend.
- Définissez le nom du service de backend sur
images
. - Pour le type de backend, sélectionnez Groupe de points de terminaison du réseau Internet.
- Sélectionnez le protocole que vous souhaitez utiliser depuis l'équilibreur de charge vers le NEG Internet. Pour cet exemple, sélectionnez HTTPS.
- Sous Nouveau backend > Groupe de points de terminaison du réseau Internet, sélectionnez
example-fqdn-neg
, puis cliquez sur Terminé. - Sélectionnez Activer Cloud CDN.
- (Facultatif) Modifiez les paramètres du mode cache et TTL.
- Dans Configurations avancées, sous En-têtes de requêtes personnalisés, cliquez sur Ajouter un en-tête.
- Dans le champ Nom de l'en-tête, saisissez
Host
. - Dans le champ Valeur d'en-tête, saisissez
backend.example.com
.
- Dans le champ Nom de l'en-tête, saisissez
- Cliquez sur Créer.
- Laissez la fenêtre ouverte pour continuer.
Associer le service de backend à un mappage d'URL existant
- Cliquez sur Règles d'hôte et de chemin d'accès.
- La ou les premières lignes incluent des services Google Cloud dans la colonne de droite, et l'une d'entre elles contient déjà la règle par défaut
Any unmatched (default)
pour les hôtes et les chemins d'accès. - Dans la colonne de droite, assurez-vous qu'il existe une ligne dont la propriété
images
est sélectionnée. Si ce n'est pas le cas, cliquez sur Ajouter une règle d'hôte et de chemin d'accès, puis sélectionnezimages
. Remplissez les autres champs comme suit :- Dans le champ Hôtes, saisissez
*
. - Sous Chemins d'accès, saisissez
/cart/id/1223515
.
- Dans le champ Hôtes, saisissez
Vérifier et finaliser
- Cliquez sur Vérifier et finaliser.
- Comparez vos paramètres à ce que vous aviez l'intention de créer.
- Si tout vous semble correct, cliquez sur Mettre à jour.
gcloud
Créez un service de backend pour le NEG :
gcloud compute backend-services create images \ --global \ --enable-cdn \ --cache-mode=CACHE_MODE \ --protocol=HTTP2
Définissez le mode cache en remplaçant CACHE_MODE par l'un des éléments suivants :
CACHE_ALL_STATIC
: met automatiquement en cache le contenu statiqueUSE_ORIGIN_HEADERS
(par défaut): exige que l'origine définisse des en-têtes de mise en cache valides pour mettre en cache le contenuFORCE_CACHE_ALL
: met en cache tout le contenu, en ignorant les instructionsprivate
,no-store
ouno-cache
dans les en-têtes de réponseCache-Control
.
Configurez le service de backend pour ajouter l'en-tête de requête personnalisé
Host: backend.example.com
à la requête :gcloud compute backend-services update images \ --custom-request-header "Host: backend.example.com" --global
Ajoutez le NEG Internet au service de backend à l'aide de la commande
backend-services add-backend
:gcloud compute backend-services add-backend images \ --network-endpoint-group "example-fqdn-neg" \ --global-network-endpoint-group \ --global
Associez le nouveau service de backend au mappage d'URL de l'équilibreur de charge en créant une règle de correspondance pour diriger les requêtes vers ce backend :
gcloud compute url-maps add-path-matcher EXAMPLE_URL_MAP \ --default-service=GCP_SERVICE_EXAMPLE \ --path-matcher-name=CUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE \ --backend-service-path-rules=/CART/ID/1223515=IMAGES
Remplacez les éléments suivants :
EXAMPLE_URL_MAP
: nom de votre mappage d'URL existantGCP_SERVICE_EXAMPLE
: nom d'un service de backend par défautCUSTOM_ORIGIN_PATH_MATCHER_EXAMPLE
: nom de cette nouvelle règle de chemin d'accès/CART/ID/1223515
: chemin d'accèsIMAGES
: nom du nouveau service de backend avec le NEG Internet associé
Ajouter à la liste d'autorisation les plages d'adresses IP nécessaires
Pour autoriser un équilibreur de charge d'application externe à envoyer des requêtes à votre NEG Internet, vous devez interroger l'enregistrement TXT DNS _cloud-eoips.googleusercontent.com
à l'aide d'un outil tel que dig
ou nslookup
.
Par exemple, exécutez la commande dig
suivante :
dig TXT _cloud-eoips.googleusercontent.com | grep -Eo 'ip4:[^ ]+' | cut -d':' -f2
Le résultat contient deux plages d'adresses IP, comme suit :
34.96.0.0/20
34.127.192.0/18
Notez les plages d'adresses IP et assurez-vous qu'elles sont autorisées par votre pare-feu ou votre liste de contrôle d'accès (LCA) au cloud.
Pour en savoir plus, consultez la section Authentifier les requêtes.
Connecter un domaine à votre équilibreur de charge
Une fois l'équilibreur de charge créé, notez l'adresse IP associée à celui-ci (par exemple, 30.90.80.100
). Pour faire pointer votre domaine vers votre équilibreur de charge, créez un enregistrement A
à l'aide de votre service d'enregistrement de domaine. Si vous avez ajouté plusieurs domaines à votre certificat SSL, vous devez ajouter un enregistrement A
à chacun d'eux, tous pointant vers l'adresse IP de l'équilibreur de charge. Par exemple, pour créer des enregistrements A
pour www.example.com
et example.com
, utilisez le code suivant :
NAME TYPE DATA www A 30.90.80.100 @ A 30.90.80.100
Si vous utilisez Cloud DNS comme fournisseur DNS, consultez la section Ajouter, modifier et supprimer des enregistrements.
Tester l'équilibreur de charge d'application externe
Maintenant que vous avez configuré votre équilibreur de charge, vous pouvez commencer à envoyer du trafic vers son adresse IP. Si vous avez configuré un domaine, vous pouvez également envoyer du trafic vers le nom de domaine. Toutefois, la propagation DNS peut prendre un certain temps. Vous pouvez donc commencer à utiliser l'adresse IP à des fins de test.
Dans la console Google Cloud, accédez à la page Équilibrage de charge.
Cliquez sur l'équilibreur de charge que vous venez de créer.
Notez l'adresse IP de l'équilibreur de charge.
Si vous avez créé un équilibreur de charge HTTP, vous pouvez le tester à l'aide d'un navigateur Web à l'adresse
http://IP_ADDRESS
. RemplacezIP_ADDRESS
par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du servicehelloworld
.Si vous avez créé un équilibreur de charge HTTPS, vous pouvez le tester à l'aide d'un navigateur Web à l'adresse
https://IP_ADDRESS
. RemplacezIP_ADDRESS
par l'adresse IP de l'équilibreur de charge. Vous devriez être redirigé vers la page d'accueil du servicehelloworld
.Si cela ne fonctionne pas et que vous utilisez un certificat géré par Google, vérifiez que l'état de votre ressource de certificat est ACTIF. Pour plus d'informations, consultez la section État des ressources de certificat SSL géré par Google.
Vous pouvez également utiliser
curl
depuis l'interface de ligne de commande de votre machine locale. RemplacezIP_ADDRESS
par l'adresse IPv4 de l'équilibreur de charge.Si vous utilisez un certificat géré par Google, testez le domaine qui pointe vers l'adresse IP de l'équilibreur de charge. Exemple :
curl -s 'https://www.example.com:443' --resolve www.example.com:443:IP_ADDRESS
Facultatif : Si vous utilisez un domaine personnalisé, vous devrez peut-être attendre la propagation des paramètres DNS mis à jour. Testez ensuite votre domaine (par exemple,
backend.example.com
) dans le navigateur Web.Pour obtenir de l'aide concernant le dépannage, consultez la section Résoudre les problèmes liés aux backends externes et aux NEG Internet.
Tester Cloud CDN
Test 1 : Appel direct au point de terminaison du bucket
Ce test utilise les commandes time
et wget
d'une VM. L'exemple télécharge /cart/id/1223515/image.jpg
à partir du bucket backend.example.com
.
À partir du résultat, vous pouvez voir que la requête globale prend 780 ms. Cela correspond au temps nécessaire pour récupérer directement une image de 3,3 Mo à partir d'Amazon S3.
time wget backend.example.com/cart/id/1223515/image.jpg
--2020-06-26 18:22:46-- backend.example.com/cart/id/1223515/image.jpg Resolving backend.example.com (backend.example.com)... 52.219.120.233 Connecting to backend.example.com (backend.example.com)|52.219.120.233|:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.47' /cart/id/1223515/image.jpg.47 100%[==============================================================================================================================================>] 3.29M 6.25MB/s in 0.5s 2020-06-26 18:22:47 (6.25 MB/s) - '/cart/id/1223515/image.jpg.47' saved [3447106/3447106] real 0m0.780s user 0m0.003s sys 0m0.012s
Test 2 : Première requête via Cloud CDN
Ce test utilise l'adresse IP de l'équilibreur de charge pour récupérer le fichier /cart/id/1223515/image.jpg
. Comme il s'agit de la première requête, il doit s'agir d'une erreur et Cloud CDN devrait extraire l'image de l'origine, soit Amazon S3. À partir du résultat, vous pouvez voir que la requête a pris 844 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:27-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.44' /cart/id/1223515/image.jpg.44 100%[==============================================================================================================================================>] 3.29M 8.23MB/s in 0.4s 2020-06-26 18:19:28 (8.23 MB/s) - '/cart/id/1223515/image.jpg.44' saved [3447106/3447106] real 0m0.844s user 0m0.003s sys 0m0.012s
Test 3 : Deuxième requête via CDN
Nous allons maintenant effectuer une autre requête à l'aide de cette adresse IP d'équilibreur de charge. Cette fois, nous devrions obtenir une réponse mise en cache, ce qui devrait être plus rapide que les deux premiers tests.
Nous utilisons à nouveau la même adresse IP LB LOAD_BALANCER_IP_ADDRESS. Le résultat indique que la requête n'a pris que 18 ms.
time wget http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg
--2020-06-26 18:19:29-- http://LOAD_BALANCER_IP_ADDRESS/cart/id/1223515/image.jpg Connecting to LOAD_BALANCER_IP_ADDRESS:80... connected. HTTP request sent, awaiting response... 200 OK Length: 3447106 (3.3M) [image/jpeg] Saving to: '/cart/id/1223515/image.jpg.45' /cart/id/1223515/image.jpg.45 100%[==============================================================================================================================================>] 3.29M --.-KB/s in 0.008s 2020-06-26 18:19:29 (423 MB/s) - '/cart/id/1223515/image.jpg.45' saved [3447106/3447106] real 0m0.018s user 0m0.001s sys 0m0.010s
Valider à l'aide de journaux
Les journaux de Cloud CDN sont associés à l'équilibreur de charge d'application externe auquel sont rattachés vos backends pour lesquels Cloud CDN est activé. À l'aide des journaux, vous pouvez vérifier si une requête a réussi ou échoué. Pour en savoir plus sur les journaux Cloud CDN, consultez la page Afficher les journaux.
Limites
Le bucket tiers et les objets doivent être publics. Vous pouvez également conserver votre bucket et vos objets privés si vous configurez l'authentification de l'origine privée. Les backends externes ne sont pas compatibles avec d'autres méthodes d'authentification de contenu, telles que les URL signées ou les cookies signés.
Lorsque vous utilisez un backend externe qui attend une valeur particulière pour l'en-tête
Host
de la requête HTTP, vous devez configurer le service de backend pour définir l'en-têteHost
sur cette valeur attendue. Si vous ne configurez pas d'en-tête de requête personnalisé, un service de backend préserve l'en-têteHost
utilisé par le client pour se connecter à l'équilibreur de charge d'application externe Google Cloud. Pour obtenir des informations générales sur les en-têtes personnalisés, consultez la page Configurer des en-têtes de requête personnalisés. Pour obtenir un exemple spécifique, consultez la page Configurer un équilibreur de charge avec un backend externe.
Étape suivante
- Pour vérifier si Cloud CDN diffuse des réponses à partir d'un cache, consultez la page Journaux et métriques pour la mise en cache.
- Pour savoir quels contenus peuvent être mis en cache ou non, consultez la section Présentation de la mise en cache.
- Pour trouver des points de présence GFE, consultez la section Emplacements de cache.