Istio jako AKS addon je jednoduše nainstalovatelné bez přistupování na Kubernetes API (jako addon to umíte nahodit pěkně přes Azure API při vytváření AKS třeba Terraformem a to i do privátního clusteru bez public IP), automaticky se škáluje a Microsoft v rámci AKS release testuje jeho funkčnost, kompatibilitu se službami jako je Azure Grafana (vizualizace), Azure Monitor for Prometheus (metriky) a Application Insights (tracing). Umožňuje snadný upgrade a AKS je v rámci addon také přizpůsobeno (přiškáluje se například coredns). Na addon jako takový máte podporu (až to bude v GA) - ne tedy na Istio samotné, ale na jeho integraci s AKS ano. To zní dobře, ne? Ale má mě to zajímat?
Nejprve musím připomenout, co už na tomto blogu zaznělo několikrát - chytré trubky, tedy service mesh, většinou nepotřebujete a tak často jeho přidaná komplexita má dopad spíše negativní.
Co není nebo by neměla být role service mesh:
Co může být jeho role, ale existují alternativy s menší komplexitou:
Kde to smysl za mě dává nebo si nejsem jist, ale dávat by mohlo:
Tohle je zajímavé téma. Největší potíž je, že historicky Istio bylo hodně (a to opravdu hodně) drženo Googlem a to i z pohledu governance. Takový ten styl, že je to marketingově strašně otevřené a blabla, jenže klíčky od toho má jeden nebo dva vendoři a ti řídí směřování celého projektu, přijímání změn, oprav a vylepšení. V té době Microsoft musel řešit podporu service mesh v AKS, protože kolem toho bylo hodně povídání (všichni to strašně chtěli a málokdo věděl proč). Co s tím? Použít v té době Istio v produktu byl problém - svou budoucnost dáváte do rukou klíčového konkurenta nebo si to forknete a je to obtížně udržitelné. Další varianta bylo Linkerd, které je skvělé, ale fakt, že má zgruntu napsanou vlastní reverse proxy má kromě výhod (výkon, bezpečnost) i nevýhody (podpora L7 funkcí, Wokna). Consul byl zas hodně spjatý s Hashicorpem, to by moc nepomohlo. Proto Microsoft založil projekt Open Service Mesh, který využívá Envoy proxy (= podpora L7 funkcí, telemetrie, trasování, Windows) a nad tím staví orchestraci. Ten je hned od začátku pod governance CNCF, není tedy nijak cinknutý. OSM je jednoduchý, ale využívá funkčně bohatou Envoy. Je tedy podstatně odlehčenější, než Istio (míň věcí se může pokazit, má dobrý výkon) a při tom funkčně bohatší, než Linkerd (které exceluje v lehkosti a výkonu, ale chybí mu dost L7 funkcí).
Google se hodně soustředil na aplikační platformu nad Kubernetem v podobě KNative, která měla Istio jake dependenci. Microsoft měl jiný přístup - DAPR bez dalších dependencí, aplikační platforma s 21000 hvězdičkami na GitHubu (vs. 5000 u KNative) a governance v rámci CNCF v kombinaci s KEDA projektem pro škálování (také CNCF). Podle spekulací na Internetu produkťáci v Googlu měli pocit křivdy, že Kubernetes, který vznikl tam, jim nepřinesl tolik kontroly, jak by mohl, pokud by nebyl tak otevřený a tak si Istio a KNative drželi. Nicméně v březnu 2022 Google nakonec Istio i KNative přihlásil do CNCF - což je moc dobře.
Komunita kolem Open Service Mesh, kde je samozřejmě velké množství lidí Microsoftu, oznámila, že se přesouvá k práci na projektu Istio. Ve středním horizontu to bude tedy optimální volba i pro AKS, ale pokud potřebujete něco dnes, OSM funguje výborně a je v GA.
Sidecar je overhead - filtrovat provoz umí Network Policy, dělat vizibilitu do komunikace zvládne i Cilium přes eBPF, balancing se děje v iptables nebo ipvs nebo přes eBPF apod. Istio přišlo s konceptem ambient mesh, který posouvá celou technologii service mesh směrem, který se mi moc líbí. Základní věci jako je TCP routing, mTLS, filtrování, metriky a logy vyřeší přímo node přes eBPF a to včetně bezpečných tunelů (ztunnel) mezi Pody nebo k L7 službám. Pokud potřebujete něco pokročilého, třeba HTTP routing a balancing, circuit breaking, fault injection, HTTP metriky nebo distributed tracing, to vám zajistí L7 komponenta. Ta už není sidecar u každého kontejneru, ale je to služba vložená tam, kde chcete/potřebujete a je sdílená pro nějakou doménu (typicky budete chtít mít separátní L7 zpracovatelské nody pro různé typy aplikací, třeba namespace - z bezpečnostních důvodů). Představte si potenciální další implikace, které to může mít (a neříkám, že to je dnes k dispozici, jen, že to je možnost, která se mi líbí):
Když to shrnu. Aktuálně myslím, že většina zákazníků co znám service mesh nepotřebuje a spíše si uškodí nebo jim to sebere čas, který by mohli věnovat směrování aplikací k asynchronnímu chování a API managementu. Pokud nějaký v AKS potřebujete, pořád bych preferoval Open Service Mesh kvůli jednoduchosti a podpoře. Nicméně service mesh ještě neřekl poslední slovo a schopnost být efektivnější a přitom nabízet ještě pokročilejší L7 služby v dedikovaných zpracovatelských prostředcích mi nezní špatně. O tomhle operátoři mluvili před 10 lety a různé SDN implementace typu Cisco ACI nebo VMWare NSX to zuřivě slibovaly, ale realita dnešního světa v cloudu je, že tam selhaly na celé čáře. Takže další iterace a tentokrát od hráčů co nemají na noze kouli své historie? Třebas, ale pro dnešek za mě - instrumentujte aplikace na monitoring a tracing a neřešte service mesh. Pokud potřebujete něco řešit ihned, šel bych asi stále do OSM (než bude Istio addon v GA), ale nabídka Istio v AKS je za mě super a tam kde potřebuji funkce navíc (třeba circuit breaker), bomba. Každopádně to sledujte - ambient mesh ukazuje, že se to může otočit trochu jiným a za mě užitečnějším směrem.