O serie de postări pe Istio Service Mesh

Începem o serie de postări care prezintă unele dintre numeroasele capabilități ale Istio Service Mesh atunci când este combinată cu Red Hat OpenShift și Kubernetes.

O serie de postări pe Istio Service Mesh

Prima parte, astăzi:

  • Să explicăm conceptul de containere sidecar Kubernetes și să formulăm laitmotivul acestei serii de postări: „nu trebuie să modificați nimic din codul dvs.”.
  • Să introducem lucrul fundamental al Istio - regulile de rutare. Toate celelalte funcții Istio sunt construite pe ele, deoarece regulile vă permit să direcționați traficul către microservicii, folosind fișiere YAML externe codului serviciului. Luăm în considerare, de asemenea, schema de implementare a Canary Deployment. Bonus de Anul Nou – 10 lecții interactive pe Istio


Partea a doua, care urmează în curând, vă va spune:

  • Cum implementează Istio Pool Ejection în combinație cu Circuit Breaker și va demonstra cum Istio vă permite să eliminați un pod mort sau cu performanțe slabe din circuitul de echilibrare.
  • Ne vom uita, de asemenea, la subiectul Circuit Breaker din prima postare pentru a vedea cum poate fi folosit Istio aici. Vă vom arăta cum să direcționați traficul și să gestionați erorile de rețea folosind fișierele de configurare YAML și comenzile terminalului fără cele mai mici modificări ale codului de serviciu.

Partea a treia:

  • O poveste despre urmărire și monitorizare, care sunt deja încorporate sau ușor adăugate la Istio. Vă vom arăta cum să utilizați instrumente precum Prometheus, Jaeger și Grafana în combinație cu scalarea OpenShift pentru a gestiona fără efort arhitecturile de microservicii.
  • Trecem de la monitorizarea și gestionarea erorilor la introducerea lor în sistem în mod intenționat. Cu alte cuvinte, învățăm cum să facem injectarea de erori fără a schimba codul sursă, ceea ce este foarte important din punct de vedere al testării - deoarece dacă schimbați codul în sine pentru aceasta, există riscul de a introduce erori suplimentare.

În cele din urmă, în postarea finală pe Istio Service Mesh:

  • Să mergem la Partea Întunecată. Mai exact, vom învăța să folosim schema Dark Launch, atunci când codul este implementat și testat direct pe datele de producție, dar nu afectează în niciun fel funcționarea sistemului. Aici este utilă capacitatea Istio de a împărți traficul. Iar capacitatea de a testa datele de producție în direct fără a afecta în niciun fel funcționarea sistemului de luptă este cea mai convingătoare metodă de verificare.
  • Pornind de la Dark Launch, vă vom arăta cum să utilizați modelul Canary Deployment pentru a reduce riscul și a facilita introducerea codului nou în producție. Canary Deployment în sine este departe de a fi nou, dar Istio vă permite să implementați această schemă doar cu simple fișiere YAML.
  • În cele din urmă, vă vom arăta cum să utilizați Istio Egress pentru a oferi acces la servicii celor care se află în afara clusterelor dvs. pentru a utiliza capacitățile Istio atunci când lucrați cu Internetul.

Deci, iată-ne...

Instrumente de monitorizare și management Istio - tot ce aveți nevoie pentru a orchestra microservicii într-o rețea de servicii plasă de serviciu.

Ce este Istio Service Mesh

O plasă de servicii implementează funcții precum monitorizarea traficului, controlul accesului, descoperirea, securitatea, toleranța la erori și alte lucruri utile pentru un grup de servicii. Istio vă permite să faceți toate acestea fără cele mai mici modificări ale codului serviciilor în sine. Care este secretul magiei? Istio își atașează propriul proxy fiecărui serviciu sub forma unui container sidecar (sidecar este un sidecar pentru motociclete), după care tot traficul către acest serviciu trece prin proxy, care, ghidat de politicile specificate, decide cum, când și dacă acest trafic. ar trebui să ajungă la serviciu. Istio face posibilă, de asemenea, implementarea tehnicilor DevOps avansate, cum ar fi implementări Canary, întrerupătoare, injecție de defecțiuni și multe altele.

Cum funcționează Istio cu containere și Kubernetes

Mesh-ul de servicii Istio este o implementare sidecar a tot ceea ce este necesar pentru a crea și gestiona microservicii: monitorizare, urmărire, întrerupătoare de circuit, rutare, echilibrare a sarcinii, injectare a erorilor, reîncercări, timeout-uri, oglindire, control acces, limitare a ratei și multe altele. Și deși astăzi există o mulțime de biblioteci pentru a implementa aceste funcții direct în cod, cu Istio puteți obține toate aceleași lucruri fără a modifica nimic din codul dvs.

Conform modelului sidecar, Istio rulează într-un container Linux, care se află într-unul Kubernetes-pod cu un serviciu controlat și injectează și extrage funcționalități și informații conform unei configurații date. Subliniem că aceasta este propria ta configurație și se află în afara codului tău. Prin urmare, codul devine mult mai simplu și mai scurt.

Ceea ce este, de asemenea, important este că componenta operațională a microserviciilor se dovedește a nu avea nicio legătură cu codul în sine, ceea ce înseamnă că funcționarea lor poate fi transferată în siguranță specialiștilor IT. Într-adevăr, de ce ar trebui dezvoltatorul să fie responsabil pentru întrerupătoarele și injecția de defecțiuni? Reacționează, da, dar procesează-le și creează-le? Dacă eliminați toate acestea din cod, programatorii se vor putea concentra pe deplin pe funcționalitatea aplicației. Și codul în sine va deveni mai scurt și mai simplu.

Plasă de serviciu

Istio, care implementează funcții pentru gestionarea microserviciilor în afara codului lor, este conceptul de Service Mesh. Cu alte cuvinte, este un grup coordonat de unul sau mai multe binare care formează o plasă de funcții de rețea.

Cum funcționează Istio cu microservicii

Acesta este modul în care arată funcționarea containerelor sidecar împreună Kubernetes и Minitur vedere panoramică: lansați o instanță de Minishift, creați un proiect pentru Istio (să-i spunem „sistem-istio”), instalați și rulați toate componentele legate de Istio. Apoi, pe măsură ce creați proiecte și poduri, adăugați informații de configurare la implementările dvs. și podurile dvs. încep să folosească Istio. O diagramă simplificată arată astfel:

O serie de postări pe Istio Service Mesh

Acum puteți modifica setările Istio pentru, de exemplu, pentru a organiza injectarea erorilor, asistența Desfăşurare Canary sau alte caracteristici Istio - și toate acestea fără a atinge codul aplicațiilor în sine. Să presupunem că doriți să redirecționați tot traficul web de la utilizatorii celui mai mare client (Foo Corporation) către o nouă versiune a site-ului. Pentru a face acest lucru, pur și simplu creați o regulă de rutare Istio care va căuta @foocorporation.com în ID-ul utilizatorului și va redirecționa în consecință. Pentru toți ceilalți utilizatori, nimic nu se va schimba. Între timp, veți testa cu calm noua versiune a site-ului. Și rețineți că nu trebuie să implicați deloc dezvoltatorii pentru aceasta.

Și va trebui să plătești scump pentru asta?

Deloc. Istio este destul de rapid și este scris în Go și creează foarte puține cheltuieli generale. În plus, posibila pierdere a productivității online este compensată de o creștere a productivității dezvoltatorilor. Cel puțin în teorie: nu uitați că timpul dezvoltatorilor este valoros. În ceea ce privește costurile software-ului, Istio este un software open source, așa că îl puteți obține și utiliza gratuit.

Stăpânește-l singur

Echipa Red Hat Developer Experience a dezvoltat o practică aprofundată conducere de Istio (în engleză). Rulează pe Linux, MacOS și Windows, iar codul este disponibil în Java și Node.js.

10 lecții interactive despre Istio

Bloc 1 - Pentru începători

Introducere în Istio
30 minute
Să ne familiarizăm cu Service Mesh, să aflăm cum să instalăm Istio într-un cluster OpenShift Kubernetes.
Începeți

Implementarea microserviciilor în Istio
30 minute
Folosim Istio pentru a implementa trei microservicii cu Spring Boot și Vert.x.
Începeți

Blocul 2 – nivel intermediar

Monitorizare și urmărire în Istio
60 minute
Vom explora instrumentele de monitorizare încorporate ale Istio, valorile personalizate și OpenTracing prin Prometheus și Grafana.
Începeți

Rutare simplă în Istio
60 minute
Aflați cum să gestionați rutarea în Istio folosind reguli simple.
Începeți

Reguli avansate de rutare
60 minute
Să aruncăm o privire la rutarea inteligentă, controlul accesului, echilibrarea sarcinii și limitarea ratei Istio.
Începeți

Blocul 3 – utilizator avansat

Defecțiune injecție în Istio
60 minute
Studiem scenarii de gestionare a eșecurilor în aplicațiile distribuite, creând erori HTTP și întârzieri de rețea și învățăm să folosim ingineria haosului pentru a restabili mediul.
Începeți

Întrerupător în Istio
30 minute
Instalăm Siege pentru site-urile de testare a stresului și învățăm cum să asigurăm toleranța la erori de backend folosind reluări, întrerupător și ejectare a piscinei.
Începeți

Ieșire și Istio
10 minute
Folosim rutele de ieșire pentru a crea reguli pentru interacțiunea serviciilor interne cu API-urile și serviciile externe.
Începeți

Istio și Kiali
15 minute
Învață să folosești Kiali pentru a obține o imagine de ansamblu asupra rețelei de servicii și pentru a explora cererile și fluxurile de date.
Începeți

TLS mutual în Istio
15 minute
Creăm Istio Gateway și VirtualService, apoi studiem TLS reciproc (mTLS) și setările acestuia în detaliu.
Începeți

Bloc 3.1 - Deep Dive: Istio Service Mesh pentru microservicii

O serie de postări pe Istio Service Mesh
Despre ce este cartea:

  • Ce este o plasă de serviciu?
  • Sistemul Istio și rolul său în arhitectura de microservicii.
  • Folosind Istio pentru a rezolva următoarele probleme:
    • Toleranta la erori;
    • rutare;
    • Testarea haosului;
    • de securitate;
    • Colectare de telemetrie folosind urme, metrici și Grafana.

Pentru a descărca o carte

Seria de articole despre rețele de serviciu și Istio

Incearca-l tu insuti

Această serie de postări nu are scopul de a oferi o scufundare profundă în lumea Istio. Vrem doar să vă prezentăm conceptul și poate să vă inspirăm să încercați singur Istio. Este complet gratuit, iar Red Hat oferă toate instrumentele de care aveți nevoie pentru a începe cu OpenShift, Kubernetes, containerele Linux și Istio, inclusiv: Red Hat Developer OpenShift Container Platform, ghidul nostru pentru Istio și alte resurse pe noastre microsite pe Service Mesh. Nu întârzia, începe azi!

Reguli de rutare Istio: direcționarea cererilor de servicii unde trebuie să meargă

tura deschisă и Kubernetes faceți o treabă excelentă de adresare microservicii direcționate către podurile necesare. Acesta este unul dintre motivele existenței Kubernetes - rutarea și echilibrarea încărcării. Dar ce se întâmplă dacă aveți nevoie de o rutare mai subtilă și sofisticată? De exemplu, pentru a utiliza simultan două versiuni ale unui microserviciu. Cum poate ajuta Istio Route Rules aici?

Regulile de rutare sunt regulile care determină de fapt alegerea rutei. Indiferent de nivelul de complexitate a sistemului, principiul general de funcționare al acestor reguli rămâne simplu: cererile sunt direcționate pe baza anumitor parametri și a valorilor antetului HTTP.
Să ne uităm la exemple:

Kubernetes prestabilit: trivial „50/50”

În exemplul nostru, vom arăta cum să folosiți simultan două versiuni ale unui microserviciu în OpenShift, să le numim v1 și v2. Fiecare versiune rulează în propriul său pod Kubernetes și, implicit, rulează o rutare round robin uniform echilibrată. Fiecare pod primește cota sa de solicitări în funcție de numărul de instanțe de microserviciu, cu alte cuvinte, replici. Istio vă permite să schimbați acest echilibru manual.

Să presupunem că am implementat două versiuni ale serviciului nostru de recomandare pe OpenShift, recomandare-v1 și recomandare-v2.
În fig. Figura 1 arată că, atunci când fiecare serviciu este reprezentat într-o singură instanță, solicitările alternează uniform între ele: 1-2-1-2-... Iată cum funcționează implicit rutarea Kubernetes:

O serie de postări pe Istio Service Mesh

Distribuție ponderată între versiuni

În fig. Figura 2 arată ce se întâmplă dacă creșteți numărul de replici ale serviciului v2 de la una la două (acest lucru se face cu comanda oc scale —replicas=2 deployment/recommendation-v2). După cum puteți vedea, cererile între v1 și v2 sunt acum împărțite într-un raport de unu la trei: 1-2-2-1-2-2-...:

O serie de postări pe Istio Service Mesh

Ignorați versiunea folosind Istio

Istio facilitează modificarea distribuției cererilor în modul în care avem nevoie. De exemplu, trimiteți tot traficul numai la recomandarea-v1 folosind următorul fișier Istio yaml:

O serie de postări pe Istio Service Mesh

Aici trebuie să acordați atenție acestui lucru: păstăile sunt selectate în funcție de etichete. Exemplul nostru folosește eticheta v1. Parametrul „greutate: 100” înseamnă că 100% din trafic va fi direcționat către toate podurile de servicii care au eticheta v1.

Distribuția directivei între versiuni (Canary Deployment)

Apoi, folosind parametrul de greutate, puteți direcționa traficul către ambele poduri, ignorând numărul de instanțe de microservicii care rulează în fiecare dintre ele. De exemplu, aici direcționăm 90% din trafic către v1 și 10% către v2:

O serie de postări pe Istio Service Mesh

Rutare separată pentru utilizatorii de telefonie mobilă

În concluzie, vom arăta cum să forțați traficul utilizatorilor de telefonie mobilă să fie direcționat către serviciul v2 și pe toți ceilalți către v1. Pentru a face acest lucru, folosim expresii regulate pentru a analiza valoarea user-agent din antetul cererii:

O serie de postări pe Istio Service Mesh

Acum e rândul tău

Exemplul cu expresii regulate pentru analiza antetelor ar trebui să vă motiveze să găsiți propriile utilizări ale regulilor de rutare Istio. În plus, posibilitățile de aici sunt destul de extinse, deoarece valorile antetului pot fi formate în codul sursă al aplicației.

Și amintiți-vă că Ops, nu Dev

Tot ceea ce am arătat în exemplele de mai sus se face fără cele mai mici modificări ale codului sursă, ei bine, cu excepția acelor cazuri în care este necesar să se genereze anteturi speciale de solicitare. Istio va fi util atât dezvoltatorilor, care, de exemplu, îl vor putea folosi în faza de testare, cât și specialiștilor în operarea sistemelor IT, pentru care va ajuta foarte mult în producție.

Deci, să repetăm ​​laitmotivul acestei serii de postări: nu trebuie să modificați nimic din codul dvs. Nu este nevoie să construiți noi imagini sau să lansați noi containere. Toate acestea sunt implementate în afara codului.

Foloseste-ti imaginatia

Imaginează-ți posibilitățile de analiză a antetului folosind expresii regulate. Doriți să vă redirecționați cel mai mare client către o versiune specială a dvs microservicii? Uşor! Aveți nevoie de o versiune separată pentru browserul Chrome? Nici o problemă! Puteți direcționa traficul în funcție de aproape orice caracteristică.

Incearca-l tu insuti

A citi despre Istio, Kubernetes și OpenShift este un lucru, dar de ce să nu atingi totul singur? Echipă Programul pentru dezvoltatori Red Hat a pregătit un ghid detaliat (în engleză) care te va ajuta să stăpânești aceste tehnologii cât mai repede posibil. Manualul este, de asemenea, 100% open source, deci este postat în domeniul public. Fișierul funcționează pe macOS, Linux și Windows, iar codul sursă este disponibil în versiunile Java și node.js (versiuni în alte limbi în curând). Doar deschideți depozitul git corespunzător în browser Red Hat Developer Demo.

În următoarea postare: rezolvăm frumos problemele

Astăzi ați văzut ce pot face regulile de rutare Istio. Acum imaginați-vă același lucru, dar numai în legătură cu gestionarea erorilor. Exact despre asta vom vorbi în postarea următoare.

Sursa: www.habr.com

Adauga un comentariu