Was Sie wissen müssen, wenn Sie Nginx in Gesandten ändern: Eindrücke nach zwei Jahren





Wir verwenden envoy als Front-Edge-Proxy, der eingehenden Datenverkehr zu mehreren Kubernetes-Clustern (für neue Dienste) und zu den Backends der Legacy-Architektur des historischen Erbes umleitet. Jene. Es kombiniert die Funktionen eines normalen Balancers, eines SSL-Endpunkts und eines API-Gateways.



Vor dem Gesandten hatten wir dort Nginx, wie viele andere auch. Coole Software, ich mag es. Die ganze Geschichte mit Envoy begann in dem Moment, als Microservices in großer Zahl begannen und selbst ansible Vorlagen Sie nicht vor dem zunehmenden Zeitaufwand für die Verwaltung der Nginx-Konfiguration bewahrten. Die Einführung dauerte lange, und die Administratoren wurden von monotonen Anfragen wie "Besorgen Sie mir eine Domain für einen neuen Service" entmutigt. Eine bessere ™ Automatisierung war eindeutig erforderlich. Idealerweise, damit derjenige, der etwas starten muss, es selbst und vorzugsweise an derselben Stelle tun kann, an der er andere Parameter seines Dienstes konfiguriert hat. Darüber hinaus wollte ich mehr Transparenz darüber, was im Front-Proxy und im Segment zwischen ihm und den Upstreams geschieht, und mehr native Ausgleichsfunktionen (wiederholte Anforderungen verschiedener Typen, Ausschluss ungesunder Hosts unter bestimmten Bedingungen, Hilfeprüfungen). Und angezogen Spitzentechnologie,Natürlich.



Kurz gesagt, hier ist eine Übersetzung des Artikels über den Übergang von Dropbox zum Gesandten. Es gibt viele Details über den Vergleich mit Nginx. Ich erzähle Ihnen mehr über persönliche Eindrücke der Übergangsergebnisse.



Die wichtigste und offensichtlichste Tatsache für alle, die auf die Verwendung skalierbarer Software gestoßen sind: Seien Sie bereit, dafür zu bezahlen. Die erhöhte Komplexität des Setups (Datenebene + Steuerebene) und wenn es Upstreams nicht nur in Kubernetes gibt, dann schreiben Sie vielleicht sogar Ihre eigene Steuerebene. Auch im Fall von Gesandten speziell für die relative Jugend der Software und damit für das Fehlen einiger allgemeiner Nginx-Funktionen + eine erhöhte Häufigkeit von Aktualisierungen, wenn diese Funktionen hinzugefügt werden. Beispielsweise kann sich herausstellen, dass es in den Standardoptionen keine Standardeinstellung für Nginx gibt, die Schrägstriche in: path kombiniert, den Port aus dem Host-Header entfernt oder, Gott sei Dank, durch reguläre Ausdrücke neu schreibt. Für heute wurde bereits alles aus dieser Liste hinzugefügt, aber Sie werden sicherlich etwas anderes finden.



Positive Dinge



Schreckliche Dokumentation! Positiv zu vermerken ist, dass das Gesandten-Team Ende letzten Jahres endlich einen technischen Redakteur eingestellt hat und die Dinge viel freundlicher geworden sind. Zumindest müssen Sie die Art und Weise der Verarbeitung einer Anfrage über den Quellcode nicht mehr untersuchen und eine Beschreibung der Arbeit einiger Optionen ausschließlich in den Antworten in Ihrer Ausgabe finden. Und um die Optionen selbst zu finden, müssen Sie ein Google Master der Stufe 80 sein. Nun ist vieles davon in der Vergangenheit, obwohl sich die Autoren immer noch nicht die Mühe machen, zu markieren, in welcher Version des Gesandten diese oder jene Option erschien, oder durch Links zu dem Problem in den Versionshinweisen, aber zumindest begannen sie, die Liste hervorzuheben Wenn Sie Änderungen in Releases in einem speziellen Abschnitt brechen, können Sie sehen, dass Fortschritte erzielt wurden.



Erweiterte Telemetrie



Hier waren alle Hoffnungen berechtigt, jetzt tötet unser Grafana-Dashboard des Gesandten alle Browser, die nicht mit einer Reihe von Grafiken vorbereitet sind. Aber im Ernst, jetzt können Sie bequem überwachen, was mit dem Verkehr in allen Phasen seines Durchgangs passiert. Es hilft besonders gut bei spannenden Detektivgeschichten - Ermittlungen nach Vorfällen. Und natürlich die Definition von Anomalien.





Anomalie: "Hallo." Ein Fragment aus dem gleichen Gesandten-Grafana-Dashboard.



Steuerebene



Nun, und vor allem, um alles zu starten, haben wir das Problem der automatischen Routensteuerung gelöst. Zwei Worte zum Ansatz, wenn sich jemand nicht mit dem Thema befasst: Die Steuerebene arbeitet als Datencontroller, verwaltet ihren Speicher und erstellt eine Konfiguration, die dann an den Gesandten (zustandslose Datenebene) gesendet wird.



Wenn Sie nur ein Kubernet als Backend haben, können Sie eine vorgefertigte Steuerebene vom Typ Botschafter nehmen. Aber wir mussten auch die alte Infrastruktur verwalten und es gab mehrere Cluster. Also musste ich eine der vom Envoy-Projekt vorgeschlagenen API-Implementierungen auf Datenebene nehmen und alle Funktionen vermasseln, die wir benötigen, um diesen Teil der Infrastruktur mit der Automatisierung in Kubernetes zu verbinden, aber dies ist ein Thema für eine andere interessante Geschichte.



Eindrücke vom Wechsel zum Gesandten - "Aus irgendeinem Grund gab es keine besonderen Probleme, sehr verdächtig."



Kurz gesagt, wo Sie anfangen sollen und worauf Sie sofort vorbereitet sein müssen. Nachdem wir über die Dokumentation des Gesandten meditiert und die Sinnlosigkeit der Existenz akzeptiert haben, nehmen wir zwei virtuelle Hosts vom alten Front-Proxy (den einfachsten und typischsten und den umfangreichsten), starten sie im Gesandten und sortieren die Optionen auf dem Weg.



Die Hauptsache, die hier zu beachten ist, ist, dass die Ansätze zum Schreiben von Konfigurationen zwischen Nginx und Gesandter sehr unterschiedlich sind, d. H. Wir müssen auf scharfe Wendungen des Formulars vorbereitet sein: Anstelle von zwei einfachen Zulassungs- / Verweigerungseinträgen schreiben wir 26 Zeilen des RBAC-Regelbaums. Im Allgemeinen ist es normal zu akzeptieren, dass ein kleiner explodierender Kopf hier normal ist, da die Konfiguration des Gesandten vorrangig auf die Bequemlichkeit der Automatisierung und nicht auf die Lesbarkeit durch den Menschen ausgerichtet ist.



Möglicherweise müssen Sie einen Spickzettel für die Optionszuordnung zusammenstellen und sicherstellen, dass sie tatsächlich das tun, was Sie denken, dass sie tun. Wir sind also einmal zu dem Schluss gekommen, dass der Mechanismus zum Kombinieren von Schrägstrichen in der URL (auch wenn er bereits dem Gesandten hinzugefügt wurde) anders funktioniert: In Nginx hat sich nichts geändert: Pfad, der an Upstream gesendet wurde, und in Gesandter ein vollständiger Pfad Das Umschreiben fand statt und alles würde in Ordnung sein, aber mit diesem Umschreiben kam ein Fehler heraus, der sich änderte: Der Weg zum Spiel war vollständig, im Allgemeinen wurde es nach unserem Problem ebenfalls behoben, aber seien Sie vorsichtig.



Übrigens zu den Themen - ich kann nicht anders, als einen weiteren positiven Eindruck zu erwähnen.



Freundliche Community und Entwickler



Da es sich bei Envoy um von CNCF gehostetes Open Source handelt, können Sie traditionell einfach zum GitHub des Projekts kommen und Ihre Verbesserung vorschlagen oder eine Frage stellen. Probleme sind eine wilde Zahl, Entwickler haben eindeutig nicht genug Hände, aber gleichzeitig ist das Schlimmste, was Ihrer Frage passieren kann, dass sie ignoriert wird. Obwohl meistens zumindest etwas, aber sie antworten, auch wenn es etwas Kurzes im Sinne von "Entschuldigung, wir haben nicht vor, dies zu tun." Keine Toxizität, auch bei Fragen von Neulingen, sehr freundliche Atmosphäre.





Atmosphärische Themen, insbesondere Corgis. Screenshot des öffentlichen Repository des Gesandten auf github.com



Wie immer sind Pull-Anfragen willkommen. Sie helfen auch denen, die nicht besonders gut in C ++ sind. Es gibt auch eine Reihe von Problemen, die mit dem Anfänger- Tag gekennzeichnet sind , falls jemand etwas beitragen möchte und nicht weiß, wo er anfangen soll.



Neben GitHub gibt es auch E-Mail-Newsletter und Slack, letzteres ist jedoch häufiger ein Chaos. :)



Von den Veranstaltungen findet die EnvoyCon statt, die jedoch jetzt online ist, aber ich empfehle sie trotzdem.



Ergebnis



Im Allgemeinen brauchen Sie keinen Gesandten, nur weil es trendy und jugendlich ist, "jeder geht rüber" und der Gründer eine lustige Frisur hat. Bleib wo du warst bis es drückt. Wenn Sie ein Startup oder nur ein kleines Projekt haben, ist es definitiv besser, nginx zu verlassen, weil es einfach und niedlich ist. Die Hauptsache ist, dort anzufangen.



Wenn es viele Dienste, viele Entwickler, Kubernetes gibt und alle Kompromisse im obigen Artikel Sie nicht stören - Sie können nachdenken und versuchen.



Viel Glück und vielleicht bis zur EnvoyCon!



All Articles