Ce guide explique comment résoudre les problèmes de configuration des équilibreurs de charge d'application externes. Avant de vous pencher sur les problèmes, familiarisez-vous avec les pages suivantes.
- Présentation de l'équilibreur de charge d'application externe
- Journalisation et surveillance de l'équilibreur de charge d'application externe régional
Incompatibilité des modes d'équilibrage des backends
Lors de la création d'un équilibreur de charge, le message d'erreur suivant peut s'afficher :
Validation failed for instance group INSTANCE_GROUP: backend services 1 and 2 point to the same instance group but the backends have incompatible balancing_mode. Values should be the same.
Cette erreur se produit lorsque vous essayez d'utiliser le même backend dans deux équilibreurs de charge différents et que les backends ne disposent pas de modes d'équilibrage compatibles.
Pour en savoir plus, consultez les ressources suivantes :
- Restrictions et conseils concernant les groupes d'instances
- Modifier le mode d'équilibrage d'un équilibreur de charge
Résoudre les problèmes de connectivité générale
Erreurs "5XX" inexpliquées
Une erreur "HTTP 5XX" peut être renvoyée par un GFE de première couche, un GFE de deuxième couche ou un backend, selon l'endroit où la condition d'erreur se produit.
Cette section explique comment résoudre les erreurs 5XX qui peuvent se produire à différentes étapes du processus de distribution des requêtes pour les équilibreurs de charge d'application externes basés sur GFE.
Identifier la source des erreurs "5XX" à l'aide de Cloud Logging
Pour les conditions d'erreur causées par un problème de communication entre le proxy de l'équilibreur de charge et ses backends, l'équilibreur de charge génère un code de réponse d'erreur HTTP (5XX) et renvoie ce code de réponse d'erreur au client. Les erreurs HTTP 5XX ne sont pas toutes générées par l'équilibreur de charge. Par exemple, si un backend envoie une réponse HTTP 5XX à l'équilibreur de charge, celui-ci va simplement retransmettre cette réponse à son client.
Pour déterminer si une réponse HTTP 5XX a été relayée depuis un backend ou si elle a été générée par le proxy de l'équilibreur de charge, vérifiez le champ statusDetails dans Cloud Logging.
- Si
statusDetailsest défini surresponse_sent_by_backend, l'équilibreur de charge a relayé la réponse 5XX du backend. Résolvez le problème sur vos backends. - Si
statusDetailsest un autre message d'échec, la réponse 5XX est générée par l'équilibreur de charge.
Les modifications de configuration de l'équilibreur de charge d'application externe global, telles que l'ajout ou la suppression d'un service de backend, peuvent entraîner une brève période pendant laquelle vous êtes confronté à des réponses HTTP 502 avec statusDetails comme failed_to_pick_backend. Ce comportement est normal lors de la propagation des modifications de configuration aux GFE dans le monde entier.
Avant de commencer le dépannage, vérifiez l'état du backend
Avant de résoudre les erreurs 5XX, vérifiez que vos backends sont opérationnels et que les vérifications de l'état réussissent. Si les backends ne sont pas opérationnels, le GFE de deuxième couche ne peut pas leur transférer de requêtes, ce qui peut entraîner des erreurs 5XX même si tout le reste est correctement configuré.
- Vérifiez qu'une règle de pare-feu est configurée pour autoriser les vérifications d'état. En l'absence d'une telle règle, les vérifications de l'état échouent et les journaux de l'équilibreur de charge peuvent afficher un champ
statusDetailsavec la valeurfailed_to_pick_backend. - Vérifier que le trafic de vérification de l'état atteint vos VM de backend. Pour ce faire, activez la journalisation des vérifications d'état et recherchez les entrées de journal ayant réussi.
Pour les nouveaux équilibreurs de charge, il est possible que vous ne voyiez pas immédiatement d'entrées de journal de vérification de l'état réussies. Cela peut signifier que l'état initial du backend n'est pas encore passé de
UNHEALTHYà un autre état. Les entrées de journal de vérification d'état réussies ne s'affichent qu'une fois que le vérificateur d'état a reçu une réponse HTTP 200 OK du backend.
Si les vérifications de l'état échouent, résolvez les problèmes liés à votre application de backend et à vos règles de pare-feu. Si les vérifications de l'état réussissent, mais que vous continuez à voir des erreurs 5XX, vérifiez le champ statusDetails dans Cloud Logging pour identifier la source de l'erreur, comme décrit dans la section suivante.
Résoudre les erreurs en fonction de statusDetails
Si les erreurs HTTP 5XX persistent, utilisez le champ statusDetails dans Cloud Logging pour identifier la cause et résoudre le problème en conséquence.
L'équilibreur de charge d'application externe global et l'équilibreur de charge d'application externe régional génèrent des codes d'état HTTP significatifs, tels que HTTP 503 (Service indisponible) et HTTP 504 (Expiration du délai de la passerelle).
L'équilibreur de charge d'application classique utilise toujours le code d'état HTTP 502 "Bad Gateway" pour toutes les erreurs générées par l'équilibreur de charge.
| statusDetails | Cause et solution possibles |
|---|---|
failed_to_pick_backendfailed_to_pick_backend_by_hash |
Cause : le GFE de deuxième couche n'a pas pu sélectionner de backend opérationnel pour acheminer la requête.
Cette erreur peut se produire pour l'une des raisons suivantes :
Solution :
|
failed_to_connect_to_backend |
Cause : le GFE de deuxième couche n'a pas réussi à établir une connexion avec une instance de backend (SYN-ACK non reçu). Cette erreur peut également être due à une erreur interne du GFE qui l'empêche de se connecter au backend, ou à une panne régionale ou à une perturbation du réseau (par exemple, une coupure de fibre optique) qui empêche les GFE de première couche de communiquer avec les GFE de deuxième couche.
Solution :
|
backend_connection_closed_before_data_sent_to_client |
Cause : la connexion entre le GFE de deuxième couche et le backend a été fermée de manière inattendue avant que la réponse puisse être envoyée au client. Ce problème peut être dû au serveur Web de backend ou à un appareil intermédiaire.
Cela peut également se produire lorsque vous utilisez GKE si les pods sont en cours de réduction ou d'arrêt, et que les backends de l'équilibreur de charge sont de type NEG.
Solution :
|
backend_timeout |
Cause : le GFE de deuxième couche a établi une connexion avec le backend, mais celui-ci n'a pas envoyé de réponse dans le délai avant expiration du service de backend configuré.
Solution :
|
retriable_error |
Cause : cette erreur 503 peut se produire si des outils d'infrastructure en tant que code (comme Terraform) mettent à jour les règles de l'équilibreur de charge de manière à supprimer temporairement les règles du mappage d'URL avant de les ajouter à nouveau, ou en raison de problèmes de configuration ou de réseau Google internes et temporaires lors des déploiements ou des transmissions de configuration.
Solution :
|
Résoudre les erreurs HTTP 408
Avec le trafic HTTP, la durée maximale pour que le client termine d'envoyer sa requête est égale au délai avant expiration du service de backend. Si des réponses HTTP 408 avec jsonPayload.statusDetail client_timed_out apparaissent, cela signifie que la progression était insuffisante lors de l'envoi par proxy de la requête du client ou de la réponse du backend. Si le problème est dû à des clients rencontrant des problèmes de performances, vous pouvez résoudre ce problème en augmentant le délai avant expiration du service de backend.
Le trafic à équilibrage de charge n'a pas l'adresse source du client d'origine
Les adresses IP sources des paquets, telles qu'elles sont perçues par les backends, ne correspondent pas à l'adresse IP externe de l'équilibreur de charge. Les équilibreurs de charge basés sur un proxy, tels que les équilibreurs de charge d'application externes, utilisent deux connexions TCP pour transmettre le trafic du client aux backends :
- Connexion 1, du client d'origine vers l'équilibreur de charge (GFE ou sous-réseau proxy réservé)
- Connexion 2, de l'équilibreur de charge (GFE ou sous-réseau proxy réservé) vers la VM de backend ou le point de terminaison
Les adresses IP source et de destination de chaque connexion diffèrent en fonction du type d'équilibreur de charge d'application externe que vous utilisez. Pour plus d'informations, consultez la section Adresses IP sources pour les paquets clients.
Obtention d'une erreur d'autorisation lors de la tentative d'affichage d'un objet dans votre bucket Cloud Storage
Pour que des objets Cloud Storage puissent être diffusés via l'équilibrage de charge, ils doivent être accessibles publiquement. Veillez à mettre à jour les autorisations des objets diffusés pour les rendre lisibles publiquement.
L'URL ne diffuse pas l'objet Cloud Storage attendu
L'objet Cloud Storage à diffuser est déterminé en fonction de votre mappage d'URL et de l'URL demandée. Si le chemin de la requête correspond à un bucket backend dans votre mappage d'URL, l'objet Cloud Storage est déterminé en ajoutant le chemin de requête complet au bucket Cloud Storage spécifié par le mappage d'URL.
Par exemple, si vous mappez /static/* avec gs://[EXAMPLE_BUCKET], la requête envoyée à https://<GCLB IP or Host>/static/path/to/content.jpg essaie de diffuser gs://[EXAMPLE_BUCKET]/static/path/to/content.jpg. Si cet objet n'existe pas, vous obtenez le message d'erreur suivant à la place de l'objet :
NoSuchKeyThe specified key does not exist.
La compression ne fonctionne pas
L'équilibreur de charge d'application externe n'effectue pas lui-même la compression et la décompression des réponses, mais il peut diffuser des réponses générées par votre service de backend qui ont été compressées à l'aide d'outils tels que gzip ou DEFLATE.
Si les réponses diffusées par l'équilibreur de charge ne sont pas compressées alors qu'elles doivent l'être, vérifiez que le logiciel serveur Web exécuté sur les instances est configuré pour compresser les réponses. Par défaut, certains logiciels de serveur Web désactivent automatiquement la compression pour les requêtes comportant l'en-tête Via, qui indique que la requête a été transmise par un proxy. Étant donné qu'il s'agit d'un proxy, l'équilibreur de charge d'application externe ajoute un en-tête Via à chaque requête, comme requis par la spécification HTTP.
Pour activer la compression, vous devrez peut-être remplacer la configuration par défaut de votre serveur Web pour lui indiquer de compresser les réponses même si la requête comporte un en-tête Via.
Pour configurer les backends nginx afin de diffuser des réponses compressées mises en proxy via un équilibreur de charge d'application externe, procédez comme suit :
- Définissez l'instruction
gzip_proxiedde manière appropriée (par exemple, surany) et - Définissez l'instruction
gzip_varysuron.
Pour configurer les backends Apache afin de diffuser des réponses compressées mises en proxy via un équilibreur de charge d'application externe, procédez comme suit :
- Utilisez le filtre
DEFLATEet - Ajoutez
Vary Accept-Encodingà l'en-tête de réponse à l'aide du modulemod_headers.
Résoudre les problèmes de backends non opérationnels
Résoudre les problèmes liés à l'utilisation de HTTP/2 avec les backends
Assurez-vous que votre instance backend est opérationnelle et accepte le protocole HTTP/2. Pour ce faire, testez la connectivité à cette instance à l'aide de HTTP/2. Assurez-vous que la VM utilise des suites de chiffrement conformes à la spécification HTTP/2. Par exemple, certaines suites de chiffrement TLS 1.2 ne sont pas autorisées par HTTP/2. Consultez la liste noire des suites de chiffrement TLS 1.2.
Une fois que vous avez vérifié que la VM utilise le protocole HTTP/2, assurez-vous que la configuration de votre pare-feu autorise la passage par le vérificateur d'état et l'équilibreur de charge.
Si la configuration du pare-feu ne présente aucun problème, assurez-vous que l'équilibreur de charge est configuré pour communiquer avec le bon port sur la VM.
Résoudre les problèmes liés aux NEG Internet et aux backends externes
Avant de vous pencher sur les problèmes, familiarisez-vous avec les pages suivantes :
- Présentation des NEG Internet
- Configurer un équilibreur de charge d'application externe régional avec un backend externe (NEG Internet)
Le trafic n'atteint pas les points de terminaison
Après que vous avez configuré un service, le nouveau point de terminaison devient accessible via l'équilibreur de charge d'application externe lorsque les conditions suivantes sont remplies :
- Le point de terminaison est associé au NEG Internet.
- Le nom de domaine complet associé peut être correctement résolu par DNS (si vous utilisez le type de point de terminaison FQDN).
- Le point de terminaison est accessible sur Internet.
Si le trafic ne peut pas atteindre le point de terminaison, ce qui génère un code d'erreur 502, interrogez l'enregistrement TXT DNS _cloud-eoips.googleusercontent.com à l'aide d'un outil tel que dig ou nslookup. Notez les valeurs CIDR (après ip4:) et vérifiez que ces plages sont autorisées par votre pare-feu ou votre liste de contrôle d'accès (LCA) au cloud.
Après la configuration d'un backend externe, les requêtes adressées au backend externe ont échoué avec une erreur 5xx
- Vérifiez Logging.
- Vérifiez que le groupe de points de terminaison du réseau est configuré avec la valeur IP:Port ou FQDN:Port correcte pour votre backend externe.
- Si vous utilisez le nom de domaine complet, assurez-vous qu'il peut être résolu via le DNS public de Google. Pour ce faire, suivez ces étapes ou utilisez l'interface Web directement.
- Si vous n'accédez à l'équilibreur de charge que via son adresse IP externe et que le serveur Web d'origine attend un nom d'hôte, assurez-vous que vous envoyez un en-tête HTTP Host valide à votre backend. Pour ce faire, configurez un en-tête de requête personnalisé.
- Si vous communiquez avec un backend via HTTPS ou HTTP2 (tel que défini dans le champ
protocoldu service de backend) configuré en tant que point de terminaison de backend personnaliséINTERNET_FQDN_PORT, vérifiez que votre origine présente un certificat TLS (SSL) valide et que le nom de domaine complet configuré correspond à un autre nom de l'objet (SAN) dans la liste des SAN des certificats. Un certificat valide est défini comme un certificat signé par une autorité de certification publique et qui n'a pas expiré. - Lorsque vous utilisez des points de terminaison de backend externes
INTERNET_FQDN_PORT, les certificats autosignés ne sont pas acceptés par l'équilibreur de charges et sont refusés. - Lorsque vous utilisez HTTPS ou HTTP/2 avec des points de terminaison de type
INTERNET_IP_PORT, aucune validation de certificat SSL ni aucune vérification SAN n'est effectuée. Cela signifie que vous pouvez utiliser des certificats autosignés. Lorsque vous utilisez SSL, nous vous recommandons d'utiliser des points de terminaisonINTERNET_FQDN_PORTpour vous assurer que les SAN et les certificats de serveur peuvent être validés.
Résoudre les problèmes d'injection de Google tag gateway
La passerelle de la balise Google n'injecte pas correctement les balises ou provoque des erreurs.
Pour résoudre ce problème, utilisez l'explorateur de journaux de la console Google Cloud afin d'analyser les journaux générés par votre équilibreur de charge. Les problèmes de Google tag gateway n'affectent pas le code de réponse HTTP global ni le statusDetails de la requête de page Web. La réponse HTTP sera envoyée sans modification, même si l'injection de la balise Google échoue. Pour identifier les erreurs de passerelle, vérifiez le grpcStatus de l'exécution du plug-in dans la charge utile JSON de votre équilibreur de charge.
Assurez-vous que Cloud Logging est activé sur les services de backend qui diffusent le contenu du site Web pour les domaines où la passerelle de la balise Google est active. Pour configurer ce paramètre dans la console Google Cloud , accédez à Équilibrage de charge > Modifier > Configuration du backend.
Pour en savoir plus, consultez Activer la journalisation sur un service de backend existant.
Un taux d'échantillonnage de la journalisation supérieur à 0.0 doit être défini pour ce service de backend.
Dans la console Google Cloud , accédez à la page Explorateur de journaux et sélectionnez le projet approprié.
Ajustez la période pour couvrir celle où vous pensez que des problèmes se sont produits. Pour en savoir plus, consultez Utiliser le sélecteur de période.
Pour afficher les journaux des requêtes traitées par le plug-in d'injection de la passerelle Google Tag, utilisez la requête suivante :
resource.type="http_load_balancer" logName="projects/PROJECT_ID/logs/requests" \ jsonPayload.serviceExtensionInfo.extension="0-google-tag-gateway"
Remplacez
PROJECT_IDpar l'ID du projet.Identifiez les erreurs potentielles en examinant le champ
jsonPayload.serviceExtensionInfo.perProcessingRequestInfo.grpcStatus. Il s'agit de l'état de l'extension Google tag gateway elle-même.OK: l'extension a terminé son traitement sans erreur gRPC.- Toute valeur autre que
OK(par exemple,INTERNAL,UNAVAILABLE,DEADLINE_EXCEEDED) : indique une erreur lors de l'exécution de l'extension Google tag gateway.
Pour trouver les journaux dans lesquels l'extension Google tag gateway a signalé une erreur, utilisez la requête suivante :
resource.type="http_load_balancer" logName="projects/PROJECT_IDlogs/requests" \ jsonPayload.serviceExtensionInfo.extension="0-google-tag-gateway" NOT jsonPayload.serviceExtensionInfo.perProcessingRequestInfo.grpcStatus="OK"
Lorsque la requête précédente renvoie des résultats, examinez l'intégralité de l'entrée de journal pour corréler l'état de l'extension avec le résultat de la requête :
- Échec de l'extension Google tag gateway : un
grpcStatusautre queOK(en particulier sur l'événementRESPONSE_BODY) signifie qu'une erreur s'est produite lors du processus d'injection de la balise. Le code gRPC spécifique fournit des indices (par exemple,DEADLINE_EXCEEDEDindique un délai avant expiration). - Impact sur la demande de l'utilisateur : si la valeur
grpcStatusde l'extension de passerelle Google Tag n'est pasOK, vérifiez les valeurshttpRequest.statusetjsonPayload.statusDetailsdans la même entrée de journal. Par exemple, ungrpcStatusnon-OKcombiné àhttpRequest.status: 500etjsonPayload.statusDetails: service_extensions_errorsuggère que l'échec de l'extension de passerelle de la balise Google a entraîné l'affichage d'une erreur de serveur pour l'utilisateur. - Fréquence du problème : l'analyse des codes temporels et de la fréquence de ces journaux d'erreurs permet de déterminer si les problèmes d'injection de la passerelle de balise Google sont continus, intermittents ou liés à des événements spécifiques.
- Échec de l'extension Google tag gateway : un
Si vous rencontrez des problèmes lors de la configuration que la documentation ne peut pas résoudre, contactez l'assistance Google Ads.