Seria postów dotyczących Istio Service Mesh

Rozpoczynamy serię postów, w których zaprezentujemy niektóre z wielu możliwości siatki usług Istio Service Mesh w połączeniu z Red Hat OpenShift i Kubernetes.

Seria postów dotyczących Istio Service Mesh

Część pierwsza, dzisiejsza:

  • Wyjaśnimy koncepcję kontenerów sidecar w Kubernetes i sformułujemy leitmotiv tej serii postów: „nie musisz nic zmieniać w swoim kodzie”.
  • Przedstawimy podstawową rzecz Istio – zasady routingu. Na nich opierają się wszystkie inne możliwości Istio, ponieważ to właśnie zasady umożliwiają kierowanie ruchem do mikrousług, wykorzystując do tego pliki YAML, które są zewnętrzne w odniesieniu do kodu usług. Omówimy również schemat wdrożenia Canary Deployment. Noworoczny bonus – 10 interaktywnych zajęć z Istio.


Część druga, która wkrótce się pojawi, opowie o:

  • Jak Istio realizuje Pool Ejection w połączeniu z Circuit Breaker i pokaże, jak Istio pozwala usunąć z schematu równoważenia nie działający lub źle działający pod.
  • Zajmiemy się również tematem Circuit Breaker z pierwszego posta, aby sprawdzić, jak można tutaj wykorzystać Istio. Pokażemy, jak bez najmniejszych zmian w kodzie usług kierować ruchem i obsługiwać błędy sieciowe za pomocą plików konfiguracyjnych YAML i poleceń terminala.

Część trzecia:

  • Opowieść o śledzeniu i monitorowaniu, które są już wbudowane lub łatwo dodawane do Istio. Pokażemy, jak korzystać z takich narzędzi jak Prometheus, Jaeger i Grafana w połączeniu ze skalowaniem OpenShift, aby bez wysiłku zarządzać architekturą mikrousług.
  • Przechodzimy od monitorowania i obsługi błędów do wprowadzania ich do systemu celowo. Innymi słowy, uczymy się, jak przeprowadzać fault injection bez zmiany kodu źródłowego, co jest bardzo ważne z perspektywy testowania — ponieważ modyfikacja samego kodu wiąże się z ryzykiem wprowadzenia nowych błędów.

W końcu, w finálnym poście po Istio Service Mesh:

  • Przejdziemy na Ciemną Stronę. Dokładniej, nauczymy się korzystać z schematu Dark Launch, kiedy kod jest wdrażany i testowany bezpośrednio na danych produkcyjnych, ale nie wpływa na działanie systemu. Umiejętność Istio w zakresie dzielenia ruchu przydaje się w tym przypadku. Możliwość przeprowadzania testów na żywych danych produkcyjnych, nie wpływając na działanie systemu produkcyjnego, to najskuteczniejszy sposób weryfikacji.
  • W oparciu o Dark Launch, pokażemy, jak wykorzystać model wdrożenia Canary, aby zminimalizować ryzyko i uprościć wprowadzenie nowego kodu. Samo wdrożenie Canary to nie nowość, ale Istio umożliwia realizację tego schematu jedynie przy pomocy prostych plików YAML.
  • Na koniec pokażemy, jak za pomocą Istio Egress udostępnić usługi tym, którzy znajdują się poza twoimi klastrami, aby wykorzystać możliwości Istio w pracy z internetem.

No to zaczynamy...

Narzędzia do monitorowania i zarządzania Istio – wszystko, co potrzebne do koordynacji mikrousług w sieci usługowej service mesh.

Czym jest sieć usługowa Istio

Sieć usługowa realizuje dla grupy usług takie funkcje, jak monitorowanie ruchu, kontrola dostępu, odkrywanie, bezpieczeństwo, odporność na awarie oraz inne przydatne funkcje. Istio pozwala na to wszystko bez jakichkolwiek zmian w kodzie samych usług. Jaki jest sekret tego czarodzieja? Istio do każdego serwisu dołącza swój proxy w postaci kontenera sidecar (sidecar - przyczepka motocyklowa), a następnie cały ruch do tego serwisu przechodzi przez proxy, które, kierując się ustalonymi politykami, decyduje, jak, kiedy i czy w ogóle ten ruch ma dotrzeć do serwisu. Istio umożliwia również wdrażanie zaawansowanych technik DevOps, takich jak wdrożenia canary, obwody przeciążeniowe, wstrzykiwanie błędów i wiele innych.

Jak Istio działa z kontenerami i Kubernetes

Sieć usługowa Istio to realizacja sidecarowa wszystkiego, co konieczne do tworzenia i zarządzania mikrousługami: monitorowanie, śledzenie, obwody przeciążeniowe, routowanie, równoważenie obciążenia, wstrzykiwanie błędów, ponowienia, time-outy, lustrzane odbicie, kontrola dostępu, ograniczenie prędkości i wiele więcej. I chociaż dzisiaj istnieje wiele bibliotek, by realizować te funkcje bezpośrednio w kodzie, dzięki Istio możesz otrzymać to wszystko, nic nie zmieniając w swoim kodzie.

Zgodnie z modelem sidecar, Istio działa w kontenerze Linux, który znajduje się w tym samym Kubernetes-podzie co kontrolowana usługa i wprowadza (inject) oraz wydobywa (extract) funkcjonalność i informacje zgodnie z określoną konfiguracją. Podkreślamy, że to twoja własna konfiguracja i żyje ona poza twoim kodem. Dlatego kod staje się znacznie prostszy i krótszy.

Co jeszcze ważne, operacyjna część mikroserwisów nie jest w żaden sposób związana z samym kodem, co oznacza, że ich eksploatację można spokojnie powierzyć specjalistom IT. W rzeczy samej, dlaczego programista miałby odpowiadać za circuit breaker’y i fault injection? Reagować – tak, ale przetwarzać je i tworzyć? Jeśli usuniemy to wszystko z kodu, programiści będą mogli skoncentrować się na aplikacyjnym funkcjonale. A sam kod stanie się krótszy i prostszy.

Sieć serwisowa

Istio, realizując funkcje zarządzania mikroserwisami poza ich kodem – to właśnie koncepcja sieci serwisowej Service Mesh. Innymi słowy, to skoordynowana grupa jednego lub kilku binarnych plików, które tworzą siatkę funkcji sieciowych.

Jak Istio współpracuje z mikroserwisami

Tak wygląda praca kontenerów sidecar w połączeniu z Kubernetes i Minishift z lotu ptaka: uruchamiasz instancję Minishift, tworzysz projekt dla Istio (nazwijmy go „istio-system”), instalujesz i uruchamiasz wszystkie związane z Istio komponenty. Następnie, w miarę tworzenia projektów i pod’ów, dodajesz informacje konfiguracyjne do swoich deployment’ów, a twoje pod’y zaczynają korzystać z Istio. Uproszczony diagram wygląda tak:

Seria postów dotyczących Istio Service Mesh

Teraz można zmieniać ustawienia Istio, aby na przykład zorganizować fault injection, wsparcie Canary Deployment lub inne możliwości Istio – i to wszystko bez potrzeby ruszania samego kodu aplikacji. Powiedzmy, że chcesz przekierować cały ruch internetowy od użytkowników swojego największego klienta (Foo Corporation) na nową wersję strony. Wystarczy stworzyć zasadę routingu Istio, która będzie wyszukiwać @foocorporation.com w identyfikatorze użytkownika i wykonywać odpowiednie przekierowanie. Dla wszystkich innych użytkowników nic się nie zmieni. A ty w tym czasie będziesz spokojnie testować nową wersję strony. I zauważ, że do tego wcale nie trzeba angażować deweloperów.

A to będzie drogie?

Niekoniecznie. Istio działa dość szybko, jest napisane w Go I tworzy zaledwie niewielkie obciążenie. Co więcej, możliwa utrata wydajności online jest kompensowana wzrostem wydajności pracy programistów. Przynajmniej teoretycznie: nie zapominaj, że czas programistów jest drogi. Jeśli chodzi o koszty oprogramowania, Istio to oprogramowanie o otwartym kodzie źródłowym, dlatego można je bezpłatnie uzyskać i używać.

Opanuj to samodzielnie

Zespół Red Hat Developer Experience opracował głębokie praktyczne przewodnik na temat Istio (w języku angielskim). Działa na systemach Linux, MacOS i Windows, a kod jest dostępny w wersjach na Java i Node.js.

10 interaktywnych zajęć na temat Istio

Blok 1 — Dla początkujących

Wprowadzenie do Istio
30 minut
Poznajemy Service Mesh, uczymy się instalować Istio w klastrze Kubernetes na OpenShift.
Rozpocznij

Wdrażanie mikrousług w Istio
30 minut
Używamy Istio, aby wdrożyć trzy mikrousługi z Spring Boot i Vert.x.
Rozpocznij

Blok 2 – średni poziom

Monitoring i śledzenie w Istio
60 minut
Poznajemy wbudowane narzędzia monitorowania Istio, konfigurowalne metryki oraz OpenTracing przez Prometheus i Grafana.
Rozpocznij

Prosta routingu w Istio
60 minut
Uczymy się zarządzać routingiem w Istio za pomocą prostych reguł.
Rozpocznij

Zaawansowane reguły routingu
60 minut
Poznajemy inteligentne routowanie w Istio, zarządzanie dostępem, równoważenie obciążenia i ograniczenie przepustowości.
Rozpocznij

Blok 3 – zaawansowany użytkownik

Wstrzykiwanie błędów w Istio
60 minut
Poznajemy scenariusze obsługi awarii w rozproszonych aplikacjach, tworząc błędy HTTP i opóźnienia sieciowe, uczymy się stosować inżynierię chaosu do odbudowy środowiska.
Rozpocznij

Circuit Breaker w Istio
30 minut
Instalujemy Siege do testowania obciążenia stron i uczymy się zapewniać odporność backendu za pomocą powtórzeń, circuit breaker i odrzucania puli.
Rozpocznij

Egress i Istio
10 minut
Używamy tras Egress, aby tworzyć reguły interakcji wewnętrznych usług z zewnętrznymi API i usługami.
Rozpocznij

Istio i Kiali
15 minut
Uczymy się korzystać z Kiali, aby uzyskać ogólny obraz siatki usług i zbadać przepływy zapytań i danych.
Rozpocznij

Mutual TLS w Istio
15 minut
Tworzymy Istio Gateway i VirtualService, a następnie szczegółowo badamy mutual TLS (mTLS) i jego ustawienia.
Rozpocznij

Blok 3.1 — Głębokie zanurzenie: Istio Service Mesh dla mikrousług

Seria postów dotyczących Istio Service Mesh
O czym jest ta książka:

  • Co to jest siatka usług service mesh.
  • System Istio i jego rola w architekturze mikrousług.
  • Wykorzystanie Istio w następujących zadaniach:
    • Odporność na awarie;
    • Routing;
    • Testowanie chaosu;
    • Bezpieczeństwo;
    • Zbieranie telemetrii z wykorzystaniem śledzenia, metryk i Grafany.

Pobierz książkę

Seria artykułów o sieciach serwisowych i Istio

Spróbuj samodzielnie

Celem tej serii wpisów nie jest głębokie zanurzenie się w świat Istio. Chcemy tylko zapoznać Cię z samą koncepcją i może zainspirować do samodzielnego wypróbowania Istio. Można to zrobić całkowicie za darmo, a Red Hat udostępnia wszystkie niezbędne narzędzia, aby zacząć pracować z OpenShift, Kubernetes, kontenerami Linux i Istio, a mianowicie: Red Hat Developer OpenShift Container Platform, naszym przewodnikiem po Istio i innymi zasobami na naszym mikrostronie poświęconej Service Mesh. Nie czekaj, zacznij już dziś!

Reguły routingu Istio: kierujemy zapytania serwisowe tam, gdzie należy

OpenShift i Kubernetes świetnie radzą sobie z kierowaniem mikroserwisami do odpowiednich pod’ów. To jeden z celów istnienia Kubernetes – routing i równoważenie obciążenia. A co, jeśli potrzebujesz bardziej subtelnego i wyrafinowanego routingu? Na przykład, aby jednocześnie korzystać z dwóch wersji mikroserwisu. Jak mogą w tym pomóc reguły routingu Istio?

Reguły routingu to zasady, które określają wybór ścieżki. Przy każdym poziomie złożoności systemu ogólna zasada działania tych reguł pozostaje prosta: zapytania są kierowane na podstawie określonych parametrów i wartości nagłówków HTTP.
Zobaczmy na przykładach:

Kubernetes domyślnie: trywialne „50 na 50”

W naszym przykładzie pokażemy, jak jednocześnie używać w OpenShift dwóch wersji mikroserwisu, nazwanych v1 i v2. Każda wersja działa w swoim własnym pod’zie Kubernetes, a domyślnie tutaj działa równoważony cykliczny routing (evenly balanced round robin routing). Każdy pod otrzymuje swoją część zapytań, w zależności od liczby jego instancji mikroserwisu, mówiąc inaczej, replik. Istio pozwala jednak ręcznie zmienić ten balans.

Załóżmy, że wdrożyliśmy w OpenShift dwie wersje naszego serwisu rekomendacji, recommendation-v1 i recommendation-v2.
Na rys. 1 widać, że gdy każdy serwis jest reprezentowany w jednej instancji, zapytania równomiernie przeplatają się między nimi: 1-2-1-2-… Tak właśnie działa routing Kubernetes domyślnie:

Seria postów dotyczących Istio Service Mesh

Waży dystrybucję między wersjami

Na rys. 2 pokazano, co się stanie, jeśli zwiększymy liczbę replik usługi v2 z jednej do dwóch (to wykonuje się poleceniem oc scale —replicas=2 deployment/recommendation-v2). Jak widać, żądania między v1 a v2 teraz dzielą się w stosunku «jeden do trzech»: 1-2-2-1-2-2-…:

Seria postów dotyczących Istio Service Mesh

Ignorowanie wersji z pomocą Istio

Istio umożliwia łatwe zmienianie rozkładu żądań w pożądany przez nas sposób. Na przykład, aby wysłać cały ruch tylko do recommendation-v1 przy użyciu poniższego pliku yaml Istio:

Seria postów dotyczących Istio Service Mesh

Tu należy zwrócić uwagę na to, że pod’y są wybierane według etykiet. W naszym przykładzie używana jest etykieta v1. Parametr «weight: 100» oznacza, że 100% ruchu będzie kierowane do wszystkich pod’ów usługi, które mają etykietę v1.

Zarządzanie rozkładem między wersjami (Canary Deployment)

Następnie, wykorzystując parametr weight, można kierować ruch do obu pod’ów, ignorując liczbę instancji mikrousług uruchomionych w każdej z nich. Na przykład, tutaj kierujemy 90% ruchu na v1 i 10% – na v2:

Seria postów dotyczących Istio Service Mesh

Osobne kierowanie ruchu dla użytkowników mobilnych

Na zakończenie pokażemy, jak wymuszać kierowanie ruchu użytkowników mobilnych do usługi v2, a wszystkich innych do v1. W tym celu analizujemy wartość user-agent w nagłówku żądania przy pomocy wyrażeń regularnych:

Seria postów dotyczących Istio Service Mesh

Teraz twoja kolej

Przykład z wyrażeniami regularnymi do analizy nagłówków powinien zmotywować cię do poszukiwania własnych zastosowań reguł kierowania Istio. Tym bardziej, że możliwości są bardzo rozległe, ponieważ wartości nagłówków można formować w kodzie źródłowym aplikacji.

I pamiętaj, że Opr., a nie Dev

Wszystko, co pokazaliśmy w powyższych przykładach, odbywa się bez jakichkolwiek zmian w kodzie źródłowym, poza przypadkami, gdy trzeba formować specjalne nagłówki żądań. Istio przyda się zarówno programistom, którzy mogą go stosować na etapie testowania, jak i specjalistom od eksploatacji systemów IT, którym znacznie pomoże w produkcji.

Tak więc powtórzmy leitmotiv tej serii artykułów: nie musisz nic zmieniać w swoim kodzie. Nie trzeba budować nowych obrazów ani uruchamiać nowych kontenerów. Wszystko to realizowane jest poza kodem.

Użyj wyobraźni

Wyobraź sobie, jakie możliwości otwiera analiza nagłówków za pomocą wyrażeń regularnych. Chcesz skierować swojego największego klienta na specjalną wersję swojego mikroserwisów? Легко! Нужна отдельная версия для браузера Chrome? Не проблема! Вы можете маршрутизировать трафик практически по любой его характеристике.

Spróbuj samodzielnie

Czytanie o Istio, Kubernetes i OpenShift to jedno, ale dlaczego nie spróbować wszystkiego samemu? Zespół Program dla Developerów Red Hat przygotował szczegółowy przewodnik (w języku angielskim), który pomoże Ci jak najszybciej opanować te technologie. Przewodnik jest również w 100% open source, więc jest dostępny publicznie. Plik działa na macOS, Linux i Windows, a kod źródłowy jest dostępny w wersjach na Java i node.js (wkrótce będą wersje w innych językach). Po prostu otwórz w swojej przeglądarce odpowiednie repozytorium git Demonstracja Red Hat Developer.

W następnym poście: rozwiązujemy problemy w sposób atrakcyjny

Dziś zobaczyłeś, co potrafią reguły routingu Istio. A teraz wyobraź to sobie w kontekście obsługi błędów. O tym właśnie opowiemy w następnym poście.

Źródło: habr.com

Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS 🔥 Kup solidny hosting stron z ochroną przed DDoS, serwery VPS VDS | ProHoster