Pregled i usporedba Ingress kontrolera za Kubernetes

Pregled i usporedba Ingress kontrolera za Kubernetes

Kada pokrećete Kubernetes klaster za određenu aplikaciju, morate razumjeti što sama aplikacija, posao i programeri predstavljaju ovom resursu. S ovim informacijama možete krenuti u donošenje arhitektonske odluke, a posebno u odabir konkretnog Ingress kontrolera, kojih danas već ima velik broj. Kako bismo stekli osnovnu ideju o dostupnim opcijama, a da ne morate prolaziti kroz puno članaka/dokumentacije itd., pripremili smo ovaj pregled, uključujući glavne (spremne za proizvodnju) Ingress kontrolere.

Nadamo se da će pomoći kolegama u odabiru arhitektonskog rješenja - barem će postati polazište za dobivanje detaljnijih informacija i praktičnih eksperimenata. Prethodno smo proučavali druge slične materijale na mreži i, začudo, nismo pronašli niti jednu više ili manje cjelovitu, i što je najvažnije - strukturiranu - recenziju. Pa popunimo tu prazninu!

kriteriji

U načelu, da biste napravili usporedbu i dobili bilo kakav koristan rezultat, morate razumjeti ne samo predmetno područje, već i imati određeni popis kriterija koji će postaviti vektor istraživanja. Bez pretenzije da analiziramo sve moguće slučajeve korištenja Ingress / Kubernetes, pokušali smo istaknuti najopćenitije zahtjeve za kontrolere - budite spremni da ćete u svakom slučaju morati zasebno proučavati sve svoje specifičnosti i pojedinosti.

No, počet ću s karakteristikama koje su postale toliko poznate da su implementirane u svim rješenjima i ne uzimaju se u obzir:

  • dinamičko otkrivanje usluga (service discovery);
  • SSL završetak;
  • rad s websocketima.

Sada za usporedbu:

Podržani protokoli

Jedan od temeljnih kriterija odabira. Vaš softver možda neće raditi na standardnom HTTP-u ili može zahtijevati rad na više protokola odjednom. Ako je vaš slučaj nestandardan, svakako uzmite u obzir ovaj faktor kako kasnije ne biste morali ponovno konfigurirati klaster. Za sve kontrolere popis podržanih protokola varira.

softver u srži

Postoji nekoliko varijacija aplikacija na kojima se temelji kontroler. Popularni su nginx, traefik, haproxy, envoy. U općenitom slučaju, to možda neće imati veliki učinak na način na koji se promet prima i prenosi, ali uvijek je korisno znati potencijalne nijanse i značajke onoga što je "ispod haube".

Usmjeravanje prometa

Na temelju čega je moguće donijeti odluku o usmjeravanju prometa prema pojedinom servisu? Obično su to host i put, ali postoje i dodatne mogućnosti.

Imenski prostor unutar klastera

Prostor imena (prostor imena) - mogućnost logičke podjele resursa u Kubernetesu (na primjer, na pozornici, proizvodnji itd.). Postoje Ingress kontroleri koji se moraju instalirati odvojeno u svakom prostoru imena (i tada mogu usmjeravati promet samo mahunama ovog prostora). A postoje i oni (i njihova jasna većina) koji rade globalno za cijeli klaster - u njima je promet usmjeren na bilo koji segment klastera, bez obzira na prostor imena.

Uzorci za uzvodne vode

Kako se promet usmjerava na zdrave instance aplikacije, usluge? Postoje opcije s aktivnim i pasivnim provjerama, ponovnim pokušajima, prekidačima (Za više detalja pogledajte, na primjer, članak o Istio), prilagođene zdravstvene provjere itd. Vrlo važan parametar ako imate visoke zahtjeve za dostupnošću i pravovremenim uklanjanjem neispravnih usluga iz balansiranja.

Algoritmi za balansiranje

Postoji mnogo opcija: od tradicionalnih okrugli robin do egzotike rdp-kolačić, kao i pojedinačne značajke poput ljepljive sesije.

ovjera

Koje sheme autorizacije podržava kontroler? Basic, digest, oauth, external-auth - mislim da bi te opcije trebale biti poznate. Ovo je važan kriterij ako postoji mnogo razvojnih (i/ili samo privatnih) petlji kojima se pristupa putem Ingressa.

Distribucija prometa

Podržava li upravljač tako često korištene mehanizme distribucije prometa kao što su Canary rollouts (kanarinac), A/B testiranje, zrcaljenje prometa (zrcaljenje/sjenčanje)? Ovo je stvarno bolna tema za aplikacije koje zahtijevaju točno i precizno upravljanje prometom za produktivno testiranje, otklanjanje pogrešaka proizvoda izvan mreže (ili s minimalnim gubicima), analizu prometa itd.

Plaćena pretplata

Postoji li plaćena opcija za kontroler, s naprednom funkcionalnošću i/ili tehničkom podrškom?

Grafičko korisničko sučelje (Web UI)

Postoji li GUI za upravljanje konfiguracijom kontrolera? Uglavnom za "priručnost" i/ili za one koji trebaju napraviti neke promjene u konfiguraciji Ingress'a, ali rad sa "sirovim" predlošcima je nezgodan. Može biti korisno ako programeri žele provesti eksperimente s prometom u hodu.

JWT provjera valjanosti

Prisutnost ugrađene provjere valjanosti JSON web tokena za autorizaciju i provjeru valjanosti korisnika do krajnje aplikacije.

Mogućnosti prilagodbe konfiguracije

Proširivost predloška u smislu postojanja mehanizama koji vam omogućuju dodavanje vlastitih direktiva, zastavica itd. standardnim konfiguracijskim predlošcima.

Osnovni mehanizmi zaštite od DDOS-a

Jednostavni algoritmi ograničenja brzine ili složenije opcije filtriranja prometa na temelju adresa, popisa dopuštenih, zemalja itd.

Traženje zahtjeva

Sposobnost nadziranja, praćenja i otklanjanja pogrešaka zahtjeva od Ingresses do određenih usluga/podova, a idealno i između usluga/podova.

WAF

podrška aplikacijski vatrozid.

Kontrolori

Popis kontrolora formiran je na temelju službena Kubernetes dokumentacija и ovaj stol. Neke smo od njih isključili iz pregleda zbog specifičnosti ili niske prevalencije (rani stadij razvoja). Ostalo se raspravlja u nastavku. Počnimo s općim opisom rješenja i nastavimo sa sažetom tablicom.

Ulaz iz Kubernetesa

Web stranica: github.com/kubernetes/ingress-nginx
Licenca: Apache 2.0

Ovo je službeni kontroler za Kubernetes i razvija ga zajednica. Očito iz naziva, temelji se na nginxu i nadopunjuje ga drugačiji skup Lua dodataka koji se koriste za implementaciju dodatnih značajki. Zbog popularnosti samog nginxa i njegovih minimalnih izmjena kada se koristi kao kontroler, ova opcija može biti najlakša i najlakša za konfiguraciju za prosječnog inženjera (s web iskustvom).

Ingress by NGINX Inc.

Web stranica: github.com/nginxinc/kubernetes-ingress
Licenca: Apache 2.0

Službeni proizvod nginx programera. Ima plaćenu verziju na temelju NGINX Plus. Glavna ideja je visoka razina stabilnosti, stalna kompatibilnost s prethodnim verzijama, odsutnost bilo kakvih dodatnih modula i deklarirana povećana brzina (u usporedbi sa službenim kontrolerom), postignuta zbog odbijanja Lua.

Besplatna verzija značajno je smanjena, čak iu usporedbi sa službenim kontrolerom (zbog nedostatka istih Lua modula). U isto vrijeme, plaćeni ima prilično široku dodatnu funkcionalnost: metriku u stvarnom vremenu, JWT provjeru valjanosti, aktivne zdravstvene provjere i još mnogo toga. Važna prednost u odnosu na NGINX Ingress je puna podrška za TCP/UDP promet (i u verziji za zajednicu!). minus - odsutnost značajka distribucije prometa, koja, međutim, "ima najveći prioritet za programere", ali treba vremena za implementaciju.

Kong Ingress

Web stranica: github.com/Kong/kubernetes-ingress-controller
Licenca: Apache 2.0

Proizvod koji je razvio Kong Inc. u dvije verzije: komercijalnoj i besplatnoj. Temeljen na nginxu, koji je proširen s velikim brojem Lua modula.

U početku je bio usmjeren na obradu i usmjeravanje API zahtjeva, tj. kao API Gateway, ali trenutno je postao punopravni Ingress kontroler. Glavne prednosti: mnogi dodatni moduli (uključujući one od programera trećih strana) koji se lako instaliraju i konfiguriraju i uz pomoć kojih se implementira širok raspon dodatnih značajki. Međutim, ugrađene funkcije već nude mnoge mogućnosti. Konfiguracija posla se vrši korištenjem CRD resursa.

Važna značajka proizvoda - rad unutar iste konture (umjesto cross-namespaced) je kontroverzna tema: za neke će se činiti kao nedostatak (morate proizvoditi entitete za svaku konturu), a za nekoga je to značajka ( bоVeći stupanj izolacije, kao ako je jedan kontroler pokvaren, tada je problem ograničen samo na krug).

Traefik

Web stranica: github.com/containous/traefik
Licenca: MIT

Proxy koji je izvorno stvoren za rad s usmjeravanjem zahtjeva za mikroservise i njihovo dinamičko okruženje. Stoga mnoge korisne značajke: ažuriranje konfiguracije bez ikakvog ponovnog pokretanja, podrška za veliki broj metoda balansiranja, web sučelje, prosljeđivanje metrike, podrška za razne protokole, REST API, canary izdanja i još mnogo toga. Još jedna zgodna značajka je podrška za Let's Encrypt certifikate. Nedostatak je taj što će kontroler za organiziranje visoke dostupnosti (HA) morati instalirati i povezati vlastitu KV pohranu.

HAProxy

Web stranica: github.com/jcmoraisjr/haproxy-ingress
Licenca: Apache 2.0

HAProxy je odavno poznat kao proxy i balanser prometa. Kao dio Kubernetes klastera, nudi „meko“ ažuriranje konfiguracije (bez gubitka prometa), otkrivanje usluge na temelju DNS-a, dinamičku konfiguraciju pomoću API-ja. Može biti privlačno potpuno prilagoditi konfiguracijski predložak zamjenom CM-a, kao i mogućnost korištenja funkcija Sprig knjižnice u njemu. Općenito, glavni naglasak rješenja je na velikoj brzini, njezinoj optimizaciji i učinkovitosti u potrošenim resursima. Prednost regulatora je podrška za rekordan broj različitih metoda balansiranja.

Putnik

Web stranica: github.com/appscode/voyager
Licenca: Apache 2.0

Temeljen na HAproxy kontroleru, koji je pozicioniran kao univerzalno rješenje koje podržava širok raspon značajki na velikom broju pružatelja usluga. Nudi se prilika za balansiranje prometa na L7 i L4, a balansiranje TCP L4 prometa u cjelini može se nazvati jednom od ključnih značajki rješenja.

Kontura

Web stranica: github.com/heptio/contour
Licenca: Apache 2.0

Ovo se rješenje ne temelji samo na Envoyu: razvili su ga zajednički s autorima ovog popularnog proxyja. Važna značajka je mogućnost odvajanja kontrole Ingress resursa pomoću IngressRoute CRD resursa. Za organizacije s mnogo razvojnih timova koji koriste isti klaster, to pomaže u povećanju sigurnosti rada s prometom u susjednim petljama i štiti ih od pogrešaka prilikom mijenjanja Ingress resursa.

Također nudi prošireni skup metoda balansiranja (postoji zrcaljenje zahtjeva, automatsko ponavljanje, ograničenje brzine zahtjeva i mnogo više), detaljno praćenje protoka prometa i kvarova. Možda će nekome biti značajan nedostatak nedostatak podrške za ljepljive sesije (iako posao već u tijeku).

Istio Ingress

Web stranica: istio.io/docs/tasks/traffic-management/ingress
Licenca: Apache 2.0

Sveobuhvatno servisno mesh rješenje koje nije samo Ingress kontroler koji upravlja dolaznim prometom izvana, već također kontrolira sav promet unutar klastera. Ispod haube, Envoy se koristi kao pomoćni proxy za svaku uslugu. U biti, radi se o velikom kombinatu koji “može sve”, a glavna ideja mu je maksimalna upravljivost, proširivost, sigurnost i transparentnost. Pomoću njega možete fino podesiti usmjeravanje prometa, autorizaciju pristupa između usluga, balansiranje, nadgledanje, oslobađanje kanarčića i još mnogo toga. Više o Istiu pročitajte u seriji članaka "Povratak na mikroservise s Istiom".

Ambasador

Web stranica: github.com/datawire/ambassador
Licenca: Apache 2.0

Još jedno rješenje temeljeno na Envoyu. Ima besplatnu i komercijalnu verziju. Pozicioniran je kao "potpuno izvorni za Kubernetes", što donosi odgovarajuće prednosti (tijesna integracija s metodama i entitetima K8s klastera).

tablica za usporedbu

Dakle, vrhunac članka je ova ogromna tablica:

Pregled i usporedba Ingress kontrolera za Kubernetes

Može se kliknuti za bliži prikaz, a dostupan je i u formatu Google tablice.

Da sumiramo

Svrha ovog članka je pružiti potpunije razumijevanje (međutim, nipošto iscrpno!) o tome koji izbor napraviti u vašem konkretnom slučaju. Kao i obično, svaki kontroler ima svoje prednosti i nedostatke…

Klasični Ingress iz Kubernetesa dobar je zbog svoje dostupnosti i provjerenosti, dovoljno bogatih značajki - općenito bi trebao biti "dovoljno za oči". Međutim, ako postoje povećani zahtjevi za stabilnošću, razinom značajki i razvoja, obratite pozornost na Ingress s NGINX Plus i plaćenom pretplatom. Kong ima najbogatiji set dodataka (i, sukladno tome, mogućnosti koje pružaju), au plaćenoj verziji ima ih još više. Ima dovoljno mogućnosti za rad kao API Gateway, dinamičku konfiguraciju temeljenu na CRD resursima, kao i osnovne Kubernetes usluge.

Uz povećane zahtjeve za metode balansiranja i autorizacije, pogledajte Traefik i HAProxy. Ovo su Open Source projekti, dokazani tijekom godina, vrlo stabilni i aktivno se razvijaju. Contour je vani već nekoliko godina, ali još uvijek izgleda premlado i ima samo osnovne značajke dodane povrh Envoya. Ako postoje zahtjevi za prisutnost / ugradnju WAF-a ispred aplikacije, obratite pozornost na isti Ingress iz Kubernetesa ili HAProxyja.

A najbogatiji u smislu značajki su proizvodi izgrađeni na Envoyu, posebice Istio. Čini se da je riječ o sveobuhvatnom rješenju koje "može učiniti sve", što, međutim, također znači znatno viši prag za ulazak u konfiguraciju / pokretanje / administraciju od ostalih rješenja.

Odabrali smo i još uvijek koristimo Ingress iz Kubernetesa kao standardni kontroler koji pokriva 80-90% potreba. Vrlo je pouzdan, jednostavan za konfiguriranje i proširenje. Općenito, u nedostatku posebnih zahtjeva, trebao bi odgovarati većini klastera / aplikacija. Od istih univerzalnih i relativno jednostavnih proizvoda mogu se preporučiti Traefik i HAProxy.

PS

Pročitajte i na našem blogu:

Izvor: www.habr.com

Dodajte komentar