Seria postów na temat Istio Service Mesh

Rozpoczynamy serię postów prezentujących niektóre z wielu możliwości Istio Service Mesh w połączeniu z Red Hat OpenShift i Kubernetes.

Seria postów na temat Istio Service Mesh

Część pierwsza, dzisiaj:

  • Wyjaśnijmy pojęcie kontenerów bocznych Kubernetes i sformułujmy motyw przewodni tego cyklu postów: „nie musisz niczego zmieniać w swoim kodzie”.
  • Przedstawmy podstawową rzecz Istio – reguły routingu. Na nich zbudowane są wszystkie pozostałe funkcjonalności Istio, gdyż to właśnie reguły pozwalają kierować ruch do mikroserwisów, korzystając z zewnętrznych w stosunku do kodu usługi plików YAML. Rozważamy również plan wdrożenia Canary Deployment. Bonus noworoczny – 10 interaktywnych lekcji na Istio


Część druga, która już wkrótce dowie się:

  • W jaki sposób Istio wdraża funkcję Pool Ejection w połączeniu z wyłącznikiem automatycznym i zademonstruje, w jaki sposób Istio umożliwia usunięcie martwego lub słabo działającego zasobnika z obwodu równoważącego.
  • Przyjrzymy się również tematowi wyłącznika z pierwszego postu, aby zobaczyć, jak można tutaj zastosować Istio. Pokażemy Ci, jak kierować ruchem i obsługiwać błędy sieciowe za pomocą plików konfiguracyjnych YAML i poleceń terminala bez najmniejszych zmian w kodzie usługi.

Część trzecia:

  • Opowieść o śledzeniu i monitorowaniu, które są już wbudowane lub łatwo dodane do Istio. Pokażemy Ci, jak używać narzędzi takich jak Prometheus, Jaeger i Grafana w połączeniu ze skalowaniem OpenShift, aby bez wysiłku zarządzać architekturami mikrousług.
  • Od monitorowania i obsługi błędów przechodzimy do celowego wprowadzania ich do systemu. Innymi słowy, uczymy się wstrzykiwać błędy bez zmiany kodu źródłowego, co jest bardzo ważne z testowego punktu widzenia - ponieważ jeśli zmienisz w tym celu sam kod, istnieje ryzyko wprowadzenia dodatkowych błędów.

Wreszcie w ostatnim poście na Istio Service Mesh:

  • Przejdźmy na Ciemną Stronę. Dokładniej, nauczymy się korzystać ze schematu Dark Launch, gdy kod zostanie wdrożony i przetestowany bezpośrednio na danych produkcyjnych, ale nie wpływa to w żaden sposób na działanie systemu. Tutaj przydaje się zdolność Istio do dzielenia ruchu. A możliwość testowania na rzeczywistych danych produkcyjnych bez wpływania w jakikolwiek sposób na działanie systemu bojowego jest najbardziej przekonującą metodą weryfikacji.
  • Opierając się na Dark Launch, pokażemy Ci, jak używać modelu Canary Deployment, aby zmniejszyć ryzyko i ułatwić wprowadzenie nowego kodu do środowiska produkcyjnego. Samo wdrożenie Canary nie jest niczym nowym, ale Istio umożliwia wdrożenie tego schematu za pomocą prostych plików YAML.
  • Na koniec pokażemy Ci, jak wykorzystać Istio Egress, aby udostępnić usługi tym, którzy znajdują się poza Twoimi klastrami, aby móc korzystać z możliwości Istio podczas pracy z Internetem.

Więc zaczynamy...

Narzędzia do monitorowania i zarządzania Istio — wszystko, czego potrzebujesz do koordynowania mikrousług w siatce usług siatka serwisowa.

Co to jest siatka usług Istio

Siatka usług implementuje funkcje takie jak monitorowanie ruchu, kontrola dostępu, wykrywanie, bezpieczeństwo, odporność na błędy i inne przydatne rzeczy dla grupy usług. Istio pozwala zrobić to wszystko bez najmniejszych zmian w kodzie samych usług. Jaki jest sekret magii? Istio dołącza do każdej usługi własne proxy w postaci kontenera sidecar (sidecar to sidecar motocykla), po czym cały ruch do tej usługi przechodzi przez proxy, które kierując się określonymi politykami decyduje, jak, kiedy i czy ten ruch powinien w ogóle dotrzeć do serwisu. Istio umożliwia również wdrażanie zaawansowanych technik DevOps, takich jak wdrożenia typu canary, wyłączniki automatyczne, wstrzykiwanie usterek i wiele innych.

Jak Istio współpracuje z kontenerami i Kubernetesem

Siatka usług Istio to poboczna implementacja wszystkiego, co jest potrzebne do tworzenia mikrousług i zarządzania nimi: monitorowanie, śledzenie, wyłączniki, routing, równoważenie obciążenia, wstrzykiwanie błędów, ponowne próby, przekroczenia limitu czasu, dublowanie, kontrola dostępu, ograniczanie szybkości i wiele więcej.inne. I chociaż obecnie istnieje mnóstwo bibliotek umożliwiających implementację tych funkcji bezpośrednio w kodzie, dzięki Istio możesz uzyskać te same rzeczy bez zmiany czegokolwiek w kodzie.

Według modelu sidecar Istio działa w kontenerze Linux, który znajduje się w jednym Kubernetes-pod z kontrolowaną usługą, która wstrzykiwa i wyodrębnia funkcjonalność oraz informacje zgodnie z daną konfiguracją. Podkreślamy, że jest to Twoja własna konfiguracja i istnieje ona poza Twoim kodem. Dzięki temu kod staje się znacznie prostszy i krótszy.

Co ważne, komponent operacyjny mikroserwisów okazuje się w żaden sposób nie powiązany z samym kodem, co oznacza, że ​​ich obsługę można bezpiecznie przekazać specjalistom IT. Rzeczywiście, dlaczego programista miałby być odpowiedzialny za wyłączniki automatyczne i wstrzykiwanie usterek? Reagować tak, ale przetwarzać je i tworzyć? Jeśli usuniesz to wszystko z kodu, programiści będą mogli w pełni skupić się na funkcjonalności aplikacji. A sam kod stanie się krótszy i prostszy.

Siatka serwisowa

Istio, które implementuje funkcje zarządzania mikrousługami poza ich kodem, to koncepcja Service Mesh. Innymi słowy, jest to skoordynowana grupa jednego lub większej liczby plików binarnych, które tworzą siatkę funkcji sieciowych.

Jak Istio współpracuje z mikroserwisami

Tak wygląda praca kontenerów bocznych w połączeniu z nimi Kubernetes и Minizmiana widok z lotu ptaka: uruchom instancję Minishift, utwórz projekt dla Istio (nazwijmy go „istio-system”), zainstaluj i uruchom wszystkie komponenty związane z Istio. Następnie podczas tworzenia projektów i zasobników dodajesz informacje konfiguracyjne do wdrożeń, a zasobniki zaczynają korzystać z Istio. Uproszczony schemat wygląda następująco:

Seria postów na temat Istio Service Mesh

Teraz możesz zmienić ustawienia Istio, aby na przykład zorganizować wstrzykiwanie usterek, wsparcie Wdrożenie na Wyspach Kanaryjskich lub inne funkcje Istio - a wszystko to bez dotykania kodu samych aplikacji. Załóżmy, że chcesz przekierować cały ruch internetowy od użytkowników swojego największego klienta (Foo Corporation) do nowej wersji witryny. Aby to zrobić, po prostu utwórz regułę routingu Istio, która będzie szukać @foocorporation.com w identyfikatorze użytkownika i odpowiednio przekierowywać. Dla pozostałych użytkowników nic się nie zmieni. W międzyczasie będziesz mógł spokojnie testować nową wersję serwisu. Pamiętaj, że nie musisz w ogóle angażować w to programistów.

I czy trzeba będzie za to słono zapłacić?

Zupełnie nie. Istio jest dość szybki i jest zapisany Go i generuje bardzo niewielkie koszty ogólne. Ponadto możliwa utrata produktywności online jest kompensowana przez wzrost produktywności programistów. Przynajmniej w teorii: nie zapominaj, że czas programistów jest cenny. Jeśli chodzi o koszty oprogramowania, Istio jest oprogramowaniem typu open source, więc możesz je pobrać i używać za darmo.

Opanuj to sam

Zespół Red Hat Developer Experience opracował dogłębną wiedzę praktyczną руководство przez Istio (w języku angielskim). Działa na systemach Linux, MacOS i Windows, a kod jest dostępny w Javie i Node.js.

10 interaktywnych lekcji na Istio

Blok 1 - Dla początkujących

Wprowadzenie do Istio
30 minutowych opcjach
Zapoznajmy się z Service Mesh, dowiedzmy się jak zainstalować Istio w klastrze OpenShift Kubernetes.
Zacząć

Wdrażanie mikroserwisów w Istio
30 minutowych opcjach
Używamy Istio do wdrożenia trzech mikrousług z Spring Boot i Vert.x.
Zacząć

Blok 2 – poziom średniozaawansowany

Monitorowanie i śledzenie w Istio
60 minutowych opcjach
Przyjrzymy się wbudowanym narzędziom monitorującym Istio, metrykom niestandardowym i OpenTracing za pośrednictwem Prometheus i Grafana.
Zacząć

Proste routing w Istio
60 minutowych opcjach
Dowiedz się, jak zarządzać routingiem w Istio za pomocą prostych reguł.
Zacząć

Zaawansowane reguły routingu
60 minutowych opcjach
Przyjrzyjmy się inteligentnemu routingowi, kontroli dostępu, równoważeniu obciążenia i ograniczaniu szybkości w Istio.
Zacząć

Blok 3 – użytkownik zaawansowany

Błąd wtrysku w Istio
60 minutowych opcjach
Badamy scenariusze obsługi awarii w aplikacjach rozproszonych, tworzenia błędów HTTP i opóźnień w sieci oraz uczymy się wykorzystywać inżynierię chaosu do przywracania środowiska.
Zacząć

Wyłącznik automatyczny w Istio
30 minutowych opcjach
Instalujemy Siege dla witryn testujących obciążenie i uczymy się, jak zapewnić odporność na błędy backendu za pomocą powtórek, wyłącznika automatycznego i wyrzucania basenu.
Zacząć

Wyjście i Istio
10 minutowych opcjach
Trasy Egress wykorzystujemy do tworzenia reguł interakcji usług wewnętrznych z zewnętrznymi API i usługami.
Zacząć

Istio i Kiali
15 minutowych opcjach
Naucz się korzystać z Kiali, aby uzyskać przegląd siatki usług oraz eksplorować żądania i przepływy danych.
Zacząć

Wzajemny TLS w Istio
15 minutowych opcjach
Tworzymy Istio Gateway i VirtualService, następnie szczegółowo badamy wzajemny TLS (mTLS) i jego ustawienia.
Zacząć

Blok 3.1 — Głębokie nurkowanie: siatka usług Istio dla mikrousług

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

  • Co to jest siatka usług?
  • System Istio i jego rola w architekturze mikroserwisowej.
  • Używanie Istio do rozwiązywania następujących problemów:
    • Tolerancja błędów;
    • Rozgromienie;
    • Testowanie chaosu;
    • Bezpieczeństwo;
    • Zbieranie telemetrii przy użyciu śladów, metryk i Grafany.

Aby pobrać książkę

Seria artykułów na temat siatek usługowych i Istio

Spróbuj sam

Ta seria postów nie ma na celu zapewnienia głębokiego zanurzenia się w świecie Istio. Chcemy tylko przedstawić Ci tę koncepcję i być może zainspirować Cię do samodzielnego wypróbowania Istio. Jest to całkowicie bezpłatne, a Red Hat zapewnia wszystkie narzędzia potrzebne do rozpoczęcia pracy z OpenShift, Kubernetes, kontenerami Linux i Istio, w tym: Platforma kontenerowa OpenShift dla programistów Red Hat, nasz przewodnik po Istio i inne zasoby na naszej stronie mikrostrona w Service Mesh. Nie zwlekaj, zacznij już dziś!

Reguły routingu Istio: kieruj zgłoszenia serwisowe tam, gdzie powinny się udać

otwarta zmiana и Kubernetes wykonać świetną robotę, adresując mikrousługi kierowane do wymaganych zasobników. To jeden z powodów istnienia Kubernetesa – routing i równoważenie obciążenia. Ale co, jeśli potrzebujesz bardziej subtelnego i wyrafinowanego routingu? Na przykład, aby jednocześnie korzystać z dwóch wersji mikroserwisu. W jaki sposób zasady tras Istio mogą tu pomóc?

Reguły wyznaczania tras to zasady, które faktycznie determinują wybór trasy. Niezależnie od poziomu złożoności systemu ogólna zasada działania tych reguł pozostaje prosta: żądania są kierowane w oparciu o określone parametry i wartości nagłówka HTTP.
Spójrzmy na przykłady:

Domyślnie Kubernetes: trywialne „50/50”

W naszym przykładzie pokażemy jak jednocześnie korzystać z dwóch wersji mikroserwisu w OpenShift, nazwijmy je v1 i v2. Każda wersja działa we własnym zasobniku Kubernetes i domyślnie obsługuje równomiernie zrównoważony routing okrężny. Każdy pod otrzymuje część żądań na podstawie liczby jego instancji mikrousług, innymi słowy replik. Istio umożliwia ręczną zmianę tego salda.

Załóżmy, że wdrożyliśmy dwie wersje naszej usługi rekomendacji w OpenShift, rekomendacja-v1 i rekomendacja-v2.
Na ryc. Rysunek 1 pokazuje, że gdy każda usługa jest reprezentowana w jednej instancji, żądania występują równomiernie między nimi: 1-2-1-2-... Tak domyślnie działa routing Kubernetes:

Seria postów na temat Istio Service Mesh

Rozkład ważony pomiędzy wersjami

Na ryc. Rysunek 2 pokazuje, co się stanie, jeśli zwiększysz liczbę replik usługi v2 z jednej do dwóch (odbywa się to za pomocą polecenia ocscale —replicas=2 wdrożenie/rekomendacja-v2). Jak widać, żądania pomiędzy v1 i v2 są teraz podzielone w stosunku jeden do trzech: 1-2-2-1-2-2-…:

Seria postów na temat Istio Service Mesh

Zignoruj ​​wersję używającą Istio

Istio ułatwia zmianę dystrybucji żądań w taki sposób, w jaki potrzebujemy. Na przykład wyślij cały ruch tylko do rekomendacji-v1, używając następującego pliku YAML Istio:

Seria postów na temat Istio Service Mesh

Tutaj musisz zwrócić na to uwagę: strąki są wybierane zgodnie z etykietami. W naszym przykładzie użyto etykiety v1. Parametr „waga: 100” oznacza, że ​​100% ruchu będzie kierowane do wszystkich Service Podów oznaczonych etykietą v1.

Dystrybucja dyrektyw pomiędzy wersjami (wdrożenie Canary)

Następnie za pomocą parametru wagi możesz skierować ruch do obu podów, ignorując liczbę uruchomionych instancji mikroserwisów w każdym z nich. Przykładowo tutaj kierujemy 90% ruchu do v1 i 10% do v2:

Seria postów na temat Istio Service Mesh

Oddzielny routing dla użytkowników mobilnych

Podsumowując, pokażemy, jak wymusić kierowanie ruchu użytkowników mobilnych do usługi v2, a wszystkich pozostałych do v1. W tym celu używamy wyrażeń regularnych do analizy wartości klienta użytkownika w nagłówku żądania:

Seria postów na temat Istio Service Mesh

Teraz twoja kolej

Przykład z wyrażeniami regularnymi do analizowania nagłówków powinien zmotywować Cię do znalezienia własnego zastosowania reguł routingu Istio. Co więcej, możliwości tutaj są dość szerokie, ponieważ wartości nagłówka można utworzyć w kodzie źródłowym aplikacji.

I pamiętaj, że Ops, a nie Dev

Wszystko, co pokazaliśmy w powyższych przykładach, odbywa się bez najmniejszych zmian w kodzie źródłowym, no cóż, z wyjątkiem tych przypadków, gdy konieczne jest wygenerowanie specjalnych nagłówków żądań. Istio przyda się zarówno programistom, którzy będą mogli go np. wykorzystać na etapie testów, jak i specjalistom od obsługi systemów informatycznych, dla których bardzo pomoże w produkcji.

Powtórzmy więc motyw przewodni tego cyklu postów: nie musisz nic zmieniać w swoim kodzie. Nie ma potrzeby tworzenia nowych obrazów ani uruchamiania nowych kontenerów. Wszystko to jest realizowane poza kodem.

Użyj swojej wyobraźni

Wyobraź sobie tylko możliwości analizy nagłówków za pomocą wyrażeń regularnych. Chcesz przekierować swojego największego klienta do specjalnej wersji swojego mikroserwisy? Łatwo! Potrzebujesz osobnej wersji dla przeglądarki Chrome? Bez problemu! Możesz kierować ruchem według niemal dowolnej charakterystyki.

Spróbuj sam

Czytanie o Istio, Kubernetesie i OpenShift to jedno, ale dlaczego nie dotknąć wszystkiego samemu? Zespół Program dla programistów Red Hat przygotował szczegółowy przewodnik (w języku angielskim), który pomoże Ci opanować te technologie tak szybko, jak to możliwe. Podręcznik jest również w 100% open source, więc jest opublikowany w domenie publicznej. Plik działa na systemach macOS, Linux i Windows, a kod źródłowy dostępny jest w wersjach Java oraz node.js (wersje w innych językach już wkrótce). Po prostu otwórz odpowiednie repozytorium git w swojej przeglądarce Wersja demonstracyjna Red Hat dla programistów.

W kolejnym poście: pięknie rozpracowujemy problemy

Dzisiaj widziałeś, co potrafią reguły routingu Istio. Teraz wyobraź sobie to samo, ale tylko w odniesieniu do obsługi błędów. Właśnie o tym porozmawiamy w następnym poście.

Źródło: www.habr.com

Dodaj komentarz