Seria de postări despre Istio Service Mesh

Începem o serie de postări în care vom demonstra unele dintre numeroasele capabilități ale rețelei de servicii Istio Service Mesh în combinație cu Red Hat OpenShift și Kubernetes.

Seria de postări despre Istio Service Mesh

Partea întâi, de astăzi:

  • Vom explica conceptul de containere sidecar în Kubernetes și vom formula leitmotivul acestei serii de postări: „nu trebuie să schimbați nimic în codul dvs.”.
  • Să prezentăm fundația Istio – regulile de rutare. Pe acestea se bazează toate celelalte capabilități ale Istio, deoarece regulile permit direcționarea traficului către microservicii, folosind fișiere YAML externe codului serviciilor. De asemenea, vom discuta despre schema de desfășurare Canary Deployment. Bonus de Anul Nou – 10 cursuri interactive despre Istio.


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

  • Cum Istio implementează Pool Ejection împreună cu Circuit Breaker și va demonstra cum Istio permite eliminarea pod-ului nefuncțional sau cu performanțe slabe din schema de balansare.
  • De asemenea, vom analiza tema Circuit Breaker din prima postare, în ceea ce privește cum poate fi utilizat Istio. Vom arăta cum, fără nicio modificare a codului serviciilor, să rutăm traficul și să gestionăm erorile de rețea folosind fișiere de configurare YAML și comenzi din terminal.

Partea a treia:

  • O poveste despre trasabilitate și monitorizare, care sunt deja încorporate sau ușor de adăugat în Istio. Vom arăta cum să utilizăm instrumente precum Prometheus, Jaeger și Grafana în combinație cu scalarea OpenShift, pentru a gestiona fără efort arhitectura microservicilor.
  • Trecem de la monitorizarea și gestionarea erorilor la a le introduce în sistem în mod intenționat. Cu alte cuvinte, învățăm să facem fault injection fără a modifica codul sursă, ceea ce este foarte important din perspectiva testării – deoarece dacă modificăm codul pentru aceasta, există riscul de a introduce erori suplimentare.

În cele din urmă, în ultima postare despre Istio Service Mesh:

  • Vom trece pe Latura Întunecată. Mai precis, vom învăța să folosim schema Dark Launch, când codul este desfășurat și testat direct pe datele din producție, fără a afecta funcționarea sistemului. Aici, capacitatea Istio de a separa traficul devine foarte utilă. Iar posibilitatea de a efectua teste pe date reale din producție, fără a afecta sistemul de producție, este cea mai convingătoare modalitate de verificare.
  • Bazându-ne pe Dark Launch, vom arăta cum să utilizăm modelul Canary Deployment pentru a reduce riscurile și a simplifica implementarea noilor coduri. Canary Deployment în sine nu este o noutate, dar Istio permite implementarea acestui model doar cu ajutorul unor fișiere YAML simple.
  • În concluzie, vom demonstra cum să folosim Istio Egress pentru a oferi acces la servicii celor care se află în afara clusterelor dvs., maximizând beneficiile Istio în interacțiunea cu internetul.

Așadar, să începem...

Instrumentele de monitorizare și gestionare Istio - tot ce este necesar pentru coordonarea microserviciilor într-o rețea de servicii. service mesh.

Ce este o rețea de servicii Istio?

Rețeaua de servicii implementează pentru un grup de servicii funcții precum monitorizarea traficului, controlul accesului, descoperirea, securitatea, toleranța la defecțiuni și multe altele. Istio permite realizarea tuturor acestea fără a necesita modificări în codul serviciilor. Care este secretul acestei magii? Istio atașează un proxy fiecărui serviciu sub forma unui container sidecar, după care tot traficul către acest serviciu trece prin proxy, care, conform politicilor stabilite, decide cum, când și dacă acest trafic trebuie să ajungă la serviciu. Istio permite, de asemenea, implementarea tehnicilor avansate de DevOps, cum ar fi canary deployments, circuit breakers, fault injection și multe altele.

Cum funcționează Istio cu containere și Kubernetes?

Rețeaua de servicii Istio este o implementare sidecar a tot ceea ce este necesar pentru crearea și gestionarea microserviciilor: monitorizare, trasare, circuit breakers, rutare, balancează de încărcare, fault injection, retry-uri, timeout-uri, mirroring, controlul accesului, limitarea ratei și multe altele. Și, deși astăzi există numeroase biblioteci pentru implementarea acestor funcții direct în cod, cu Istio puteți obține aceleași rezultate fără a modifica codul vostru.

Conform modelului sidecar, Istio rulează într-un container Linux, care se află în aceeași Kubernetes-pod cu serviciul controlat și introduce (inject) și extrage (extract) funcționalitate și informații conform configurației specificate. Subliniez, aceasta este configurația voastră și ea trăiește în afara codului vostru. Prin urmare, codul devine mult mai simplu și mai scurt.

Ce este important, componenta operațională a microserviciilor nu este legată de codul în sine, ceea ce înseamnă că exploatarea acestora poate fi transferată fără grijă specialiștilor IT. De fapt, de ce ar trebui ca dezvoltatorul să fie responsabil pentru circuit breaker și fault injection? Să reacționeze – da, dar să le gestioneze și să le creeze? Dacă eliminăm toate acestea din cod, programatorii se pot concentra complet pe funcționalitățile aplicației. De asemenea, codul va deveni mai scurt și mai simplu.

Rețeaua de servicii

Istio, care implementează funcțiile de gestionare a microserviciilor în afara codului lor – este conceptul rețelei de servicii Service Mesh. Cu alte cuvinte, aceasta este un grup coordonat de unul sau mai multe binare care formează o rețea de funcții de rețea.

Cum funcționează Istio cu microservicii

Iată cum arată funcționarea containerelor sidecar în legătură cu Kubernetes și Minishift dintr-o perspectivă de ansamblu: lansați o instanță Minishift, creați un proiect pentru Istio (să-l numim «istio-system»), instalați și lansați toate componentele legate de Istio. Apoi, pe măsură ce creați proiecte și pod-uri, adăugați informații de configurare în deployment-urile dumneavoastră, iar pod-urile încep să utilizeze Istio. Diagramă simplificată arată astfel:

Seria de postări despre Istio Service Mesh

Acum puteți modifica setările Istio, pentru a organiza, de exemplu, fault injection, suport pentru Canary Deployment sau alte funcționalități 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 al dumneavoastră (Foo Corporation) către noua versiune a site-ului. Pentru aceasta, este suficient să creați o regulă de rutare Istio, care va căuta @foocorporation.com în ID-ul utilizatorului și va efectua redirecționarea corespunzătoare. Pentru toți ceilalți utilizatori, nimic nu se va schimba. Între timp, veți putea să testați noua versiune a site-ului în liniște. Și observați, pentru aceasta nu este nevoie să implicați dezvoltatorii.

Și va costa mult?

Deloc. Istio funcționează destul de rapid, este scris în Go și creează un overhead foarte mic. În plus, posibila pierdere în performanța online este compensată de creșterea 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 program cu cod sursă deschis, așa că îl puteți obține și folosi gratuit.

Învățați singuri

Echipa Red Hat Developer Experience Team a dezvoltat un curs practic aprofundat ghid pe Istio (în engleză). Acesta funcționează pe Linux, MacOS și Windows, iar codul este disponibil în variante pe Java și Node.js.

10 lecții interactive despre Istio

Blocul 1 - Începători

Introducere în Istio
30 de minute
Ne familiarizăm cu Service Mesh, învățăm să instalăm Istio în clusterul Kubernetes OpenShift.
Începeți

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

Blocul 2 - Nivel mediu

Monitorizare și trasare în Istio
60 de minute
Învățăm instrumentele de monitorizare încorporate ale Istio, metricile configurabile, precum și OpenTracing prin Prometheus și Grafana.
Începeți

Routare simplă în Istio
60 de minute
Învățăm să gestionăm rutarea în Istio folosind reguli simple.
Începeți

Reguli avansate de rutare
60 de minute
Ne familiarizăm cu rutarea inteligentă în Istio, gestionarea accesului, echilibrarea sarcinii și limitarea vitezei.
Începeți

Blocul 3 - Utilizator experimentat

Injecție de erori în Istio
60 de minute
Învățăm scenariile de gestionare a erorilor în aplicații distribuite, creând erori HTTP și întârzieri de rețea, învățăm să aplicăm ingineria haosului pentru a restabili mediul.
Începeți

Circuit Breaker în Istio
30 de minute
Instalăm Siege pentru testarea de stres a site-urilor și învățăm să asigurăm redundanța backend-ului prin repetiții, circuit breaker și pool ejection.
Începeți

Egress și Istio
10 minute
Folosim rutele Egress pentru a crea reguli de interacțiune între serviciile interne și API-urile și serviciile externe.
Începeți

Istio și Kiali
15 minute
Învățăm să folosim Kiali pentru a obține o imagine de ansamblu a rețelei de servicii și pentru a studia fluxurile de cereri și date.
Începeți

Mutual TLS în Istio
15 minute
Creăm Istio Gateway și VirtualService, apoi studiem detaliat mutual TLS (mTLS) și configurările sale.
Începeți

Blocul 3.1 - Aprofundare: Istio Service Mesh pentru microservicii

Seria de postări despre Istio Service Mesh
Despre ce este cartea:

  • Ce este o rețea de servicii (service mesh).
  • Sistemul Istio și rolul său în arhitectura microserviciilor.
  • Utilizarea Istio pentru rezolvarea următoarelor probleme:
    • Rezistență la defecțiuni;
    • Rutare;
    • Testare de haos;
    • Securitate;
    • Colectarea telemetriei prin intermediul urmării, metricelor și Grafana.

Descarcă cartea

Seria de articole despre rețelele de servicii și Istio

Încercați singuri

Această serie de postări nu are scopul de a oferi o imersare profundă în lumea Istio. Vrem doar să vă familiarizăm cu conceptul în sine și, poate, să vă inspirăm să încercați Istio pe cont propriu. Acest lucru se poate face complet gratuit, iar Red Hat oferă toate instrumentele necesare pentru a începe să învățați OpenShift, Kubernetes, containere Linux și Istio, și anume: Red Hat Developer OpenShift Container Platform, ghidul nostru pentru Istio și alte resurse pe micro-site-ul nostru despre Service Mesh. Nu amânați, începeți chiar astăzi!

Regulile de rutare Istio: direcționăm solicitările de servicii acolo unde este nevoie

OpenShift și Kubernetes se descurcă excelent în a direcționa apelurile către microservicii către pod-urile corecte. Aceasta este una dintre scopurile existenței Kubernetes – rutarea și balasarea sarcinilor. Dar ce se întâmplă dacă aveți nevoie de o rutare mai fină și mai sofisticată? De exemplu, pentru a folosi simultan două versiuni ale unui microserviciu. Cum pot ajuta regulile de rutare Istio Route Rules în acest caz?

Regulile de rutare sunt acele reguli care, de fapt, stabilesc alegerea rutei. Indiferent de complexitatea sistemului, principiul general de funcționare al acestor reguli rămâne simplu: solicitările sunt rutate pe baza unor parametri specifici și a valorilor antetelor HTTP.
Să ne uităm la exemple:

Kubernetes implicit: trivial „50 la 50”

În exemplul nostru, vom arăta cum să folosim simultan în OpenShift două versiuni ale microserviciului, să le numim v1 și v2. Fiecare versiune rulează în propriul pod Kubernetes, și în mod implicit aici se aplică rutarea ciclică echilibrată (evenly balanced round robin routing). Fiecare pod primește partea sa de solicitări în funcție de numărul de instanțe ale microserviciului, adică replicilor. Istio permite să modificăm manual acest echilibru.

Să presupunem că am desfășurat pe OpenShift două versiuni ale serviciului nostru de recomandări, recommendation-v1 și recommendation-v2.
În figura 1 se observă că, atunci când fiecare serviciu este reprezentat printr-o singură instanță, cererile se alternează uniform între ele: 1-2-1-2-… Așa funcționează în mod implicit rutarea în Kubernetes:

Seria de postări despre Istio Service Mesh

Distribuție ponderată între versiuni

În figura 2 se arată ce se va întâmpla dacă numărul de replica ale serviciului v2 este crescut de la una la două (acest lucru se face cu comanda oc scale —replicas=2 deployment/recommendation-v2). După cum vedem, cererile între v1 și v2 se împart acum în proporția de „un la trei”: 1-2-2-1-2-2-…:

Seria de postări despre Istio Service Mesh

Ignorarea versiunii cu Istio

Istio permite modificarea ușoară a distribuției cererilor așa cum dorim. De exemplu, putem direcționa tot traficul doar către recommendation-v1 folosind următorul fișier yaml Istio:

Seria de postări despre Istio Service Mesh

Aici trebuie să ne concentrăm asupra următorului aspect: pod-urile sunt selectate conform etichetelor. În exemplul nostru, este utilizată eticheta v1. Parametrul „weight: 100” înseamnă că 100% din trafic va fi rutat către toate pod-urile serviciului care au eticheta v1.

Distribuție directivă între versiuni (Canary Deployment)

Mai departe, folosind parametrul weight, putem direcționa traficul către ambele pod-uri, 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:

Seria de postări despre Istio Service Mesh

Rutare separată pentru utilizatorii mobili

În concluzie, vom arăta cum să rutăm forțat traficul utilizatorilor mobili către serviciul v2, iar toți ceilalți către v1. Pentru aceasta, folosim expresii regulate pentru a analiza valoarea user-agent din antetul cererii:

Seria de postări despre Istio Service Mesh

Acum este rândul vostru

Exemplul cu expresii regulate pentru analiza antetelor ar trebui să vă motiveze să căutați propriile variante de aplicare a regulilor de rutare Istio. În plus, posibilitățile sunt extrem de vaste, deoarece valorile antetelor pot fi formate în codul sursă al aplicațiilor.

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

Tot ce am arătat în exemplele de mai sus se face fără nicio modificare în codul sursă, cu excepția cazurilor în care trebuie să formăm antete speciale pentru cereri. Istio va fi util atât dezvoltatorilor, care, de exemplu, îl pot folosi în etapa de testare, cât și specialiștilor în operarea sistemelor IT, cărora le va fi de mare ajutor în producție.

Așa că să repetăm leitmotivul acestei serii de postări: nu trebuie să schimbați nimic în codul vostru. Nu trebuie să creați noi imagini sau să lansați noi containe. Totul se realizează în afara codului.

Activați-vă imaginația

Doar imaginați-vă ce perspective deschide analiza titlurilor cu ajutorul expresiilor regulate. Doriți să redirecționați cel mai mare client al dumneavoastră către o versiune specială a acestora? microservicii? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Încercați singuri

A citi despre Istio, Kubernetes și OpenShift este una, dar de ce să nu le experimentați toate cu mâinile voastre? Echipa Red Hat Developer Program a pregătit un ghid detaliat (în engleză) care vă va ajuta să stăpâniți cât mai repede aceste tehnologii. Ghidul este de asemenea 100% open source, așadar este disponibil public. Fișierul funcționează pe macOS, Linux și Windows, iar codul sursă este disponibil în variante pentru Java și node.js (următoarele versiuni vor fi disponibile și în alte limbi). Pur și simplu deschideți în browserul dumneavoastră repositoare git corespunzătoare. Red Hat Developer Demo.

În următorul post: abordăm problemele cu eleganță

Astăzi ați văzut de ce sunt capabile regulile de rutare Istio. Și acum, imaginați-vă același lucru, dar aplicabil la gestionarea erorilor. Despre asta vom discuta în următorul post.

Sursa: habr.com

Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS 🔥 Cumpără un hosting fiabil pentru site-uri cu protecție DDoS, servere VPS VDS | ProHoster