Pregled i usporedba Ingress kontrolera za Kubernetes

Pregled i usporedba Ingress kontrolera za Kubernetes

Prilikom pokretanja Kubernetes klastera za specifičnu aplikaciju, važno je razumjeti koje zahtjeve postavlja ta aplikacija, poslovanje i programeri. Kada imate te informacije, možete pristupiti donošenju arhitektonske odluke, uključujući izbor specifičnog Ingress kontrolera, kojih već danas ima mnogo. Da biste stekli osnovno razumijevanje dostupnih opcija bez potrebe za proučavanjem mnoštva članaka/dokumentacije i slično, pripremili smo ovaj pregled, uključujući glavne (production ready) Ingress kontrolere.

Nadamo se da će ovaj pregled pomoći kolegama u odabiru arhitektonske odluke — barem će biti polazišna točka za dobivanje detaljnijih informacija i praktičnih eksperimenata. U prethodnom smo istražili slične materijale na mreži i, iznenađujuće, nismo pronašli nijedan ozbiljno kompletan, a što je još važnije — strukturiran — pregled. Dakle, popunimo ovu prazninu!

Kriteriji

Da bismo mogli provoditi usporedbe i dobiti bilo kakav korisni rezultat, potrebno je razumjeti ne samo predmetnu oblast, već i imati konkretan popis kriterija koji će odrediti smjer istraživanja. Ne pretendirajući na analizu svih mogućih slučajeva primjene Ingress/Kubernetes, nastojali smo istaknuti najčešće zahtjeve za kontrolere — budite spremni da će cijelu svoju specifičnost i detalje u svakom slučaju trebati proučavati zasebno.

Ali ću započeti s karakteristikama koje su postale toliko uobičajene da su implementirane u svim rješenjima i ne razmatraju se:

  • dinamičko otkrivanje servisa (service discovery);
  • SSL terminacija;
  • rad s websocketima.

Sada — o točkama usporedbe:

Podržani protokoli

Jedan od ključnih kriterija za odabir. Vaš softver može raditi ne samo putem standardnog HTTP protokola ili zahtevati rad s više protokola u isto vrijeme. Ako je vaš slučaj nestandardan, obavezno uzmite u obzir ovaj faktor kako ne biste kasnije morali ponovo konfigurirati klaster. Lista podržanih protokola varira među svim kontrolerima.

Softver u osnovi

Postoji nekoliko opcija aplikacija na kojima se temelji kontroler. Popularni su nginx, traefik, haproxy, envoy. U općem slučaju, to možda neće previše utjecati na to kako se prihvaća i prenosi promet, ali uvijek je korisno znati potencijalne nijanse i karakteristike onoga što je 'ispod haube'.

Usmjeravanje prometa

Na temelju čega se može odlučiti o smjeru prometa prema određenoj usluzi? Obično su to host i path, ali postoje i dodatne mogućnosti.

Prostor imena unutar klastera

Prostor imena (namespace) je mogućnost logičkog razdvajanja resursa u Kubernetesu (na primjer, na stage, production itd.). Postoje Ingress kontroleri koji se moraju instalirati odvojeno u svaki namespace (tada može usmjeravati promet samo u podove ovog prostora). A postoje i oni (i njihovo izrazito većina) koji djeluju globalno na cijeli klaster — u njima se promet usmjerava u bilo koji pod klastera, neovisno o prostoru imena.

Zdravstvene provjere za upstreamove

Na koji način se osigurava usmjeravanje prometa prema zdravim instancama aplikacije, uslugama? Postoje opcije s aktivnim i pasivnim provjerama, ponovljenim pokušajima (retries), circuit breakers (više o njima, na primjer, u članku o Istio), vlastitim implementacijama provjera stanja (custom health checks) itd. Izuzetno važan parametar ako imate visoke zahtjeve za dostupnost i pravodobno isključivanje neuspjelih usluga iz balansiranja.

Algoritmi balansiranja

Ovdje postoji mnoštvo opcija: od tradicionalnih round-robin do egzotičnih poput rdp-cookie, kao i posebne mogućnosti poput sticky sessions.

Autentifikacija

Koje sheme autorizacije podržava kontroler? Basic, digest, oauth, external-auth — mislim da bi te opcije trebale biti poznate. To je važan kriterij ako se koriste mnoge okoline za programere (i/ili jednostavno zatvorene), čiji je pristup omogućен putem Ingress-a.

Distribucija prometa

Podržava li kontroler često korištene mehanizme za distribuciju prometa, kao što su kanarinska izdanja (canary), A/B testiranje, ogledanje prometa (mirroring/shadowing)? Ovo je doista bolna tema za aplikacije koje zahtijevaju pažljivo i precizno upravljanje prometom za učinkovito testiranje, otklanjanje grešaka u proizvodima bez utjecaja (ili s minimalnim gubicima), analizu prometa itd.

Plaćena pretplata

Postoji li plaćena verzija kontrolera s proširenim funkcionalnostima i/ili tehničkom podrškom?

Grafičko sučelje (Web UI)

Ima li kakvo grafičko sučelje za upravljanje konfiguracijom kontrolera? Uglavnom za "ugodnost" i/ili za one kojima je potrebno unositi neke promjene u konfiguraciju Ingress-a, jer rad s "siromašnim" predlošcima nije praktičan. Može biti korisno ako programeri žele provoditi eksperimentiranje s prometom u hodu.

JWT-validacija

Prisutnost ugrađene provjere JSON web-tokena za autorizaciju i validaciju korisnika u krajnjoj aplikaciji.

Mogućnosti za prilagodbu konfiguracije

Proširivost predložaka u smislu prisutnosti mehanizama koji omogućuju dodavanje vlastitih direktiva, zastavica itd. u standardne konfiguracijske predloške.

Osnovni mehanizmi zaštite od DDoS-a

Jednostavni algoritmi za ograničavanje prometa ili složenije opcije filtriranja prometa na temelju adresa, bijelih lista, zemalja itd.

Praćenje zahtjeva

Mogućnosti nadzora, praćenja i debagiranja zahtjeva od Ingress-a do konkretnih usluga/podova, a idealno — i između usluga/podova također.

WAF

Podrška aplikacijski vatrozid.

Ingress kontroleri

Popis kontrolera sastavljen je na temelju službenoj dokumentaciji Kubernetes i ove tablice. Neke od njih smo isključili iz pregleda zbog specifičnosti ili male rasprostranjenosti (rano u razvoju). Preostali su razmatrani u nastavku. Počet ćemo s općim opisom rješenja i nastaviti sa sažetom tablicom.

Ingress od Kubernetes-a

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

To je službeni kontroler za Kubernetes koji razvija zajednica. Jasno iz imena, temelji se na nginx-u i dodat je raznim skupom Lua dodataka koji se koriste za implementaciju dodatnih mogućnosti. Zbog popularnosti samog nginx-a i minimalnih modifikacija na njemu kada se koristi kao kontroler, ova opcija može biti najjednostavnija i najjasnija za konfiguraciju prosječnom inženjeru (s iskustvom u web-u).

Ingress od NGINX Inc

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

Službeni proizvod разработчика nginx-a. Ima plaćenu verziju koja se temelji na NGINX PlusOsnovna ideja je visoka razina stabilnosti, stalna unazadna kompatibilnost, odsutnost bilo kakvih vanjskih modula i navedena povećana brzina (u usporedbi s službenim kontrolerom), postignuta zahvaljujući odustajanju od Lua.

Besplatna verzija je značajno ograničena, uključujući čak i u usporedbi sa službenim kontrolerom (zbog nedostatka Lua-modula). Plaćena verzija posjeduje široku dodatnu funkcionalnost: metrički podaci u stvarnom vremenu, JWT validacija, aktivni health check-ovi i drugo. Važna prednost u odnosu na NGINX Ingress je potpuna podrška za TCP/UDP promet (pa čak i u community verziji!). Mane su nedostatak funkcionalnosti za raspodjelu prometa, što, međutim, "ima maksimalni prioritet za programere", ali zahtijeva vrijeme za implementaciju.

Kong Ingress

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

Proizvod koji razvija tvrtka Kong Inc. dolazi u dva varijante: komercijalna i besplatna. Temeljen je na nginxu, čije su mogućnosti proširene velikim brojem modula na Lua.

Izvorno je bio usmjeren na obradu i usmjeravanje API zahtjeva, tj. kao API Gateway, međutim, trenutno je postao punopravni Ingress kontroler. Glavne prednosti: mnoštvo dodatnih modula (uključujući i one od trećih strana), koji se lako instaliraju i konfiguriraju, a s kojima se ostvaruje širok spektar dodatnih mogućnosti. Međutim, ugrađene funkcije već nude mnoge opcije. Konfiguracija rada obavlja se pomoću CRD resursa.

Važna značajka proizvoda je rad unutar jednog kontura (umjesto cross-namespaced) koja je kontroverzna tema: nekima će se činiti nedostatkom (potrebno je stvarati entitete za svaki kontur), dok će drugima to biti prednost (veća razina izolacije, jer ako jedan kontroler ne radi, problem je ograničen samo na jedan kontur).ogithub.com/containous/traefik

Traefik

Web stranica: Veći nivo izolacije, jer ako jedan kontroler ne radi, problem je ograničen samo na jedan kontur.
Licenca: MIT

Proxy, koji je izvorno razvijen za upravljanje usmjeravanjem zahtjeva za mikroservise i njihovo dinamičko okruženje. Odatle dolaze mnoge korisne mogućnosti: ažuriranje konfiguracije bez ponovnog pokretanja, podrška za brojne metode balansiranja, web sučelje, prosljeđivanje metrika, podrška za različite protokole, REST API, kanarinski izdaci i još mnogo toga. Ugodna značajka je i podrška za Let’s Encrypt certifikate iz kutije. Nedostatak je što će kontroleru biti potrebno instalirati i povezati vlastitu KV pohranu za organizaciju visoke dostupnosti (HA).

Dalje, klijentski zahtjev se slao u HAProxy, koji je rješavao sljedeće zadatke:

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

HAProxy je već dugo poznat kao proxy i balansirnik prometa. U okviru Kubernetes klastera nudi se »blago« ažuriranje konfiguracije (bez gubitka prometa), otkrivanje usluga temeljem DNS-a, dinamička konfiguracija putem API-ja. Privlačna može biti potpuna prilagodba predloška konfiguracija zamjenom CM-a, kao i mogućnost korištenja funkcija biblioteke Sprig. U cjelini, glavni naglasak rešenja stavlja se na visoku brzinu rada, optimiziranost i učinkovitost u potrošnji resursa. Prednost kontrolera je podrška rekordnom broju različitih metoda balansiranja.

Voyager

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

Kontroler zasnovan na HAproxy, koji se pozicionira kao univerzalno rešenje koje podržava široke mogućnosti na velikom broju pružatelja. Nudi mogućnost balansiranja prometa na L7 i L4, a balansiranje TCP L4 prometa može se nazvati jednom od ključnih značajki rešenja.

Contour

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

Osnova ovog rešenja nije samo Envoy: ono je razvijeno zajedno s autorima ovog popularnog proxyja. Važna značajka je mogućnost razdvajanja upravljanja resursima Ingress pomoću CRD resursa IngressRoute. Za organizacije s brojnim razvojnim timovima koji koriste jedan klaster, to pomaže maksimizirati sigurnost rada s prometom u susjednim okruženjima i zaštititi ih od grešaka prilikom izmjene Ingress resursa.

Također se nudi prošireni set metoda ravnoteže (uključuje zrcaljenje zahtjeva, automatske ponovljenosti, ograničenje rate zahtjeva i mnoštvo drugih), detaljno praćenje prometa i kvarova. Možda će nekome važan nedostatak biti nepodrška za sticky sessions (iako se radovi već odvijaju).

Istio Ingress

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

Kompleksno rješenje service mesh koje nije samo Ingress kontroler, koji upravlja dolaznim prometom izvan, već i kontrolira sav promet unutar klastera. 'Ispod haube', kao sidecar-proxy za svaku uslugu, koristi se Envoy. U suštini, to je veliki kombajn koji 'može sve', a glavna ideja je maksimalna upravljivost, proširivost, sigurnost i transparentnost. Pomoću njega možete detaljno konfigurirati usmjeravanje prometa, autorizaciju pristupa između usluga, ravnotežu, praćenje, kanarinske izdanja i još mnogo toga. Više o Istio-u pročitajte u seriji članaka 'Povratak na mikroservise s Istio».

Ambassador

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

Još jedno rješenje temeljeno na Envoy. Ima besplatnu i komercijalnu verziju. Pozicionira se kao 'potpuno izvorno za Kubernetes', što donosi odgovarajuće prednosti (uska integracija s metodama i entitetima klastera K8s).

Usporedna tabela

Dakle, kulminacija članka — ova ogromna tabela:

Pregled i usporedba Ingress kontrolera za Kubernetes

Klikabilna je za mogućnost detaljnijeg pregleda, a također dostupna u formatu Google Sheets.

Sveukupno

Cilj članka je pružiti potpunije razumijevanje (iako nije iscrpno!) o tome koji izbor napraviti u vašem konkretnom slučaju. Kao što obično biva, svaki kontroler ima svoje prednosti i nedostatke…

Klasik Ingress od Kubernetesa je dobar zbog svoje dostupnosti i provjerenosti, s dovoljno bogatim mogućnostima — u općenitom slučaju, trebao bi biti 'više nego dovoljan'. Međutim, ako imate visoke zahtjeve za stabilnost, razinu funkcija i razvoj, trebate obratiti pažnju na Ingress s NGINX Plus i plaćenom pretplatom. Kong ima bogat skup dodataka (i, prema tome, mogućnosti koje oni pružaju), a u plaćenoj verziji ih čak ima i više. Ima široke mogućnosti rada kao API Gateway, dinamičko konfiguriranje na temelju CRD resursa, kao i osnovne usluge Kubernetesa.

Za visoke zahtjeve u ravnoteži i metodama autorizacije, obratite pažnju na Traefik i HAProxy. To su Open Source projekti, provjereni godinama, vrlo stabilni i aktivno se razvijaju. Contour je već nekoliko godina na tržištu, ali još uvijek izgleda premlado i ima samo osnovne mogućnosti dodane preko Envoy-a. Ako postoji zahtjev za prisutnošću/ugradnjom WAF-a ispred aplikacije, trebali biste obratiti pažnju na isti Ingress od Kubernetesa ili HAProxy.

Najbogatiji funkcijama su proizvodi temeljeni na Envoy-u, a posebno Istio. Predstavlja se kao sveobuhvatno rješenje koje 'može sve', što, međutim, znači i znatno viši prag ulaska u konfiguraciju/pokretanje/upravljanje u usporedbi s drugim rješenjima.

Kao standardni kontroler izabrali smo i do danas koristimo Ingress od Kubernetesa, koji pokriva 80—90% potreba. Puru je pouzdan, lako se konfigurira i proširuje. U općenitom slučaju, u nedostatku specifičnih zahtjeva, trebao bi odgovarati većini klastera/aplikacija. Od sličnih univerzalnih i relativno jednostavnih proizvoda, mogu se preporučiti Traefik i HAProxy.

P.S.

Pročitajte i na našem blogu:

Izvor: habr.com

Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere 🔥 Kupite pouzdan hosting za web stranice s DDoS zaštitom, VPS VDS servere | ProHoster