Ce guide explique comment résoudre les problèmes de configuration d'un équilibreur de charge réseau passthrough interne Google Cloud. Avant de vous pencher sur les problèmes, familiarisez-vous avec les pages suivantes :
- Présentation de l'équilibreur de charge réseau passthrough interne
- Présentation du basculement pour les équilibreurs de charge réseau passthrough internes
- Équilibreurs de charge réseau passthrough internes en tant que sauts suivants
- Journalisation et surveillance de l'équilibreur de charge réseau passthrough interne
Résoudre les problèmes courants liés à Network Analyzer
Network Analyzer surveille automatiquement la configuration de votre réseau VPC et détecte les configurations non optimales ainsi que les erreurs de configuration. Il identifie les défaillances du réseau, fournit des informations sur l'origine des problèmes et suggère des solutions possibles. Pour en savoir plus sur les différents scénarios de configuration erronée qui sont automatiquement détectés par Network Analyzer, consultez la section Insights sur l'équilibreur de charge dans la documentation de Network Analyzer.
Network Analyzer est disponible dans la console Google Cloud dans le cadre de Network Intelligence Center.
Accéder à l'Analyse du réseauIncompatibilité 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
Si vous ne parvenez pas à vous connecter à votre équilibreur de charge réseau passthrough interne, vérifiez les problèmes courants suivants.
Vérifier les règles de pare-feu
- Assurez-vous que les règles de pare-feu autorisant les entrées sont définies afin de permettre les vérifications de l'état des VM de backend.
- Assurez-vous que les règles de pare-feu autorisant les entrées autorisent le trafic vers les VM de backend à partir des clients.
- Assurez-vous que des règles de pare-feu pertinentes permettent au trafic d'atteindre les VM de backend sur les ports utilisés par l'équilibreur de charge.
- Si vous utilisez des tags cibles pour les règles de pare-feu, assurez-vous que les VM de backend de l'équilibreur de charge sont correctement étiquetés.
Pour apprendre à configurer les règles de pare-feu requises par votre équilibreur de charge réseau passthrough interne, consultez la page Configurer les règles de pare-feu.
Vérifiez que l'environnement invité s'exécute sur la VM de backend.
Si vous pouvez vous connecter à une VM de backend opérationnelle, mais que vous ne pouvez pas vous connecter à l'équilibreur de charge, il se peut que l'environnement invité (anciennement, l'environnement invité Windows ou Linux) sur la VM ne s'exécute pas ou ne puisse pas communiquer avec le serveur de métadonnées (metadata.google.internal
, 169.254.169.254
).
Effectuez les vérifications suivantes :
- Vérifiez que l'environnement invité est installé et s'exécute sur la VM de backend.
- Assurez-vous que les règles de pare-feu du système d'exploitation invité de la VM de backend (
iptables
ou pare-feu Windows) ne bloquent pas l'accès au serveur de métadonnées.
Vérifier que les VM de backend acceptent les paquets envoyés à l'équilibreur de charge
Chaque VM de backend doit être configurée pour accepter les paquets envoyés à l'équilibreur de charge. En d'autres termes, la destination des paquets distribués aux VM de backend est l'adresse IP de l'équilibreur de charge. Dans la plupart des cas, ceci est mis en œuvre via l'utilisation d'une route locale.
Pour les VM créées à partir d'images Google Cloud, l'agent invité installe la route locale pour l'adresse IP de l'équilibreur de charge. Les instances Google Kubernetes Engine basées sur Container-Optimized OS implémentent ceci en utilisant plutôt iptables
.
Sur une VM de backend Linux, vous pouvez vérifier la présence de la route locale en exécutant la commande suivante. Remplacez LOAD_BALANCER_IP
par l'adresse IP de l'équilibreur de charge :
sudo ip route list table local | grep LOAD_BALANCER_IP
Vérifiez l'adresse IP du service et la liaison de port sur les VM de backend.
Les paquets envoyés à un équilibreur de charge réseau interne arrivent sur les VM de backend avec l'adresse IP de destination de l'équilibreur de charge lui-même. Ce type d'équilibreur de charge n'est pas un proxy, et ce comportement est normal.
Le logiciel s'exécutant sur la VM de backend doit effectuer les opérations suivantes :
- Écouter (être associé à) l'adresse IP de l'équilibreur de charge ou toute adresse IP (
0.0.0.0
ou::
) - Écouter (être associé à) un port inclus dans la règle de transfert de l'équilibreur de charge
Pour tester ce processus, connectez-vous à une VM de backend à l'aide de SSH ou de RDP. Ensuite, effectuez les tests suivants à l'aide de curl
, telnet
ou d'un outil similaire :
- Essayez d'accéder au service en le contactant à l'aide de l'adresse IP interne de la VM de backend elle-même,
127.0.0.1
, ou localhost. - Essayez d'accéder au service en le contactant à l'aide de l'adresse IP de la règle de transfert de l'équilibreur de charge.
Vérifiez si la VM cliente se trouve dans la même région que l'équilibreur de charge.
Si le client se connectant à l'équilibreur de charge se trouve dans une autre région, assurez-vous que l'accès mondial est activé.
Vérifiez que le trafic de vérification de l'état peut atteindre les VM de backend.
Pour vérifier que le trafic associé aux vérifications d'état atteint vos VM de backend, activez la journalisation des vérifications d'état et recherchez les entrées de journal ayant réussi.
Vous pouvez également vérifier que la fonctionnalité d'équilibreur de charge est opérationnelle en affichant l'état "Opérationnel" pour le backend.
Si le backend ne comporte aucune instance opérationnelle, assurez-vous que la vérification d'état appropriée est configurée et que chaque VM du backend écoute les ports de vérification d'état configurés.
À partir d'un client appartenant au même réseau VPC, exécutez la commande suivante pour vérifier que la VM de backend écoute un port TCP spécifique :
telnet SERVER_IP_ADDRESS PORT
Remplacez les éléments suivants :
- SERVER_IP_ADDRESS : adresse IP de la VM de backend.
- PORT : port que vous avez configuré pour la vérification d'état.
Par défaut, le port de vérification de l'état est
80
.
Vous pouvez également utiliser SSH pour connecter la VM de backend et exécuter la commande suivante :
curl localhost:PORT
Encore une fois, remplacez PORT par le port que vous avez configuré pour votre vérification d'état.
Une autre façon d'effectuer ce test consiste à exécuter la commande suivante :
netstat -npal | grep LISTEN
Dans le résultat, recherchez ce qui suit :
<var>LB_IP_ADDRESS</var>:<var>PORT</var>
0.0.0.0:<var>PORT</var>
:::<var>PORT</var>
Cela ne détermine pas si le routage est correctement configuré pour répondre à l'adresse IP de l'équilibreur de charge. Il s'agit d'un problème distinct avec un symptôme similaire. Pour le routage, exécutez la commande ip route list table local
et vérifiez que l'adresse IP de l'équilibreur de charge est répertoriée, comme décrit dans la section Vérifier que les VM de backend acceptent les paquets envoyés à l'équilibreur de charge.
Résoudre les problèmes liés aux performances
Si vous remarquez des problèmes de performances et une latence accrue, vérifiez les problèmes courants suivants.
Vérifier le fonctionnement du serveur
Si tous les serveurs de backend répondent aux vérifications d'état, vérifiez que les requêtes du client fonctionnent correctement lorsqu'elles sont émises directement sur le serveur. Par exemple, si le client envoie des requêtes HTTP au serveur via l'équilibreur de charge et qu'il n'y a pas de réponse, ou que la réponse est nettement plus lente que d'habitude, envoyez la même requête HTTP surChacun des serveurs backend et observez le comportement.
Si l'un des serveurs backend individuels ne se comporte pas correctement lorsque la requête est émise depuis le serveur lui-même, vous pouvez en conclure que la pile des applications du serveur ne fonctionne pas correctement. Vous pouvez vous concentrer sur le dépannage de l'application elle-même. Si tous les serveurs fonctionnent correctement, l'étape suivante consiste à examiner le client et le réseau.
Vérifier la connectivité réseau et la latence
Si tous les serveurs de backend répondent correctement aux requêtes, vérifiez la latence du réseau. À partir d'une VM cliente, exécutez une commande ping constante sur chaque serveur, comme suit :
ping SERVER_IP_ADDRESS
Ce test montre la latence du réseau intégré et si le réseau supprime des paquets. Dans certains cas, des règles de pare-feu peuvent bloquer le trafic ICMP. Si tel est le cas, ce test ne produit aucun résultat. Vérifiez auprès de l'administrateur de vos règles de pare-feu si c'est le cas.
Si la commande ping
affiche une latence nettement supérieure à celle d'une perte de paquets normale ou importante, ouvrez une demande d'assistance Google Cloud pour une analyse plus approfondie.
Identifier les combinaisons client-serveur problématiques
Si le test ping
du réseau suggère une faible latence et aucune perte de paquets, l'étape suivante consiste à identifier la combinaison client-serveur spécifique, le cas échéant, qui produit des résultats problématiques. Pour ce faire, vous pouvez réduire le nombre de serveurs backend de moitié jusqu'à atteindre 1, tout en reproduisant simultanément le comportement problématique (par exemple, une latence élevée ou aucune réponse).
Si vous identifiez une ou plusieurs combinaisons client/serveur problématiques, effectuez une capture et analyse du trafic.
Si aucune combinaison client-serveur problématique n'est identifiée, passez à la section Tests de performances.
Effectuer une capture et une analyse du trafic
Si vous identifiez une combinaison problématique spécifique serveur-client, vous pouvez utiliser la capture de paquets pour identifier la partie de la communication qui entraîne un retard ou une rupture. La capture de paquets peut être effectuée avec tcpdump comme suit :
- Installez tcpdump sur le serveur.
- Démarrez la capture tcpdump sur le serveur.
À partir d'un client, émettez un exemple de requête, tel que :
curl URL
Analysez le résultat de tcpdump pour identifier le problème.
Effectuez des tests de performances
Si vous n'identifiez aucune combinaison client-serveur problématique et que les performances globales de tous les clients et serveurs sont inférieures aux prévisions, envisagez les tests suivants :
- Un client et un serveur, sans équilibrage de charge
Un client et un serveur, avec équilibrage de charge
Résultat : la combinaison des résultats des tests [1] et [2] détermine si l'équilibreur de charge est à l'origine du problème.
Un client et plusieurs serveurs, avec un équilibrage de charge
Résultat : identifier la limite de performances d'un client.
Plusieurs clients et un seul serveur, avec équilibrage de charge
Résultat : identifiez la limite de performances d'un serveur.
Plusieurs clients et plusieurs serveurs, sans équilibrage de charge
Résultat : identifier la limite de performances du réseau.
Lorsque vous exécutez un test de contrainte avec plusieurs clients et serveurs, les ressources client ou serveur (processeur, mémoire, E/S) peuvent entraîner des goulots d'étranglement et réduire les résultats agrégés. Une dégradation des résultats agrégés peut se produire même si chaque client et serveur se comporte correctement.
Résoudre les problèmes liés aux réseaux VPC partagés
Si vous utilisez un VPC partagé et que vous ne pouvez pas créer un équilibreur de charge réseau passthrough interne dans un sous-réseau particulier, cela peut être dû à une règle d'administration. Dans la règle d'administration, ajoutez le sous-réseau à la liste des sous-réseaux autorisés ou contactez l'administrateur de votre organisation. Pour plus d'informations, consultez la documentation sur la contrainte constraints/compute.restrictSharedVpcSubnetworks
.
Résoudre les problèmes de basculement
Si vous avez configuré le basculement pour un équilibreur de charge réseau passthrough interne, les sections suivantes décrivent les problèmes qui peuvent survenir.
Connectivité
- Assurez-vous que vous avez désigné au moins un backend de basculement.
- Vérifiez les paramètres de votre règle de basculement :
- Taux de basculement
- Suppression du trafic lorsqu'aucune VM de backend n'est opérationnelle
- Désactivation du drainage de connexion lors du basculement
Problèmes liés aux groupes d'instances gérés et au basculement
- Problème constaté : le pool actif bascule constamment (oscillation) entre le backend principal et le backend de basculement.
- Motif possible : l'utilisation de groupes d'instances gérés avec autoscaling et basculement peut entraîner le basculement et la restauration automatique répétés du pool actif entre le backend principal et le backend de basculement. Google Cloud ne vous empêche pas de configurer le basculement avec les groupes d'instances gérés, car cette configuration pourrait être bénéfique pour votre déploiement.
Désactiver la restriction sur le drainage de connexion pour les groupes de basculement
La désactivation du drainage de connexion ne fonctionne que si le service de backend est configuré avec le protocole TCP.
Le message d'erreur suivant s'affiche si vous créez un service de backend avec UDP alors que le drainage de connexion est désactivé :
gcloud compute backend-services create my-failover-bs \ --global-health-checks \ --load-balancing-scheme=internal \ --health-checks=my-tcp-health-check \ --region=us-central1 \ --no-connection-drain-on-failover \ --drop-traffic-if-unhealthy \ --failover-ratio=0.5 \ --protocol=UDP ERROR: (gcloud.compute.backend-services.create) Invalid value for [--protocol]: can only specify --connection-drain-on-failover if the protocol is TCP.
Trafic envoyé à des VM de backend inattendues
Commencez par vérifier le point suivant : si la VM cliente est également une VM de backend de l'équilibreur de charge, le comportement attendu est que les connexions envoyées à l'adresse IP de la règle de transfert de l'équilibreur de charge sont toujours prises en charge par la VM de backend elle-même. Pour plus d'informations, reportez-vous au test des connexions à partir d'un client unique et à l'envoi de requêtes à partir de VM à équilibrage de charge.
Si la VM cliente n'est pas une VM de backend de l'équilibreur de charge :
Pour les requêtes émanant d'un seul client, reportez-vous au test des connexions à partir d'un client unique afin de comprendre les limites de cette méthode.
Assurez-vous que vous avez configuré les règles de pare-feu autorisant les entrées de façon à autoriser les vérifications de l'état.
Pour la configuration du basculement, veillez à comprendre le fonctionnement de l'appartenance au pool actif, et à quel moment Google Cloud effectue un basculement et une restauration automatique. Examinez la configuration de votre équilibreur de charge :
Utilisez la console Google Cloud pour vérifier le nombre de VM de backend opérationnelles dans chaque groupe d'instances backend. La console Google Cloud vous indique également quelles VM se trouvent dans le pool actif.
Assurez-vous que le taux de basculement de l'équilibreur de charges est correctement défini. Par exemple, si vous avez dix VM principales et un ratio de basculement de
0.2
, cela signifie que Google Cloud effectue un basculement lorsque moins de deux (10 × 0.2 = 2
) VM principales sont opérationnelles. Un taux de basculement de0.0
a une signification particulière : Google Cloud effectue un basculement lorsqu'aucune VM principale n'est opérationnelle.
Connexions existantes interrompues pendant le basculement ou la restauration automatique
Modifiez la règle de basculement du service de backend. Assurez-vous que le drainage de connexion lors du basculement est activé.
Résoudre les problèmes liés à l'équilibreur de charge en tant que saut suivant
Lorsque vous définissez un équilibreur de charge réseau passthrough interne en tant que saut suivant d'une route statique personnalisée, les problèmes suivants peuvent se produire :
Problèmes de connectivité
Si vous ne pouvez pas pinguer une adresse IP dans la plage de destination d'une route dont le saut suivant est une règle de transfert pour un équilibreur de charge réseau passthrough interne, notez qu'une route utilisant ce type de saut suivant peut ne pas traiter le trafic ICMP selon la date de création de la route. Si la route a été créée avant le 15 mai 2021, elle ne traite que le trafic TCP et UDP jusqu'au 16 août 2021. À compter du 16 août 2021, toutes les routes transfèrent automatiquement tout le trafic des protocoles (TCP, UDP et ICMP), quelle que soit la date de création des routes. Si vous ne souhaitez pas attendre, vous pouvez activer la fonctionnalité de ping dès maintenant en créant des routes et en supprimant les anciennes.
Lorsque vous utilisez un équilibreur de charge réseau passthrough interne en tant que saut suivant pour une route statique personnalisée, l'ensemble du trafic est distribué aux VM de backend opérationnelles de l'équilibreur de charge, quel que soit le protocole configuré pour le service de backend interne de l'équilibreur de charge et quel que soit le ou les ports configurés sur la règle de transfert interne de l'équilibreur de charge.
Vérifiez que vous avez créé des règles de pare-feu autorisant les entrées qui identifient correctement les sources de trafic à distribuer aux VM de backend via le saut suivant de la route statique personnalisée. Les paquets qui arrivent sur les VM de backend conservent leur adresse IP source, même lorsqu'ils sont transmis via une route statique personnalisée.
Valeur incorrecte pour la plage de destination
La plage de destination d'une route statique personnalisée ne peut pas être plus spécifique que les routes de sous-réseau dans votre réseau VPC. Si vous recevez le message d'erreur suivant lors de la création d'une route statique personnalisée :
Invalid value for field 'resource.destRange': [ROUTE_DESTINATION]. [ROUTE_DESTINATION] hides the address space of the network .... Cannot change the routing of packets destined for the network.
Vous ne pouvez pas créer une route statique personnalisée avec une destination qui correspond exactement à une route de sous-réseau ou est plus spécifique (avec un masque plus long). Pour plus d'informations, reportez-vous à l'applicabilité et à l'ordre de priorité.
Si des paquets sont dirigés vers une destination inattendue, supprimez les autres routes de votre réseau VPC avec des destinations plus spécifiques. Examinez l'ordre de routage pour comprendre la sélection de route de Google Cloud.
Résoudre les problèmes de journalisation
Si vous configurez la journalisation pour un équilibreur de charge réseau passthrough interne, les problèmes suivants peuvent se produire :
- Les mesures de latence DAR, telles que les valeurs de type octet, peuvent ne pas figurer dans certains journaux si le nombre de paquets échantillonnés est insuffisant pour capturer cette valeur. Cette situation est davantage susceptible de se produire pour les connexions à faible volume.
- Les valeurs de type DAR ne sont disponibles que pour les flux TCP.
- Certains paquets sont envoyés sans charge utile. Si l'échantillonnage porte sur des paquets ne comportant que des en-têtes, la valeur de type octet est
0
.
Étapes suivantes
- Pour plus d'informations sur la configuration de la journalisation et de la surveillance pour les équilibreurs de charge réseau passthrough internes, consultez la page Journalisation et surveillance de l'équilibreur de charge réseau passthrough interne.
- Pour en savoir plus sur l'accès aux équilibreurs de charge réseau passthrough internes à partir des réseaux pairs connectés à votre réseau VPC, consultez la page Équilibreurs de charge réseau passthrough internes.