Odkryj magię architektury service mesh i zobacz, jak wzmacnia twoje rozproszone systemy.
Zanurz się w Istio, supergwiazdę service mesh, i dowiedz się, jak perfekcyjnie orkiestruje twój klaster Kubernetes.
Aplikacje monolityczne ewoluowały w kierunku mniejszych, niezależnych usług. Ten trend zyskał ogromną popularność wraz z chmurą obliczeniową i architekturą mikroserwisów. Narzędzia takie jak Docker i Kubernetes przyspieszyły ten proces.
Mikroserwisy na platformach takich jak Kubernetes oferują wiele korzyści, ale wprowadzają również złożoności. Zarządzanie komunikacją między tymi rozproszonymi usługami wymaga starannego rozważenia odkrywania, trasowania, ponownych prób i przełączania awaryjnego.
Dodatkowe wyzwania obejmują bezpieczeństwo i widoczność.
Budowanie zdolności komunikacyjnych w każdej usłudze zajmuje dużo czasu, zwłaszcza gdy krajobraz usług się rozszerza. Tutaj błyszczy service mesh. Zarządza całą komunikacją między usługami w rozproszonym systemie.
Service mesh osiąga to za pomocą proxy sieciowych. Żądania między usługami są kierowane przez te proxy, które znajdują się poza usługami w warstwie infrastruktury:
Te proxy tworzą sieć mesh dla usług, stąd nazwa. Service mesh kontroluje każdy aspekt komunikacji między usługami, umożliwiając mu rozwiązanie ośmiu błędów związanych z rozproszonym przetwarzaniem.
Uwolnij pełny potencjał swoich usług z service mesh! Odkryj, jak to magiczne narzędzie może przekształcić krajobraz twoich aplikacji.
Rozłóżmy tę magię na trzy kluczowe umiejętności: czary ruchu, żelazne bezpieczeństwo i krystalicznie czysta widoczność.
Service mesh to twój ostateczny kierownik ruchu, precyzyjnie kierujący interakcjami usług. Ciesz się dynamicznym trasowaniem, inteligentnym odkrywaniem i oszałamiającymi funkcjami, takimi jak cieniowanie ruchu i podział dla bezproblemowych wdrożeń canary oraz testów A/B.
Pożegnaj się z niepewnymi połączeniami! Service mesh owija twoje usługi w przytulny koc niezawodności, oferując ponowne próby, limity czasowe, ograniczenia przepustowości i bezpieczniki, chroniąc twoje aplikacje przed chaosem.
Chroń swoje usługi nieprzeniknioną fortecą! Service mesh szyfruje wszystkie komunikacje za pomocą solidnego MTLS, weryfikuje tożsamości za pomocą ścisłej autoryzacji i egzekwuje zasady dostępu dla maksymalnej ochrony.
Odkryj ukryte moce bezpieczeństwa! Izoluj usługi, śledź każdy ruch do audytów i twórz bezpieczny obszar wokół swojej aplikacji dzięki service mesh.
Nawiguj po złożonościach swojego rozproszonego systemu z łatwością! Service mesh zapewnia niezrównaną widoczność wewnętrznych działań twojej aplikacji dzięki rozproszonemu śledzeniu.
Odkryj cenne spostrzeżenia dzięki bogactwu metryk, logów i danych wydajnościowych. Optymalizuj swoje usługi i rozwiązuj problemy jak profesjonalista z service mesh.
Istio, open-source'owy service mesh stworzony przez IBM, Google i Lyft, niewidzialnie wzmacnia rozproszone aplikacje za pomocą zarządzania ruchem, bezpieczeństwa i analiz wydajności.
Elastycznie wdrażany lokalnie, w chmurze, w Kubernetes lub na maszynach wirtualnych, Istio świeci w mikroserwisach na Kubernetes. Choć jest platformowo agnostyczny, jest naturalnie dopasowany do środowisk kontenerowych.
U podstaw, Istio wdraża proxy Envoy jako sidecary obok każdej mikroserwisu:
Ta sieć proxy tworzy płaszczyznę danych Istio, orkiestrującą przez płaszczyznę kontrolną:
Płaszczyzna kontrolna, mózg Istio, wzmacnia proxy Envoy odkrywaniem, konfiguracją i zarządzaniem certyfikatami.
Uwolnij potencjał Istio z mnóstwem ze sobą powiązanych mikroserwisów, gdzie proxy sidecar tworzą mocną infrastrukturę service mesh:
Elastyczność Istio błyszczy dzięki bezproblemowej integracji z zewnętrznymi systemami logowania, telemetrii i polityk.
Architektura Istio to dynamiczny duet: płaszczyzna danych i płaszczyzna kontrolna. Razem orchestrują magię za możliwościami Istio. Zanurzmy się w kluczowe komponenty napędzające tę wyjątkową platformę.
Przygotuj się na odkrycie złożonych szczegółów kluczowych komponentów Istio.
Płaszczyzna danych Istio to w zasadzie wzmocniona wersja proxy Envoy. Ten open-source'owy cud radzi sobie z zawirowaniami sieciowymi, uwalniając aplikacje, aby mogły skupić się na swoim podstawowym biznesie. Aplikacje wchodzą w interakcję w sposób płynny, nieświadome złożonej infrastruktury sieciowej.
U podstaw, Envoy to czarodziej sieci działający na warstwach 3 i 4 modelu OSI. Zręcznie zarządza połączeniami za pomocą łańcucha adaptacyjnych filtrów sieciowych. Co więcej, filtr warstwy L7 Envoy umożliwia mu z łatwością obsługiwać ruch HTTP. A to nie wszystko - doskonale radzi sobie z protokołami HTTP/2 i gRPC.
Wiele z wyróżniających cech Istio to w rzeczywistości supermoce odziedziczone po wbudowanych możliwościach Envoy:
Prawdziwy potencjał Envoy ujawnia się, gdy jest połączony z Istio. Jego rozszerzalność, wspierana przez WebAssembly, to rewolucja w egzekwowaniu polityk i telemetrii. Ponadto, API sandbox Proxy-Wasm Istio otwiera drzwi do jeszcze większych dostosowań Envoy.
Poznaj istiod, dyrygenta orkiestry płaszczyzny kontrolnej Istio. Ten maestro przekształca wysokopoziomowe zasady trasowania i dyrektywy zarządzania ruchem w konfiguracje przyjazne dla Envoy, płynnie rozdzielając je do sidecarów.
Pamiętasz wcześniejszą architekturę Istio z jej indywidualnymi komponentami? Aby uprościć sprawy, te komponenty zostały połączone w zjednoczony istiod. Ale nie obawiaj się, podstawowe funkcje pozostają nietknięte.
U jego rdzenia istiod wykorzystuje ten sam kod i API, co jego poprzednicy. Pilot, na przykład, nadal jest dyrygentem odkrywania usług, tłumacząc szczegóły specyficzne dla platformy na uniwersalny język zrozumiały przez sidecary. Ta elastyczność pozwala Istio harmonizować z różnorodnymi środowiskami, takimi jak Kubernetes i maszyny wirtualne.
Istiod zarządza również bezpieczeństwem, ustanawiając solidną autoryzację między usługami oraz autoryzację użytkowników końcowych za pomocą wbudowanego systemu zarządzania tożsamościami i poświadczeniami. Łatwo egzekwuj granularne polityki bezpieczeństwa na podstawie tożsamości usługi. Co więcej, istiod działa jako zaufany urząd certyfikacji (CA), wydając certyfikaty, aby zabezpieczyć komunikację między usługami za pomocą mutual TLS (MTLS).
Zbadaliśmy typowe funkcje service mesh i rozebraliśmy architekturę oraz kluczowe komponenty Istio. Teraz odkryjmy, jak Istio dostarcza te funkcje za pomocą swoich kluczowych komponentów.
Ponownie odwiedzimy te same kategorie funkcji, które badaliśmy wcześniej.
API zarządzania ruchem Istio oferuje precyzyjną kontrolę nad ruchem w sieci mesh. Dostosuj konfiguracje ruchu, korzystając z tych API i definiując zasoby API za pomocą niestandardowych definicji zasobów Kubernetes (CRD). Kluczowe zasoby API do trasowania ruchu to wirtualne usługi i zasady docelowe:
Wirtualna usługa określa, jak żądania są kierowane do usługi w sieci mesh Istio. Składa się z jednej lub więcej zasad trasowania ocenianych sekwencyjnie. Po trasowaniu wirtualnej usługi stosowane są zasady docelowe, aby kontrolować ruch do docelowego celu, na przykład grupując instancje usługi według wersji.
Fundamentem bezpieczeństwa Istio są silne tożsamości dla każdej usługi. Agenci Istio obok każdego proxy Envoy współpracują z istiod, aby automatyzować rotację kluczy i certyfikatów:
Istio obsługuje dwa rodzaje autoryzacji: autoryzację peer i autoryzację żądań. Autoryzacja peer zabezpiecza komunikację między usługami za pomocą rozwiązania mutual TLS Istio. Autoryzacja żądań obsługuje autoryzację użytkowników końcowych poprzez walidację JSON Web Token (JWT) za pomocą dostawcy autoryzacji lub dostawcy OpenID Connect (OIDC).
Istio egzekwuje kontrolę dostępu do usług poprzez stosowanie polityk autoryzacji. Polityki te regulują ruch przychodzący w proxy Envoy, pozwalając na kontrolę dostępu na poziomie sieci mesh, przestrzeni nazw i usług.
Istio generuje kompleksową telemetrię, w tym metryki, rozproszone ślady i logi dostępu dla całej komunikacji usług w sieci mesh. Ta telemetria obejmuje metryki na poziomie proxy, orientacyjne dla usługi oraz metryki płaszczyzny kontrolnej.
Wcześniej, Mixer był centralnym komponentem w architekturze telemetrii Istio. Jednak Telemetria v2 zastępuje funkcje Miksera wtyczkami proxy Envoy:
Istio tworzy rozproszone ślady za pomocą proxy Envoy i obsługuje różne systemy śledzenia, takie jak Zipkin, Jaeger, Lightstep i Datadog. Częstotliwość generowania śladów można dostosować. Ponadto Istio generuje logi dostępu dla ruchu usług w konfigurowalnych formatach.
Wystarczająco tła, zobaczmy Istio w akcji! Zainstalujemy Istio na klastrze Kubernetes i użyjemy prostej aplikacji mikroserwisowej, aby pokazać jego moc.
Istio instaluje się na różne sposoby, ale najłatwiej jest pobrać i rozpakować najnowszą wersję dla swojego systemu operacyjnego (np. Windows). Wyodrębniony pakiet zawiera klienta istioctl w folderze bin. Użyj istioctl, aby zainstalować Istio na swoim klastrze Kubernetes:
istioctl install --set profile=demo -y
To instaluje komponenty Istio na domyślnym klastrze Kubernetes za pomocą profilu demo. Zamień 'demo' na inny profil specyficzny dla dostawcy, jeśli to konieczne.
Następnie powiedz Istio, aby automatycznie wstrzykiwało proxy sidecar Envoy podczas wdrażania aplikacji na tym klastrze Kubernetes:
kubectl label namespace default istio-injection=enabled
Używamy tutaj kubectl, zakładając, że masz klaster Kubernetes (np. Minikube) i skonfigurowane CLI Kubernetes kubectl.
Wyobraź sobie prostą aplikację do zamawiania online na tę demonstrację. Składa się z trzech mikroserwisów, które współpracują, aby realizować zamówienia:
Nie będziemy zagłębiać się w szczegóły mikroserwisów, ale są łatwe do stworzenia z Spring Boot i REST API. Kluczowe jest, aby stworzyć obrazy Docker dla tych mikroserwisów, aby wdrożyć je w Kubernetes.
Wdrażanie zwinnych obciążeń na klastrach Kubernetes, takich jak Minikube, jest proste. Użyj zasobów Deployment i Service, aby zadeklarować i uzyskać dostęp do obciążenia. Zwykle definiuje się je w pliku YAML:
apiVersion: apps/v1beta1
kind: Deployment
metadata:
name: order-service
namespace: default
spec:
replicas: 1
template:
metadata:
labels:
app: order-service
version: v1
spec:
containers:
- name: order-service
image: kchandrakant/order-service:v1
resources:
requests:
cpu: 0.1
memory: 200
---
apiVersion: v1
kind: Service
metadata:
name: order-service
spec:
ports:
- port: 80
targetPort: 80
protocol: TCP
name: http
selector:
app: order-service
To podstawowa definicja Deployment i Service dla usługi zamówienia. Stwórz podobne pliki YAML dla usługi magazynowej i usługi wysyłkowej.
Wdrożenie tych zasobów za pomocą kubectl jest proste:
kubectl apply -f booking-service.yaml -f inventory-service.yaml -f shipping-service.yaml
Ponieważ włączyliśmy automatyczne wstrzykiwanie proxy sidecar Envoy dla domyślnej przestrzeni nazw, wszystko jest obsługiwane. Lub ręcznie wstrzykuj proxy sidecar Envoy za pomocą polecenia kube-inject istioctl.
Istio głównie obsługuje ruch w sieci mesh. Domyślnie ruch z zewnątrz lub do zewnątrz z sieci mesh jest zablokowany. Istio używa bram, aby zarządzać ruchem przychodzącym i wychodzącym w sieci mesh, dając ci precyzyjną kontrolę nad tym, co wchodzi lub wychodzi. Istio oferuje wstępnie skonfigurowane wdrożenia proxy bram: istio-ingressgateway i istio-egressgateway.
Stwórz Bramę i Wirtualną Usługę dla swojej aplikacji:
apiVersion: networking.istio.io/v1alpha3
kind: Gateway
metadata:
name: booking-gateway
spec:
selector:
istio: ingressgateway
servers:
- port:
number: 80
name: http
protocol: HTTP
hosts:
- "*"
---
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: booking
spec:
hosts:
- "*"
gateways:
- booking-gateway
http:
- match:
- uri:
prefix: /api/v1/booking
route:
- destination:
host: booking-service
port:
number: 8080
Używamy tutaj domyślnego kontrolera bram Istio. Ponadto zdefiniowaliśmy wirtualną usługę, aby kierować żądania do usługi rezerwacji.
Możesz również zdefiniować bramę wychodzącą dla ruchu wychodzącego z sieci mesh.
Wdrożyliśmy prostą aplikację w Kubernetes z Istio. Odkryjmy potężne funkcje Istio i zobaczmy, jak mogą wzbogacić naszą aplikację.
Wyobraź sobie wdrażanie wielu wersji mikroserwisu, takiego jak usługa wysyłkowa. Chcesz stopniowo wprowadzać nowe funkcje, nie wpływając na wszystkich użytkowników. Trasowanie żądań pozwala na to, kierując część ruchu do najnowszej wersji.
Wykorzystaj zasady trasowania wirtualnej usługi, aby to osiągnąć.
apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
name: shipping-service
spec:
hosts:
- shipping-service
http:
- route:
- destination:
host: shipping-service
subset: v1
weight: 90
- destination:
host: shipping-service
subset: v2
weight: 10
---
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: shipping-service
spec:
host: shipping-service
subsets:
- name: v1
labels:
version: v1
- name: v2
labels:
version: v2
Zasady trasowania mogą również filtrować ruch na podstawie nagłówków lub innych atrybutów. Pole docelowe określa docelową usługę dla pasujących żądań.
Zapobiegaj awariom kaskadowym dzięki przełącznikom obwodów. Ten wzorzec wykrywa błędy i tymczasowo zatrzymuje ruch do usług, które zawodzą, chroniąc ogólną zdrowotność twojej aplikacji.
Zasady docelowe Istio pozwalają skonfigurować zachowanie przełamywania obwodów dla usług, takich jak usługa magazynowa.
apiVersion: networking.istio.io/v1alpha3
kind: DestinationRule
metadata:
name: inventory-service
spec:
host: inventory-service
trafficPolicy:
connectionPool:
tcp:
maxConnections: 1
http:
http1MaxPendingRequests: 1
maxRequestsPerConnection: 1
outlierDetection:
consecutive5xxErrors: 1
interval: 1s
baseEjectionTime: 3m
maxEjectionPercent: 100
Ograniczając maksymalne połączenia, oczekujące żądania i żądania na połączenie, można skutecznie zarządzać ruchem i zapobiegać przeciążeniom.
Mutual TLS zapewnia bezpieczną komunikację między usługami, wymagając, aby obie strony się uwierzytelniły. Istio automatycznie włącza mutual TLS dla usług korzystających ze swoich proxy.
Chociaż Istio egzekwuje mutual TLS między proxied usługami, ruch w czystym tekście nadal może docierać do usług bez proxy. Użyj polityk PeerAuthentication, aby wymusić mutual TLS w całej sieci mesh.
apiVersion: "security.istio.io/v1beta1"
kind: "PeerAuthentication"
metadata:
name: "default"
namespace: "istio-system"
spec:
mtls:
mode: STRICT
Możesz zastosować mutual TLS na poziomie sieci mesh, przestrzeni nazw lub usługi. Polityki specyficzne dla usług mają pierwszeństwo przed ustawieniami ogólnymi dla przestrzeni nazw.
JSON Web Tokens (JWT) to standard do bezpiecznego przesyłania informacji o użytkownikach. Są powszechnie używane do autoryzacji i uwierzytelniania.
Polityka autoryzacji Istio pozwala kontrolować dostęp do usług, takich jak usługa rezerwacji, na podstawie roszczeń JWT.
apiVersion: security.istio.io/v1beta1
kind: AuthorizationPolicy
metadata:
name: require-jwt
namespace: default
spec:
selector:
matchLabels:
app: booking-service
action: ALLOW
rules:
- from:
- source:
requestPrincipals: ["[email protected]/[email protected]"]
Wymagaj ważnych JWT z konkretnymi roszczeniami dla autoryzowanego dostępu. Istio tworzy atrybut requestPrincipal z roszczeniami wydawcy i tematu JWT.
Istio upraszcza zarządzanie typowymi wyzwaniami w architekturach mikroserwisów. Jednak jego złożoność może zwiększać obciążenie wdrożeń. Jak każde narzędzie, Istio nie jest magicznym rozwiązaniem i wymaga starannego rozważenia.
Chociaż service meshes oferują korzyści, rozważ te wady:
Service meshes oferują korzyści, ale staranna ocena złożoności twojej aplikacji jest kluczowa. Zważ zalety wobec dodatkowej złożoności.
Istio to popularny service mesh wspierany przez liderów branży, ale nie jest jedyną opcją. Oto krótki przegląd Linkerd i Consul.
Linkerd to native Kubernetes, open-source'owy service mesh, który zyskuje popularność. Jest to projekt inkubacyjny CNCF i działa podobnie do Istio, wykorzystując proxy TCP. Mikropojazd Linkerd oparty na Rust to Linkerd-proxy.
Linkerd jest na ogół prostszy niż Istio z powodu swojego skupienia na Kubernetes. Niemniej jednak jego zestaw funkcji jest bliski zestawowi Istio, a jego podstawowa architektura jest podobna. Linkerd składa się z interfejsu użytkownika, płaszczyzny danych i płaszczyzny kontrolnej.
Consul to open-source'owy service mesh od HashiCorp, który integruje się z innymi narzędziami infrastruktury HashiCorp. Płaszczyzna danych Consul obsługuje zarówno modele proxy, jak i natywne integracji. Oferuje wbudowane proxy, ale może także działać z Envoy.
Consul działa poza Kubernetes, obsługując platformy takie jak Nomad. Używa agentów na każdym węźle do kontroli stanu i komunikuje się z serwerami Consul w celu przechowywania danych i replikacji. Oferując standardowe funkcje service mesh, Consul jest bardziej skomplikowany w wdrożeniu i zarządzaniu.
Ten poradnik badał podstawy architektury service mesh i potężnych możliwości Istio. Zgłębiliśmy podstawową strukturę Istio, komponenty i praktyczne zastosowania. Na koniec powinieneś mieć solidne zrozumienie, jak zainstalować i wykorzystać Istio w typowych scenariuszach.
Opinie klientów
Poniższe recenzje zostały zebrane na naszej stronie.
Masz pytania? Znajdź odpowiedzi poniżej!
Nasze najczęściej zadawane pytania