âGefahr ist mein zweiter Nameâ, sagte Austin Powers, ein Mensch von internationalem RĂ€tselcharakter. Doch was bei Superagenten und Geheimdiensten geschĂ€tzt wird, ist keineswegs geeignet fĂŒr die Computerwelt, wo Langeweile weit besser als Gefahr ist.

Und Istio zusammen mit OpenShift und Kubernetes macht die Bereitstellung von Mikrodiensten zu einer wirklich langweiligen und vorhersehbaren Angelegenheit â und das ist groĂartig. DarĂŒber und ĂŒber vieles mehr werden wir im vierten und letzten Beitrag der Istio-Serie sprechen.
Wenn Langeweile richtig ist
In unserem Fall entsteht Langeweile nur in der letzten Phase, wenn man nur noch dasitzen und den Prozess beobachten kann. Doch dafĂŒr muss alles vorher eingerichtet werden, und hier erwartet euch viel Interessantes.
Beim Bereitstellen einer neuen Version eurer Software sollte man alle Möglichkeiten zur Risikominderung in Betracht ziehen. Die parallele Nutzung ist eine sehr effektive und bewĂ€hrte Testmethode, und Istio erlaubt es, dafĂŒr den âGeheimdienstâ (eine fĂŒr AuĂenstehende unsichtbare Version eures Mikrodienstes) zu nutzen, ohne in das Produktionssystem einzugreifen. DafĂŒr gibt es sogar einen speziellen Begriff â âDark Launchâ, der wiederum durch die Funktion mit dem nicht weniger geheimnisvollen Namen âTraffic-Mirroringâ aktiviert wird.
Beachte, dass im ersten Satz des vorherigen Absatzes der Begriff âBereitstellungâ (deploy) und nicht âVeröffentlichungâ (release) verwendet wird. Ihr solltet tatsĂ€chlich in der Lage sein, euren Mikrodienst so oft zu deployen â und natĂŒrlich auch zu nutzen â wie ihr möchtet. Dieser Dienst sollte in der Lage sein, Traffic zu empfangen und zu verarbeiten, Ergebnisse auszugeben, sowie Protokolle zu schreiben und ĂŒberwacht zu werden. Aber der Dienst selbst muss dafĂŒr nicht in die Produktion gehen. Bereitstellung und Veröffentlichung von Software sind nicht immer dasselbe. Bereitstellungen könnt ihr jederzeit vornehmen, wann immer ihr wollt, wĂ€hrend eine Veröffentlichung erst dann erfolgt, wenn ihr endgĂŒltig bereit seid.
Die Organisation von Langeweile ist interessant
Seht euch die folgende Istio-Routing-Regel an, die alle HTTP-Anfragen an den Mikrodienst recommendation v1 leitet (alle Beispiele stammen von ), wÀhrend sie gleichzeitig auf den Mikrodienst recommendation v2 gespiegelt werden:

Beachtet das Label mirror: unten im Screenshot â genau das legt das Traffic-Mirroring fest. Ja, so einfach ist das!
Das Ergebnis dieser Regel wird sein, dass Ihr Produktionssystem (v1) weiterhin ankommende Anfragen verarbeitet, diese jedoch asynchron auf v2 gespiegelt werden, d. h. es werden vollstĂ€ndige Duplikate an v2 gesendet. So können Sie v2 unter realen Bedingungen â mit echten Daten und Traffic â testen, ohne in den Betrieb des Produktionssystems einzugreifen. Macht dies die Testorganisation zu einer Langeweile? Ja, definitiv. Aber es wird interessant umgesetzt.
Wir fĂŒgen etwas Dramatik hinzu
Bitte beachten Sie, dass im Code von v2 Situationen berĂŒcksichtigt werden mĂŒssen, in denen ankommende Anfragen zu DatenĂ€nderungen fĂŒhren können. Die Anfragen werden leicht und transparent gespiegelt, aber die Wahl der Verarbeitung im Test bleibt Ihnen ĂŒberlassen â und das ist schon etwas aufregend.
Lassen Sie uns einen wichtigen Punkt wiederholen
Ein geheimes Starten mit Verkehrsspiegelung (Dark Launch/Request Mirroring) kann durchgefĂŒhrt werden, ohne den Code zu berĂŒhren.
Nahrung fĂŒr den Gedanken
Was wĂ€re, wenn beim Spiegeln der Anfragen ein Teil davon nicht an v1, sondern an v2 gesendet wird? Zum Beispiel ein Prozent aller Anfragen oder nur Anfragen einer bestimmten Benutzergruppe. Und dann, wĂ€hrend Sie sehen, wie v2 funktioniert, schrittweise alle Anfragen auf die neue Version ĂŒbertragen. Oder umgekehrt alles auf v1 zurĂŒckfĂŒhren, wenn mit v2 etwas schiefgeht. Es scheint, als wĂŒrde dies als Canary Deployment ("canary deployment") bezeichnet. , und hĂ€tte er russischen Ursprung, wĂŒrde er wahrscheinlich auf ) hinweisen, und jetzt werden wir das nĂ€her betrachten.
Canary Deployment in Istio: Vereinfachung des Rollouts
Vorsichtig und schrittweise
Die Grundidee des Canary Deployment-Modells ist Ă€uĂerst einfach: Bei der EinfĂŒhrung einer neuen Version Ihrer Software (in unserem Fall â Mikroservice) gewĂ€hren Sie zunĂ€chst einer kleinen Gruppe von Benutzern Zugriff. Wenn alles gut lĂ€uft, erweitern Sie diese Gruppe langsam, bis die neue Version beginnt Probleme zu verursachen, oder â falls das nicht eintritt â schlieĂlich alle Benutzer auf sie ĂŒbertragen. Durch einen durchdachten und schrittweisen Rollout der neuen Version und die kontrollierte Umstellung der Benutzer können die Risiken verringert und das Feedback maximiert werden.
NatĂŒrlich erleichtert Istio das Canary Deployment, indem es mehrere gute Optionen fĂŒr die intelligente Anfragenrouten anbietet. Und ja, all das kann gemacht werden, ohne Ihren Quellcode zu berĂŒhren.
Browser filtern
Eines der einfachsten Routing-Kriterien ist die Weiterleitung basierend auf dem Browser. Angenommen, Sie möchten, dass nur Anfragen aus Safari auf v2 geleitet werden. So geht es:

Wenden wir diese Routing-Regel an und dann mit dem Befehl curl werden wir in einer Schleife echte Anfragen an den Microservice simulieren. Wie im Screenshot zu sehen ist, gehen alle auf v1:

Und wo bleibt der Verkehr auf v2? Da in unserem Beispiel alle Anfragen nur aus unserer Kommandozeile kamen, gibt es ihn einfach nicht. Aber beachten Sie die unteren Zeilen im Screenshot oben: Das ist die Reaktion darauf, dass wir eine Anfrage aus dem Safari-Browser ausgefĂŒhrt haben, die wiederum folgendes ausgegeben hat:

UneingeschrÀnkte Macht
Wir haben bereits erwĂ€hnt, dass regulĂ€re AusdrĂŒcke sehr mĂ€chtige Möglichkeiten fĂŒr die Anfragenrouten bieten. Schauen Sie sich das folgende Beispiel an (wir denken, Sie werden selbst verstehen, was es tut):

Nun können Sie wahrscheinlich bereits erahnen, wozu regulĂ€re AusdrĂŒcke fĂ€hig sind.
Handeln Sie klug
Intelligentes Routing, insbesondere die Verarbeitung von Paket-Headern mittels regulĂ€rer AusdrĂŒcke, ermöglicht es, den Verkehr nach Ihren WĂŒnschen zu steuern. Und das vereinfacht die Inbetriebnahme neuen Codes erheblich â es ist einfach, erfordert keine Ănderung des Codes selbst, und wenn nötig, kann alles schnell zurĂŒckgerollt werden.
Interessiert?
Haben Sie Lust, mit Istio, Kubernetes und OpenShift auf Ihrem Computer zu experimentieren? Das Team hat groĂartige Ressourcen zu diesem Thema zusammengestellt und alle zugehörigen Dateien öffentlich zugĂ€nglich gemacht. Also nur zu und gönnen Sie sich nichts weniger.
â
Istio Egress: Der Ausgang ĂŒber den Souvenirladen
Durch den Einsatz von Istio in Kombination mit Red Hat OpenShift und Kubernetes können Sie sich das Leben mit Microservices erheblich erleichtern. Das Service Mesh von Istio ist in die Pods von Kubernetes eingebettet, und Ihr Code wird (hauptsĂ€chlich) isoliert ausgefĂŒhrt. Leistung, Ănderungsfreundlichkeit, Nachverfolgbarkeit und mehr â all das lĂ€sst sich leicht durch die Verwendung von Sidecar-Containern erreichen. Aber was tun, wenn Ihr Microservice mit anderen Diensten kommunizieren muss, die auĂerhalb Ihres OpenShift-Kubernetes-Systems liegen?
Hier kommt Istio Egress ins Spiel. Kurz gesagt, es ermöglicht den Zugriff auf Ressourcen (sprich: âDiensteâ), die nicht zu Ihren Kubernetes-Pods gehören. Ohne zusĂ€tzliche Konfiguration wird im Istio Egress-Umfeld der Datenverkehr nur innerhalb des Pod-Clusters und zwischen solchen Clustern basierend auf internen IP-Tabellen weitergeleitet. Diese Abschottung funktioniert hervorragend, bis Sie Zugang zu Diensten auĂerhalb benötigen.
Egress ermöglicht es, die oben genannten IP-Tabellen entweder auf Basis von Egress-Regeln oder fĂŒr einen IP-Adressenbereich zu umgehen.
Angenommen, wir haben ein Java-Programm, das eine GET-Anfrage an httpbin.org/headers ausfĂŒhrt.
(httpbin.org ist einfach eine nĂŒtzliche Ressource zum Testen von ausgehenden Dienstanfragen.)
Wenn Sie in die Befehlszeile eingeben curl http://httpbin.org/headers, sehen wir Folgendes:

Oder Sie können dieselbe Adresse im Browser öffnen:

Wie wir sehen, gibt der dort befindliche Dienst einfach die ĂŒbergebenen Header zurĂŒck.
Wir ersetzen sozusagen direkt
Jetzt nehmen wir den Java-Code dieses externen Dienstes in Bezug auf unser System und fĂŒhren ihn bei uns aus, wo, wie erwĂ€hnt, Istio lĂ€uft. (Sie können dies selbst tun, indem Sie sich an wenden.) Nachdem wir das entsprechende Container-Image erstellt und auf der OpenShift-Plattform ausgefĂŒhrt haben, rufen wir diesen Dienst mit dem Befehl auf curl egresshttpbin-istioegress.$(minishift ip).nip.io, woraufhin wir Folgendes auf dem Bildschirm sehen:

Hmm, was ist passiert? Es hat ja gerade noch funktioniert. Was bedeutet Not Found? Wir haben gerade doch eingerichtet. curl.
Wir erweitern die IP-Tabellen fĂŒr das gesamte Internet.
DafĂŒr mĂŒssen wir Istio verantwortlich machen (oder danken). Denn Istio besteht einfach aus Sidecar-Containern, die fĂŒr die Entdeckung und Weiterleitung zustĂ€ndig sind (und fĂŒr viele andere Dinge, ĂŒber die wir zuvor gesprochen haben). Aus diesem Grund wissen die IP-Tabellen nur, was sich innerhalb Ihres Cluster-Systems befindet. Httpbin.org befindet sich jedoch auĂerhalb und ist daher nicht erreichbar. An dieser Stelle hilft uns Istio Egress â ganz ohne Ănderungen an Ihrem Quellcode.
Die folgende Egress-Regel zwingt Istio, den benötigten Dienst zu suchen (wenn nötig, auch im gesamten weltweiten Internet), in diesem Fall httpbin.org. Wie aus dieser Datei (egress_httpbin.yml) hervorgeht, ist die FunktionalitÀt hier recht einfach:

Jetzt mĂŒssen wir nur noch diese Regel anwenden:
istioctl create -f egress_httpbin.yml -n istioegress
Die Egress-Regeln können Sie mit dem Befehl anzeigen istioctl get egressrules:

Und schlieĂlich starten wir das Team erneut curl â und sehen, dass alles funktioniert:

Wir denken offen
Wie Sie sehen, ermöglicht Istio die Interaktion mit der AuĂenwelt. Mit anderen Worten, Sie können weiterhin OpenShift-Dienste erstellen und diese ĂŒber Kubernetes verwalten, wĂ€hrend alles in Pods lĂ€uft, die nach Bedarf hoch- oder herunterskalierbar sind. Gleichzeitig können Sie problemlos auf externe Dienste zugreifen, die Ihre Umgebung betreffen. Und ja, um es noch einmal zu betonen, all dies kann erfolgen, ohne Ihren Code zu berĂŒhren.
Das war der letzte Beitrag in der Serie ĂŒber Istio. Bleiben Sie dran â es gibt noch viel Interessantes!
Quelle: habr.com
