Équilibreur de charge et hachage cohérent :: Gloo Gateway Docs (2023)

La navigation :
Spécifiez comment vous souhaitez que la passerelle d'entrée sélectionne un service en amont pour répondre à une demande client entrante.

À propos de l'équilibrage de charge simple

Gloo Gateway prend en charge plusieurs algorithmes d'équilibrage de charge pour sélectionner les services en amont vers lesquels transférer les demandes entrantes. Par défaut, la passerelle sélectionne l'amont avec le moins de requêtes. Cependant, vous souhaiterez peut-être modifier ce comportement et utiliser à la place un algorithme de répétition alternée pour transmettre la demande à un amont. Pour plus d'informations sur les options d'équilibrage de charge disponibles, consultezConfigurer les politiques d'équilibrage de charge.

Pour configurer un équilibrage de charge simple pour les requêtes entrantes, vous utilisez lespec.config.simpleparamètre dans la stratégie d'équilibrage de charge.

À propos de l'affinité de session et du hachage cohérent

L'affinité de session, également appelée session persistante, vous permet d'acheminer les demandes d'une session particulière vers la même instance de service en amont qui a servi la demande initiale. Cette configuration est particulièrement utile si vous disposez d'un service en amont qui effectue des opérations coûteuses et met en cache la sortie ou les données pour les demandes ultérieures. Avec l'affinité de session, vous vous assurez que l'opération coûteuse est effectuée une seule fois et que les requêtes suivantes peuvent être traitées à partir du cache en amont, ce qui peut améliorer considérablement les coûts opérationnels et les temps de réponse pour vos clients.

La stratégie d'équilibrage de charge vous permet de configurer une affinité de session logicielle entre un client et un service en amont à l'aide d'un algorithme de hachage cohérent sur les en-têtes HTTP, les cookies ou d'autres propriétés, telles que l'adresse IP source ou un paramètre de requête. Par exemple, si vous avez 3 hôtes en amont qui peuvent servir la requête, chaque hôte est haché avec quelque chose que le client fournit, comme un en-tête ou un cookie. Si une requête ultérieure utilise le même en-tête ou cookie, les valeurs de hachage sont les mêmes et la requête est transmise au même hôte en amont qui a servi la requête initiale. Pour configurer un hachage cohérent, vous utilisez lespec.config.consistentHashparamètre dans la stratégie d'équilibrage de charge.

Le hachage cohérent est moins fiable qu'une implémentation de session persistante courante, dans laquelle le service en amont est codé dans un cookie et l'affinité peut être maintenue tant que le service en amont est disponible. Avec un hachage cohérent, l'affinité peut être perdue lorsqu'un service en amont est ajouté ou supprimé.

Si vous avez configuré un routage basé sur la localité, comme avec une stratégie de basculement et de détection des valeurs aberrantes, vous pouvez utiliser un hachage cohérent uniquement si tous les points de terminaison se trouvent dans la même localité. Si vos services sont répartis sur plusieurs localités, un hachage cohérent peut ne pas fonctionner, car l'affinité de session depuis ou vers des points de terminaison inconnus ne peut pas être créée.

Pour plus d'informations, consultez les ressources suivantes.

Avant que tu commences

Ce guide suppose que vous utilisez les mêmes noms pour les composants tels que les clusters, les espaces de travail et les espaces de noms que dans la mise en route, et que votre contexte Kubernetes est défini sur le cluster dans lequel vous stockez votre configuration Gloo (généralement le cluster de gestion). Si vous avez des noms différents, assurez-vous de mettre à jour les exemples de fichiers de configuration dans ce guide.

Suivez les instructions de démarrage pour :
  1. Configurer Gloo Gateway dans un seul cluster.
  2. Déployer des exemples d'applications.
  3. Configurez un écouteur HTTP sur votre passerelle et configurez le routage de base pour les exemples d'applications.

Configurer les politiques d'équilibrage de charge

Vous pouvez appliquer une stratégie d'équilibrage de charge au niveau de la destination. Pour plus d'informations, voirApplication des politiques.

  • Équilibrage de charge simple
  • Hachage cohérent avec les cookies
  • Hachage cohérent avec les en-têtes

La stratégie d'équilibreur de charge suivante sélectionne de manière aléatoire l'un des services de révision disponibles pour répondre à une demande entrante.

apiVersion: trafficcontrol.policy.gloo.solo.io/v2type: LoadBalancerPolicymétadonnées: annotations: cluster.solo.io/cluster: "" nom: simple-loadbalancer-policy espace de noms: infos livrespécification: appliquerauxdestinations: - port: nombre: 9080 sélecteur: Étiquettes: application: Commentaires configuration: simple: ALÉATOIRE

Consultez le tableau suivant pour comprendre cette configuration.

ParamètreDescription
spec.config.simpleSpécifiez comment la passerelle d'entrée sélectionne un service en amont pour traiter une demande entrante. Choisissez parmi les options suivantes :
  • NON SPÉCIFIÉ : vous ne spécifiez pas d'algorithme d'équilibrage de charge et la passerelle utilise l'algorithme d'équilibrage de charge Istio par défaut,LEAST_REQUEST.
  • ALÉATOIRE: La passerelle sélectionne au hasard une instance de service en amont saine. Ce paramètre est généralement plus rapide queROUND_ROBINsi vous n'avez pas configuré de stratégie de vérification de l'état.
  • TRAVERSER: La passerelle n'équilibre pas la charge. Au lieu de cela, il transmet directement la demande au service en amont demandé par le client, par exemple en fournissant l'adresse IP de la destination cible dans la demande.
  • ROUND_ROBIN: La passerelle transmet la demande à chaque service en amont à tour de rôle. Notez que ce paramètre ne tient pas compte de la charge actuelle d'une instance et peut donc conduire à des services en amont qui doivent gérer une quantité excessive de requêtes entrantes tandis que d'autres restent sous-utilisés. Pour vous assurer que vos hôtes restent équilibrés, utilisez leLEAST_REQUESTà la place.
  • LEAST_REQUEST: la passerelle transmet les requêtes au service en amont avec le moins de requêtes en attente. Il s'agit du paramètre par défaut dans Gloo Gateway, et il est généralement plus rapide queROUND_ROBIN.

L'exemple suivant configure l'affinité de session entre un client et un service en amont à l'aide d'un cookie.

apiVersion: trafficcontrol.policy.gloo.solo.io/v2type: LoadBalancerPolicymétadonnées: annotations: cluster.solo.io/cluster: "" nom: sticky-loadbalancer-politique espace de noms: infos livrespécification: appliquerauxdestinations: - port: nombre: 9080 sélecteur: Étiquettes: application: Commentaires configuration: hachage cohérent: httpCookie: nom: Pépite de chocolat ttl: 10s

Consultez le tableau suivant pour comprendre cette configuration.

ParamètreDescription
spec.config.consistentHash.httpCookieSpécifiez le cookie à utiliser pour créer la valeur de hachage de la session entre un client et un service en amont, ce qui garantit l'affinité de session dans les demandes ultérieures. Dans cet exemple, le cookie est nomméPépite de chocolat. Le cookie est valide pendant 10 secondes (ttl). Après son expiration, un nouvel hôte est sélectionné pour servir les demandes entrantes.

L'exemple suivant configure l'affinité de session entre un client et un service en amont à l'aide d'en-têtes HTTP.

apiVersion: trafficcontrol.policy.gloo.solo.io/v2type: LoadBalancerPolicymétadonnées: annotations: cluster.solo.io/cluster: "" nom: sticky-loadbalancer-politique espace de noms: infos livrespécification: appliquerauxdestinations: - port: nombre: 9080 sélecteur: Étiquettes: application: Commentaires configuration: hachage cohérent: httpHeaderName: x-utilisateur

Consultez le tableau suivant pour comprendre cette configuration.

ParamètreDescription
spec.config.consistentHash.httpHeaderNameSpécifiez l'en-tête HTTP à utiliser pour créer la valeur de hachage de la session entre un client et un service en amont, ce qui garantit l'affinité de session dans les demandes ultérieures. Dans cet exemple, lex-utilisateurL'en-tête HTTP est utilisé.

Vérifier les règles de l'équilibreur de charge

  1. Créez une règle d'équilibrage de charge simple qui utilise la répétition alternée pour sélectionner le service d'examens en amont.

    kubectl appliquer -F- <apiVersion: trafficcontrol.policy.gloo.solo.io/v2type: LoadBalancerPolicymétadonnées: annotations: cluster.solo.io/cluster: "" nom: loadbalancer-policy espace de noms: infos livrespécification: appliquerauxdestinations: - port: nombre: 9080 sélecteur: Étiquettes: application: Commentaires configuration: simple: ROUND_ROBINEOF
  2. Envoyez plusieurs demandes à l'application d'avis. Dans votre sortie CLI, assurez-vous que vous obtenez une réponse de chacune des versions de révision.

    • HTTP
    • HTTPS
    curl -vik --resolve www.example.com:80 :${INGRESS_GW_IP}http://www.example.com:80/reviews/1
    curl -vik --resolve www.exemple.com:443 :${INGRESS_GW_IP}https://www.exemple.com:443/avis/1

    Exemple de sortie :

    * Marquer le bundle comme ne prenant pas en charge le multi-usage< HTTP/1.1 200 OKHTTP/1.1 200 OK...< * Connexion #0 à l'hôte www.example.com laissée intacte{"id": "1","podname": "reviews- v2-cdd8fb88b-p74k5","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": "Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !", " rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": "Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport aux autres pièces de Shakespeare.", "rating": {"stars": 4, "color": "noir"}}]} %
    {"id": "1","podname": "reviews-v1-777df99c6d-xhwjg","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": " Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !"},{ "reviewer": "Reviewer2", "text": "Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport aux autres pièces de Shakespeare."} ]}
    {"id": "1","podname": "reviews-v3-58b6479b-p476q","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": " Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !", "rating": {"stars": 5, "color": "red"}},{ "reviewer": "Reviewer2", "text": " Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport à d'autres pièces de Shakespeare.", "rating": {"stars": 4, "color": "red"}}]}
  3. Modifiez votre stratégie d'équilibrage de charge pour configurer un hachage cohérent basé sur un en-tête HTTP.

    kubectl appliquer -F- <apiVersion: trafficcontrol.policy.gloo.solo.io/v2type: LoadBalancerPolicymétadonnées: annotations: cluster.solo.io/cluster: "" nom: loadbalancer-policy espace de noms: infos livrespécification: appliquerauxdestinations: - port: nombre: 9080 sélecteur: Étiquettes: application: Commentaires configuration: hachage cohérent: httpHeaderName: x-utilisateurEOF
  4. Envoyez quelques demandes à l'application d'avis avec lex-utilisateurl'en-tête que vous avez spécifié dans la stratégie d'équilibrage de charge. Notez que cette fois, vous obtenez une réponse du même module d'avis, commeavis-v2.

    • HTTP
    • HTTPS
    boucle -vik -H"utilisateur x : moi"--resolve www.exemple.com:80 :${INGRESS_GW_IP}http://www.example.com:80/reviews/1
    boucle -vik -H"utilisateur x : moi"--resolve www.exemple.com:443 :${INGRESS_GW_IP}https://www.exemple.com:443/avis/1

    Exemple de sortie :

    * Connexion #0 à l'hôte www.example.com laissée intacte{"id": "1","podname": "reviews-v2-cdd8fb88b-p74k5","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": "Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !", "rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": "Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport aux autres pièces de Shakespeare.", "rating": {"stars": 4, "color": "black "}}]} %
  5. Retirer lex-utilisateurheader et vérifiez que vous obtenez à nouveau des réponses de tous les pods d'avis.

    • HTTP
    • HTTPS
    curl -vik --resolve www.example.com:80 :${INGRESS_GW_IP}http://www.example.com:80/reviews/1
    curl -vik --resolve www.exemple.com:443 :${INGRESS_GW_IP}https://www.exemple.com:443/avis/1

    Exemple de sortie :

    * Connexion #0 à l'hôte www.example.com laissée intacte{"id": "1","podname": "reviews-v1-777df99c6d-tmds7","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": "Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !"},{ "reviewer": "Reviewer2", "text": "Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport à d'autres pièces de Shakespeare."}]}%
    {"id": "1","podname": "reviews-v2-cdd8fb88b-p74k5","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": " Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !", "rating": {"stars": 5, "color": "black"}},{ "reviewer": "Reviewer2", "text": " Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport à d'autres pièces de Shakespeare.", "rating": {"stars": 4, "color": "black"}}]}%
    {"id": "1","podname": "reviews-v3-58b6479b-p476q","clustername": "null","reviews": [{ "reviewer": "Reviewer1", "text": " Une pièce extrêmement divertissante de Shakespeare. L'humour burlesque est rafraîchissant !", "rating": {"stars": 5, "color": "red"}},{ "reviewer": "Reviewer2", "text": " Absolument amusant et divertissant. La pièce manque de profondeur thématique par rapport à d'autres pièces de Shakespeare.", "rating": {"stars": 4, "color": "red"}}]}

Nettoyer

Vous pouvez nettoyer la stratégie d'équilibrage de charge et les ressources associées que vous avez créées dans ce guide en exécutant les commandes suivantes.

kubectl delete loadbalancerpolicy loadbalancer-policy -n bookinfo

References

Top Articles
Latest Posts
Article information

Author: Edwin Metz

Last Updated: 07/15/2023

Views: 5261

Rating: 4.8 / 5 (58 voted)

Reviews: 81% of readers found this page helpful

Author information

Name: Edwin Metz

Birthday: 1997-04-16

Address: 51593 Leanne Light, Kuphalmouth, DE 50012-5183

Phone: +639107620957

Job: Corporate Banking Technician

Hobby: Reading, scrapbook, role-playing games, Fishing, Fishing, Scuba diving, Beekeeping

Introduction: My name is Edwin Metz, I am a fair, energetic, helpful, brave, outstanding, nice, helpful person who loves writing and wants to share my knowledge and understanding with you.