À 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.simple
paramè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.consistentHash
paramè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.
- Règle de destination Istio
- Documentation de l'API Gloo Gateway
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 :- Configurer Gloo Gateway dans un seul cluster.
- Déployer des exemples d'applications.
- 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ètre | Description |
---|---|
spec.config.simple | Spécifiez comment la passerelle d'entrée sélectionne un service en amont pour traiter une demande entrante. Choisissez parmi les options suivantes :
|
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ètre | Description |
---|---|
spec.config.consistentHash.httpCookie | Spé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ètre | Description |
---|---|
spec.config.consistentHash.httpHeaderName | Spé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-utilisateur L'en-tête HTTP est utilisé. |
Vérifier les règles de l'équilibreur de charge
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 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"}}]}
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 Envoyez quelques demandes à l'application d'avis avec le
x-utilisateur
l'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 "}}]} %
Retirer le
x-utilisateur
header 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