Nous utilisons envoy comme proxy frontal qui redirige le trafic entrant vers plusieurs clusters kubernetes (pour de nouveaux services) et vers les backends de l'architecture héritée du patrimoine historique. Celles. il combine les fonctions d'un équilibreur ordinaire, d'un point de terminaison SSL et d'une passerelle api.
Avant l'envoyé, nous avions du nginx là-bas, comme beaucoup d'autres. Logiciel cool, j'aime ça. Toute l'histoire avec Envoy a commencé au moment où les microservices ont commencé en grand nombre et même les modèles ansibles ne vous ont pas épargné le temps croissant passé à gérer la configuration nginx. Le déploiement a pris beaucoup de temps, et les administrateurs ont été découragés de faire des demandes monotones telles que «me procurer un domaine pour un nouveau service». Une meilleure automatisation ™ était clairement nécessaire. Idéalement, pour que celui qui a besoin de démarrer quelque chose puisse le faire lui-même et de préférence au même endroit où il a configuré d'autres paramètres de son service. De plus, je souhaitais plus de transparence dans ce qui se passe à l'intérieur du proxy frontal et dans le segment entre celui-ci et en amont, et plus de capacités d'équilibrage natives (requêtes répétitives de différents types, exclusion d'hôtes malsains sous certaines conditions, vérifications d'aide). Et attiré la technologie de pointe,bien sûr.
Bref, voici une traduction de l' article sur la transition de Dropbox vers Envoy, il y a beaucoup de détails sur sa comparaison avec nginx. Je vais vous en dire plus sur les impressions personnelles des résultats de la transition.
Le fait le plus important et le plus évident pour quiconque a découvert l'utilisation d'un logiciel évolutif: soyez prêt à payer pour cela. La complexité accrue de la configuration (plan de données + plan de contrôle), et s'il y a des amont non seulement dans kubernetes, alors peut-être même écrire votre propre plan de contrôle. Aussi, dans le cas d'envoyé spécifiquement, pour la relative jeunesse du logiciel et donc pour l'absence de certaines fonctionnalités nginx communes + une fréquence accrue de mises à jour, si ces fonctionnalités leur sont ajoutées. Par exemple, il peut s'avérer que dans les options standard, il n'y a pas de valeur par défaut pour nginx combinant des barres obliques dans: chemin, en supprimant le port de l'en-tête Host, ou, Dieu me pardonne, réécrire par expression régulière. Pour aujourd'hui, tout de cette liste a déjà été ajouté, mais vous trouverez sûrement autre chose.
Les choses positives
Mauvaise documentation! Du côté positif, l'équipe d'envoyés a finalement embauché un rédacteur technique à la fin de l'année dernière et les choses sont devenues beaucoup plus amicales. Au moins, vous n'avez plus besoin d'étudier la manière de traiter une demande via le code source et de trouver une description du travail de certaines options exclusivement dans les réponses de votre problème. Et pour trouver les options elles-mêmes, soyez un maître Google de niveau 80. Maintenant, beaucoup de choses sont dans le passé, bien que les auteurs ne prennent toujours pas la peine de marquer dans quelle version d'envoyé telle ou telle option est apparue, ou par des liens vers le problème dans les notes de publication, mais au moins ils ont commencé à mettre en évidence la liste des changements de rupture dans les versions dans une section dédiée, vous pouvez voir, qu'il y a des progrès.
Télémétrie étendue
Ici, tous les espoirs étaient justifiés, maintenant notre tableau de bord grafana par envoyé tue tous les navigateurs qui ne sont pas préparés avec un certain nombre de graphiques. Mais sérieusement, maintenant vous pouvez facilement surveiller ce qui se passe avec le trafic à toutes les étapes de son passage, cela aide particulièrement bien dans les histoires policières passionnantes - les enquêtes après les incidents. Et, bien sûr, la définition des anomalies.
Anomalie: "Bonjour." Un fragment du même tableau de bord envoyé grafana.
Avion de contrôle
Eh bien, et surtout, pour le bien de quoi tout a commencé, nous avons résolu le problème du contrôle automatique des itinéraires. Deux mots sur l'approche, si quelqu'un n'est pas dans le sujet: le plan de contrôle fonctionne comme un contrôleur de données, gère leur stockage et crée une configuration, qui est ensuite envoyée à envoyé (plan de données sans état).
Si vous n'avez qu'un seul kubernetes en tant que backend, vous pouvez prendre un plan de contrôle prêt à l'emploi du type ambassador. Mais nous devions également gérer l'ancienne infrastructure, en plus il y avait plusieurs clusters. J'ai donc dû prendre l'une des implémentations d'API du plan de données proposées par le projet Envoy et bousiller toutes les fonctionnalités dont nous avons besoin, en connectant cette partie de l'infrastructure à l'automatisation dans kubernetes, mais c'est un sujet pour une autre histoire intéressante.
Impressions du processus de passage à l'envoyé - "pour une raison quelconque, il n'y avait pas de problèmes particuliers, très suspects."
En bref, par où commencer et sur quoi être prêt tout de suite. Après avoir médité sur la documentation de l'envoyé et accepté la futilité de l'existence, nous prenons deux hôtes virtuels de l'ancien proxy frontal (le plus simple et le plus typique, et le plus complet), les démarrons en envoy, en triant les options en cours de route.
La principale chose à garder à l'esprit ici est que les approches d'écriture des configurations entre nginx et envoy sont très différentes, c'est-à-dire nous devons être préparés à des virages brusques du formulaire: au lieu de deux entrées simples autoriser / refuser, nous écrivons 26 lignes de l'arbre des règles RBAC. En général, accepter qu'une petite tête qui explose ici est normal, puisque la config d'envoyé est faite avec une priorité sur la commodité de l'automatisation, et non sur la lisibilité humaine.
Vous devrez peut-être créer une feuille de triche pour la cartographie des options et vous assurer qu'elles font réellement ce que vous pensez qu'elles font. Nous sommes donc arrivés une fois à la conclusion que le mécanisme de combinaison de barres obliques dans l'URL (même s'il était déjà ajouté à envoyé) fonctionne différemment: dans nginx cela n'a pas changé: chemin, qui a été envoyé en amont, et dans envoyé, un la réécriture a eu lieu et tout irait bien, mais avec cette réécriture, un bogue est apparu qui a changé: chemin complètement vers le jeu, eh bien, en général, après notre problème, il a également été corrigé, mais soyez prudent.
Au fait, à propos des problèmes - je ne peux m'empêcher de mentionner une autre impression positive.
Communauté sympathique et développeurs
Étant donné que envoyé est open source hébergé par la CNCF, vous pouvez traditionnellement simplement vous rendre sur le GitHub du projet et suggérer votre amélioration ou poser une question. Les problèmes sont un nombre sauvage, les développeurs n'ont clairement pas assez de mains, mais en même temps, la pire chose qui puisse arriver à votre question est qu'elle sera ignorée. Bien que le plus souvent au moins quelque chose, mais ils répondent, même si c'est quelque chose de court dans l'esprit de «désolé, nous n'envisageons pas de faire ça». Aucune toxicité, même si questions des débutants, ambiance très conviviale.
Thèmes atmosphériques, en particulier les corgis. Capture d'écran du dépôt public d'envoyé sur github.com
Eh bien, comme d'habitude, les demandes d'extraction sont les bienvenues. Ils aident même ceux qui ne sont pas particulièrement doués en C ++. Il y a aussi un certain nombre de problèmes marqués avec la balise débutant, au cas où quelqu'un souhaite contribuer et ne sait pas par où commencer.
En plus de GitHub, il y a aussi des newsletters par e-mail et slack, mais ce dernier est le plus souvent un gâchis. :)
Parmi les événements, EnvoyCon est organisé, qui, cependant, est maintenant en ligne, mais je le recommande toujours.
Résultat
En général, vous n'avez pas besoin d'envoyé simplement parce qu'il est à la mode et jeune, "tout le monde y passe" et le fondateur a une coiffure amusante. Restez où vous étiez jusqu'à ce qu'il se serre. Si vous avez une startup ou juste un petit projet, il est certainement préférable de quitter nginx, car il est simple et mignon. L'essentiel est de commencer par là.
S'il existe de nombreux services, de nombreux développeurs, des kubernetes et tous les compromis de l'article ci-dessus ne vous dérangent pas - vous pouvez réfléchir et essayer.
Bonne chance et à peut-être à EnvoyCon!