Istio Service Mesh Seriyası

Biz Istio Service Mesh'in Red Hat OpenShift və Kubernetes ilə birlikdə bir çox imkanlarını nümayiş etdirəcəyimiz bir yazı seriyasına başlayırıq.

Istio Service Mesh Seriyası

Birinci bölüm, bu gündür:

  • Kubernetes-in sidecar konteynerləri konseptini izah edəcəyik və bu yazı seriyasının baş mövzusunu formalaşdıracağıq: «Kodu dəyişməyə ehtiyacınız yoxdur».
  • Istio-nun əsas görsənəcəyini – marşrutlaşdırma qaydalarını təqdim edəcəyik. Bütün digər Istio imkanları bu qaydalar üzərində qurulub, çünki qaydalar, mikroservislərə trafiği yönləndirmək üçün koddan kənar YAML fayllarını istifadə etməyə imkan tanıyır. Eyni zamanda, Canary Deployment-in tətbiq sxemasını müzakirə edəcəyik. Yeni il bonusu – Istio üzrə 10 interaktiv dərs


İkinci bölümü, tezliklə çıxacaq, sizə nəyi izah edəcək:

  • Istio-nun Pool Ejection-i Circuit Breaker ilə birgə necə həyata keçirdiyini və Istio-nun işləmir və ya pis işləyən podu balanslaşdırma sxemasından necə çıxardığını göstərəcəyik.
  • Həmçinin, ilk yazıdakı Circuit Breaker mövzusunu müzakirə edəcəyik, burada Istio-nu necə tətbiq edə biləcəyimizi göstərəcəyik. Kodu dəyişdirmədən trafik yönləndirmək və YAML konfiqurasiya faylları və terminal komandaları ilə şəbəkə xətalarını idarə etmək üçün necə işlədiyimizi göstərəcəyik.

Üçüncü bölüm:

  • İstio-ya daxil edilmiş və ya asanlıqla əlavə edilə bilən izleme və monitorinq haqqında danışacağıq. Prometheus, Jaeger və Grafana kimi alətləri, OpenShift-in miqyaslandırılması ilə birgə istifadə etməyi göstərəcəyik ki, mikroservis arxitekturasını çətinlik çəkmədən idarə edə bilək.
  • Monitorinq və xəta emalından, onları sistemə məqsədli şəkildə daxil etməyə keçirik. Başqa sözlə, mənbə kodunu dəyişdirmədən fault injection etməyi öyrənirik, bu da test edilməsi baxımından olduqca vacibdir — çünki əgər bunun üçün mənbə kodunu dəyişdirsəniz, əlavə xəta gətirmə riski var.

Nəhayət, Istio Service Mesh üzrə son yazıda:

  • Qaranlıq tərəfə keçəcəyik. Dəqiq desək, Dark Launch sxemasını istifadə etməyi öyrənəcəyik, burada kod istehsal məlumatlarında yayılır və test edilir, lakin sistemin işinə heç bir təsir etmir. Burada Istio-nun traffic-in ayrılma bacarığı çox işə yarayır. İstehsal məlumatlarında canlı testlər aparmaq imkanı, müntəzəm sistemin işini heç bir şəkildə təsir etmədən yoxlamağın ən inandırıcı üsuludur.
  • Dark Launch-dan başlayaraq, riskləri azaltmaq və yeni kodun işə düşməsini asanlaşdırmaq üçün Canary Deployment modelini necə istifadə edəcəyimizi göstərəcəyik. Canary Deployment özü tamamilə yeni bir şey deyil, lakin Istio bu sxemləri sadə YAML faylları ilə həyata keçirməyə imkan tanıyır.
  • Nəticədə, Istio Egress-dən istifadə edərək, clasterlarınızın xaricində olanlara xidmətlərə giriş verəcəyik ki, Istio-nun internetdə işləmə imkanlarını istifadə edə bilək.

Beləliklə, başlayaq...

Istio monitoring and management toolkit – everything you need for coordinating microservices in the service mesh service mesh.

What is the Istio service mesh?

The service mesh implements functions such as traffic monitoring, access control, discovery, security, fault tolerance, and other useful features for a group of services. Istio allows you to do all this without any changes to the code of the services themselves. What’s the secret of this magic? Istio attaches its proxy to each service in the form of a sidecar container (sidecar – motorcycle sidecar), after which all traffic to this service goes through the proxy, which, based on the specified policies, decides how, when, and whether this traffic should reach the service. Istio also enables advanced DevOps techniques such as canary deployments, circuit breakers, fault injection, and many more.

How Istio works with containers and Kubernetes

The Istio service mesh is a sidecar implementation of everything needed for creating and managing microservices: monitoring, tracing, circuit breakers, routing, load balancing, fault injection, retries, timeouts, mirroring, access control, rate limiting, and much more. While there are plenty of libraries available today to implement these features directly in the code, with Istio, you can achieve all of this without changing your code.

According to the sidecar model, Istio runs in a Linux container that resides in the same Kubernetes-pod as the managed service and injects and extracts functionality and information according to the specified configuration. Let’s emphasize that this is your own configuration, and it lives outside of your code. Therefore, the code becomes much simpler and shorter.

What’s more important is that the operational aspects of microservices are completely decoupled from the code itself, meaning that their operation can be smoothly handed over to IT specialists. Indeed, why should a developer be responsible for circuit breakers and fault injection? Reacting – yes, but handling and creating them? By removing all of this from the code, programmers can fully focus on application functionality. Plus, the code itself will become shorter and simpler.

Service mesh

Istio, implementing microservice management functions outside their code – this is the concept of a Service Mesh. In other words, it is a coordinated group of one or more binaries that form a mesh of network functions.

How Istio works with microservices

Here’s how sidecar containers work in conjunction with KubernetesMinishift quşun uçamı ilə: Minishift instansiyasını işə salırsınız, Istio üçün bir layihə yaradırsınız (bunu "istio-system" adlandıraq), Istio ilə bağlı bütün komponentləri quraşdırıb işə salırsınız. Sonra, layihələr və podlar yarandıqca, öz deployment'lərinizə konfiqurasiya məlumatları əlavə edirsiniz və podlarınız Istio'dan istifadə etməyə başlayır. Sadələşdirilmiş diagram belə görünür:

Istio Service Mesh Seriyası

İndi Istio ayarlarını dəyişmək mümkündür, məsələn, fault injection, dəstək təşkil etmək üçün Canary Deployment və ya Istio-nun digər imkanları – və bütün bunları tətbiqlərin öz kodunu heç bir dəyişiklik etmədən edirsiniz. Məsələn, əgər ən böyük müştərinizin (Foo Corporation) istifadəçilərindən gələn bütün veb trafiki yeni versiyaya yönləndirmək istəsəniz, yalnız Istio-da bir marşrutlaşdırma qaydası yaratmalısınız ki, o @foocorporation.com-u istifadəçi identifikatorunda axtarsın və müvafiq yönləndirməni yerinə yetirsin. Digər bütün istifadəçilər üçün heç bir dəyişiklik olmayacaq. Siz isə eyni zamanda yeni veb versiyasını rahatlıqla sınayacaqsınız. Və unutmayın ki, bunun üçün tamamilə proqramçıları cəlb etməyə ehtiyac yoxdur.

Bunun üçün bahalı ödəməyi gözləyirsiniz?

Tam əksinə. Istio olduqca sürətli işləyir, o, Go yazılıb və çox az overhead yaradır. Bundan başqa, onlayn performansdakı mümkün itki inkişaf etdiricilərin məhsuldarlığındakı artımla kompensasiya olunur. Hər halda, nəzəri olaraq: dəvətçilərin vaxtının dəyərini unutmayın. Proqram təminatı xərclərinə gəlincə, Istio açıq mənbəli proqramdır, buna görə də onu əldə etmək və istifadə etmək pulsuzdur.

Özünüz öyrənin

Red Hat Developer Experience Team komandasının hazırladığı dərindən praktiki bələdçi Istio üzrə (ingiliscə). Bu, Linux, MacOS və Windows-da işləyir və kod Java və Node.js variantlarında təqdim olunub.

Istio üzrə 10 interaktiv dərs

Bölmə 1 — Başlanğıc

Istio-ya Giriş
30 dəqiqə
Service Mesh ilə tanış oluruq, Istio-nu OpenShift Kubernetes klasterində quraşdırmağı öyrənirik.
Başlamaq

Istio-da mikroservislərin yayılması
30 dəqiqə
Istio-dan istifadə edərək Spring Boot və Vert.x ilə üç mikroservisi yayırıq.
Başlamaq

Bölmə 2 – Orta səviyyə

Istio-da Monitorinq və İzleme
60 dəqiqə
Istio-nun daxili monitorinq vasitələrini, konfiqurasiya oluna bilən metrikləri və Prometheus və Grafana vasitəsilə OpenTracing-i öyrənirik.
Başlamaq

Istio-da Sadə Marşrutlaşdırma
60 dəqiqə
Istio-da sadə qaydalarla marşrutlaşdırma idarə etməyi öyrənirik.
Başlamaq

Genişləndirilmiş Marşrutlaşdırma Qaydalari
60 dəqiqə
Istio-da ağıllı marşrutlaşdırma, giriş idarəetməsi, yük balanslaması və sürət məhdudlaşdırması ilə tanış oluruq.
Başlamaq

Bölmə 3 – Təcrübəli istifadəçi

Istio-da Fault Injection
60 dəqiqə
Paylanmış tətbiqlərdə qüsurları idarə etmə ssenarilərini öyrənərək, HTTP xətaları və şəbəkə gecikmələri yaradırıq, mühitin bərpası üçün chaos engineering tətbiq etməyi öyrənirik.
Başlamaq

Istio-da Circuit Breaker
30 dəqiqə
Siege-i saytların stress test edilməsində və arxa planın davamlılığını təmin etmək üçün təkrarlamalar, circuit breaker və pool ejection istifadə etməyi öyrənirik.
Başlamaq

Egress və Istio
10 dəqiqə
Daxili xidmətlərin xarici API-lərlə və xidmətlərlə ünsiyyət qaydalarını yaratmaq üçün Egress marşrutlarından istifadə edirik.
Başlamaq

Istio və Kiali
15 dəqiqə
Kiali-dən istifadə edərək xidmət şəbəkəsinin ümumi təsvirini əldə etməyi və sorğu və məlumat axınlarını öyrənməyi öyrənirik.
Başlamaq

Istio-da Mutual TLS
15 dəqiqə
Istio Gateway və VirtualService yaradırıq, sonra mutual TLS (mTLS) və onun parametrlərini ətraflı öyrənirik.
Başlamaq

Bölüm 3.1 — Dərin daldırma: Microservislər üçün Istio Service Mesh

Istio Service Mesh Seriyası
Kitabın mövzusu:

  • Xidmət şəbəkəsi (service mesh) nədir.
  • Istio sisteminin mikroservis memarlığında rolu.
  • Istio-nu aşağıdakı problemləri həll edərkən istifadə etmək:
    • Kesintiye dayanıklılık;
    • Marşrutlaşdırma;
    • Kaos testləri;
    • Təhlükəsizlik;
    • Təhlil, metriklər və Grafana ilə telemetriya toplanması.

Kitabı yükləyin

Xidmət şəbəkələri və Istio haqqında məqalələr seriyası

Özünüz sınayın

Bu məqalə seriyası Istio dünyasına dərin dalış etməyi məqsəd qoymur. Biz sadəcə konsepsiya ilə tanış olmaq və bəlkə də sizi Istio-nu özünüz sınamağa ilhamlandırmaq istəyirik. Bunu tamamilə pulsuz edə bilərsiniz, Red Hat OpenShift, Kubernetes, Linux konteynerləri və Istio-nu öyrənmək üçün lazım olan bütün vasitələri təqdim edir, yəni: Red Hat Developer OpenShift Container Platform, Istio haqqında bələdçimiz və bizim Xidmət Şəbəkəsi ilə bağlı mikro-saytımızda digər resurslar. Gecikməyin, bu gün başlayın!

Istio-nun marşrutlaşdırma qaydaları: servis sorğularını lazım olan yerə yönləndirmək

OpenShiftKubernetes mükəmməl şəkildə mikroservislərə girişin düzgün pod-lara yönləndirdiyini sübut edir. Bu, Kubernetes-in varlığının məqsədidir – marşrutlaşdırma və yük balanslaşdırılması. Bəs daha incə və mürəkkəb marşrutlaşdırmaya ehtiyacınız varsa? Məsələn, mikroservisin iki versiyasını eyni anda istifadə etməyi istəyirsiniz. Istio Route Rules buradakı marşrutlaşdırma qaydalarına necə kömək edir?

Marşrutlaşdırma qaydaları, marşrut seçimini təyin edən qaydalardır. Sistemin çətinlik səviyyəsindən asılı olmayaraq, bu qaydaların işləmə prinsipi sadədir: sorğular müəyyən parametrlər və HTTP başlıq dəyərlərinə əsaslanaraq marşrutlaşdırılır.
Nümunələrə baxaq:

Kubernetes-də standart: triviyal "50-yə 50"

Nümunəmizdə OpenShift-də eyni anda iki versiyanı, v1 və v2 adlandırdığımız mikroservisi necə istifadə edəcəyimizi göstərəcəyik. Hər bir versiya öz Kubernetes pod'unda başlatılır və burada standart olaraq bərabər balanslaşdırılmış dövri marşrutlaşdırma işləyir. Hər pod öz mikroservisinə olan sorğuların sayını, yəni replika sayını alır. Istio isə bu balansı əl ilə dəyişməyə imkan tanıyır.

Təsəvvür edək ki, OpenShift-də iki versiyada bizim tövsiyə xidmətimizi, recommendation-v1 və recommendation-v2, yaymışıq.
Şəkil 1-də görünür ki, hər xidmət yalnız bir ədəddə təqdim olunduqda, sorğular arasında bərabər dəyişim olur: 1-2-1-2-… Beləliklə, Kubernetes marşrutlaşdırması standart olaraq işləyir:

Istio Service Mesh Seriyası

Versiyalar arasında çəkili bölgü

Şəkil 2-də görünür ki, v2 xidmətinin replika sayını birdən iki ədədədək artırsaq (bu, oc scale —replicas=2 deployment/recommendation-v2 komandası ilə edilir). Göründüyü kimi, sorğular v1 ilə v2 arasında indi "birə üç" proporsiyasında paylanır: 1-2-2-1-2-2-…:

Istio Service Mesh Seriyası

Istio ilə versiyanı göz ardı etmə

Istio sorğuların bölgüsünü istədiyimiz qaydada asanlıqla dəyişməyə imkan tanıyır. Məsələn, bütün trafiki yalnız recommendation-v1-ə göndərmək üçün aşağıdakı Istio yaml faylını istifadə edə bilərik:

Istio Service Mesh Seriyası

Burada diqqət etməli olduğumuz bir məsələ var: pod'lar etiketlərə uyğun olaraq seçilir. Nümunəmizdə v1 etiketi istifadə olunur. "weight: 100" parametrinin mənası, 100% trafikin v1 etiketi olan bütün pod'lara marşrutlaşdırılacağını bildirir.

Versiyalar arasında əmrli bölgü (Canary Deployment)

Daha sonra, weight parametrini istifadə edərək, hər iki pod'a trafik yönəldə bilərik, mikroservislərin açılan ədədlərinə baxmayaraq. Məsələn, burada 90% trafiki v1-ə və 10% -ni v2-yə yönəldirik:

Istio Service Mesh Seriyası

Mobil istifadəçilərin ayrılmış marşrutlaşdırılması

Nəticə olaraq, mobil istifadəçilərin trafikini v2 xidmətinə, digərlərinin isə v1-ə məcburi marşrutlaşdırma üsulunu göstərəcəyik. Bunun üçün sorğu başlığındakı user-agent dəyərini müntəzəm ifadələrlə analiz edəcəyik:

Istio Service Mesh Seriyası

İndi sizin növbəniz

Başlıq analizi üçün müntəzəm ifadə nümunəsi sizi Istio marşrutlaşdırma qaydalarına tətbiq etməyə təşviq etməlidir. Xüsusilə, burada başlıqların dəyərlərini proqramların mənbə kodunda formalaşdırmaq imkanları olduqca genişdir.

Və unutmayın ki, Ops, Dev deyil

Yuxarıda göstərdiyimiz nümunələrin hamısı mənbə kodunda ən kiçik dəyişikliklər etmədən mümkündür, yalnız xüsusi sorğu başlıqları formalaşdırmaq lazım olduğu hallarda istisna olmaqla. Istio, məsələn, testi mərhələsində istifadə edə biləcək proqramçılar üçün, həm də istehsalatda mühüm kömək göstərəcək İT sistemləri üzrə mütəxəssislər üçün faydalıdır.

Beləliklə, bu yazı seriyasının leitmotivi təkrar edək: kodunuzda heç nə dəyişdirmək lazım deyil. Yeni imiclər toplamağa və ya yeni konteynerlər işə salmağa ehtiyac yoxdur. Bütün bunlar koddan kənarda həyata keçirilir.

Təsəvvürünüzü işə salın

Düşünün, müntəzəm ifadələr vasitəsilə başlıqların analizinin necə perspektivlər açacağı barədə. İstəyirsinizmi ki, ən böyük müştərinizi xüsusi versiyanıza yönləndirin mikrosistemlərinizə? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Özünüz sınayın

Istio, Kubernetes və OpenShift haqqında yazmaq asandır, amma niyə hər şeyi öz əllərinizlə etməyəsiniz? Red Hat Developer Program sizi bu texnologiyaları mümkün qədər sürətli öyrənməyə kömək edəcək ətraflı bir bələdçi (ingiliscə) hazırladı. Bələdçi də tamamilə açıq mənbədir, buna görə də açıq istifadədədir. Fayl macOS, Linux və Windows-da işləyir və mənbə kodu Java və node.js variantlarında mövcuddur (başqa dillərdə versiyalar tezliklə gələcək). Müvafiq git-repozitoriyanı brauzerinizdə açın Red Hat Developer Demo.

Növbəti yazıda: problemləri gözəl bir şəkildə həll edirik

Bu gün, Istio-nun yönləndirmə qaydalarının nə qədər güclü olduğunu gördünüz. İndi isə eyni şeyi, lakin səhv idarəetməsi ilə tətbiq etməyə baxın. Növbəti yazımızda məhz bu barədə danışacağıq.

Mənbə: habr.com

DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər 🔥 DDoS qoruması olan saytlara etibarlı hosting satın alın, VPS VDS serverlər | ProHoster