Pregled i poređenje Ingress kontrolera za Kubernetes

Pregled i poređenje Ingress kontrolera za Kubernetes

Kada pokrećete Kubernetes klaster za određenu aplikaciju, morate razumjeti šta sama aplikacija, poslovanje i programeri predstavljaju ovom resursu. S ovim informacijama možete započeti donošenje arhitektonske odluke i, posebno, odabir određenog Ingress kontrolera, kojih danas već postoji veliki broj. Kako bismo dobili osnovnu predstavu o dostupnim opcijama bez potrebe da prolazimo kroz puno članaka/dokumentacije itd., pripremili smo ovaj pregled, uključujući glavne (proizvodno spremne) Ingress kontrolere.

Nadamo se da će to pomoći kolegama u odabiru arhitektonskog rješenja - barem će postati polazna tačka 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 ni jednu manje-više potpunu, i što je najvažnije - strukturiranu - recenziju. Pa popunimo tu prazninu!

kriteriji

U principu, da biste napravili poređenje i dobili bilo kakav koristan rezultat, morate razumjeti ne samo predmetnu oblast, već i imati specifičnu listu kriterija koji će postaviti vektor istraživanja. Bez pretvaranja da analiziramo sve moguće slučajeve korišćenja Ingress/Kubernetes-a, pokušali smo da istaknemo najopštije zahteve za kontrolere - budite spremni da ćete u svakom slučaju morati da proučite sve svoje specifičnosti i pojedinosti posebno.

Ali počet ću s karakteristikama koje su postale toliko poznate da su implementirane u sva rješenja i ne uzimaju se u obzir:

  • dinamičko otkrivanje usluga (service discovery);
  • SSL terminacija;
  • rad sa websocketima.

Sada za tačke poređenja:

Podržani protokoli

Jedan od osnovnih 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 ponovo konfigurirati klaster. Za sve kontrolere lista podržanih protokola varira.

softver u srži

Postoji nekoliko varijacija aplikacija na kojima se bazira kontroler. Popularni su nginx, traefik, haproxy, envoy. U opštem slučaju, možda neće imati mnogo uticaja na način na koji se saobraćaj prima i prenosi, ali je uvek korisno znati potencijalne nijanse i karakteristike onoga što je „ispod haube“.

Usmjeravanje saobraćaja

Na osnovu čega je moguće donijeti odluku o smjeru saobraćaja prema određenoj službi? Obično su to host i put, ali postoje i dodatne mogućnosti.

Imenski prostor unutar klastera

Imenski prostor (imenski prostor) - mogućnost logičke podjele resursa u Kubernetesu (na primjer, na pozornici, produkciji, itd.). Postoje Ingress kontroleri koji se moraju instalirati zasebno u svakom imenskom prostoru (i tada mogu usmjeravati promet samo na mahune ovog prostora). A postoje i oni (i njihova jasna većina) koji rade globalno za cijeli klaster - u njima se promet usmjerava na bilo koji pod klastera, bez obzira na imenski prostor.

Uzorci za uzvodno

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 npr. članak o Istiju), prilagođene zdravstvene provjere itd. Vrlo važan parametar ako imate visoke zahtjeve za dostupnost i blagovremeno uklanjanje otkazanih servisa iz balansiranja.

Algoritmi za balansiranje

Postoji mnogo opcija: od tradicionalnih kolo-kolo do egzotike rdp-cookie, kao i pojedinačne karakteristike poput lepljive sesije.

Autentifikacija

Koje šeme autorizacije podržava kontrolor? Basic, digest, oauth, external-auth - mislim da bi ove opcije trebale biti poznate. Ovo je važan kriterij ako postoji mnogo razvojnih (i/ili samo privatnih) petlji kojima se pristupa preko Ingress-a.

Distribucija saobraćaja

Da li kontroler podržava takve najčešće korišćene mehanizme distribucije saobraćaja kao što su kanarinac (kanarinac), A/B testiranje, zrcaljenje saobraćaja (zrcaljenje/sjenčanje)? Ovo je zaista bolna tema za aplikacije koje zahtevaju precizno i ​​precizno upravljanje saobraćajem za produktivno testiranje, otklanjanje grešaka u proizvodu van mreže (ili sa minimalnim gubitkom), analizu saobraćaja i tako dalje.

Plaćena pretplata

Postoji li plaćena opcija za kontroler, sa 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 "zgodnost" i/ili za one koji trebaju napraviti neke promjene u konfiguraciji Ingress'a, ali rad sa "sirovim" šablonima je nezgodan. Može biti korisno ako programeri žele provesti neke eksperimente s prometom u hodu.

JWT validacija

Prisustvo ugrađene validacije JSON web tokena za autorizaciju i validaciju korisnika do krajnje aplikacije.

Mogućnosti za prilagođavanje konfiguracije

Proširivost predloška u smislu posedovanja mehanizama koji vam omogućavaju da dodate sopstvene direktive, zastavice, itd. u standardne šablone konfiguracije.

Osnovni DDOS zaštitni mehanizmi

Jednostavni algoritmi ograničenja brzine ili složenije opcije filtriranja prometa na osnovu adresa, bijelih lista, zemalja itd.

Zatražite trag

Mogućnost praćenja, praćenja i otklanjanja grešaka zahtjeva od Ingresses-a do određenih usluga/podova, a idealno i između usluga/podova.

WAF

podrška zaštitni zid aplikacije.

Kontrolori

Lista kontrolora je formirana na osnovu zvanična Kubernetes dokumentacija и ovaj sto. Neke od njih smo isključili iz pregleda zbog specifičnosti ili niske prevalencije (rana faza razvoja). Ostalo je diskutovano u nastavku. Počnimo s općim opisom rješenja i nastavimo sa sažetom tablicom.

Ulaz iz Kubernetesa

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

Ovo je službeni kontroler za Kubernetes i razvija ga zajednica. Očigledno iz imena, baziran je na nginx-u i dopunjen je drugačijim skupom Lua dodataka koji se koriste za implementaciju dodatnih funkcija. Zbog popularnosti samog nginxa i minimalnih modifikacija kada se koristi kao kontroler, ova opcija može biti najlakša i najlakša za konfiguraciju za prosječnog inženjera (sa web iskustvom).

Ingress by NGINX Inc.

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

Zvanični proizvod nginx programera. Ima plaćenu verziju na osnovu NGINX Plus. Glavna ideja je visok nivo stabilnosti, stalna kompatibilnost unatrag, odsustvo bilo kakvih stranih modula i deklarirana povećana brzina (u odnosu na službeni kontroler), postignuta zbog odbijanja Lua-e.

Besplatna verzija je značajno smanjena, čak i u poređenju sa službenim kontrolerom (zbog nedostatka istih Lua modula). U isto vrijeme, plaćeni ima prilično široku dodatnu funkcionalnost: metriku u realnom vremenu, JWT validaciju, aktivne zdravstvene provjere i još mnogo toga. Važna prednost u odnosu na NGINX Ingress je puna podrška za TCP/UDP saobraćaj (i u verziji zajednice!). Oduzeti - nedostatak funkcija distribucije saobraćaja, koja, međutim, “ima najveći prioritet za programere,” ali je potrebno vrijeme za implementaciju.

Kong Ingress

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

Proizvod razvijen od strane Kong Inc. u dvije verzije: komercijalnoj i besplatnoj. Zasnovan na nginxu, koji je proširen velikim brojem Lua modula.

U početku je bio fokusiran na obradu i rutiranje API zahtjeva, tj. kao API Gateway, ali u ovom trenutku je postao punopravni Ingress kontroler. Glavne prednosti: veliki broj dodatnih modula (uključujući one od programera trećih strana) koji se lako instaliraju i konfigurišu i uz pomoć kojih je implementiran širok spektar dodatnih funkcija. Međutim, ugrađene funkcije već nude mnoge mogućnosti. Konfiguracija posla se vrši korištenjem CRD resursa.

Važna karakteristika proizvoda - rad unutar iste konture (umjesto unakrsnog razmaka imena) je kontroverzna tema: za neke će se činiti kao nedostatak (morate proizvesti entitete za svaku konturu), a za nekoga je to karakteristika ( bоVeći nivo izolacije, kao ako je jedan kontroler pokvaren, onda je problem ograničen samo na kolo).

Traefik

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

Proxy koji je prvobitno kreiran za rad s usmjeravanjem zahtjeva za mikroservise i njihovo dinamičko okruženje. Otuda mnoge korisne funkcije: ažuriranje konfiguracije bez 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 dobra karakteristika je podrška za Let's Encrypt certifikate iz kutije. Nedostatak je što će za organiziranje visoke dostupnosti (HA) kontroler morati instalirati i povezati vlastitu KV skladište.

HAProxy

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

HAProxy je dugo bio poznat kao proxy i balansator prometa. Kao dio Kubernetes klastera, nudi “meko” ažuriranje konfiguracije (bez gubitka prometa), otkrivanje usluge na osnovu DNS-a, dinamičku konfiguraciju koristeći API. Može biti atraktivno potpuno prilagoditi konfiguracijski predložak zamjenom CM-a, kao i mogućnost korištenja funkcija Sprig biblioteke u njemu. Generalno, glavni naglasak rješenja je na velikoj brzini, njegovoj optimizaciji i efikasnosti u potrošenim resursima. Prednost kontrolera je podrška rekordnog broja različitih metoda balansiranja.

putnik

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

Zasnovan na HAproxy kontroleru, koji je pozicioniran kao univerzalno rješenje koje podržava širok spektar funkcija kod velikog broja provajdera. Nudi se prilika za balansiranje saobraćaja na L7 i L4, a balansiranje TCP L4 saobraćaja u celini može se nazvati jednom od ključnih karakteristika rešenja.

kontura

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

Ovo rješenje nije bazirano samo na Envoy-u: razvilo ga je zajednički sa autorima ovog popularnog proxyja. Važna karakteristika je mogućnost odvajanja kontrole nad Ingress resursima koristeći IngressRoute CRD resurse. Za organizacije s mnogo razvojnih timova koji koriste isti klaster, ovo pomaže da se maksimizira sigurnost rada sa prometom u susjednim petljama i zaštiti ih od grešaka pri promjeni Ingress resursa.

Takođe nudi prošireni skup metoda balansiranja (postoji preslikavanje zahteva, automatsko ponavljanje, ograničenje brzine zahteva i još mnogo toga), detaljno praćenje toka saobraćaja i kvarova. Možda će nekome biti značajan nedostatak nedostatak podrške za lepljive sesije (iako rad već je u toku).

Istio Ingress

Web stranice: 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 suštini, ovo je veliki kombinat koji „može sve“, a njegova glavna ideja je maksimalna upravljivost, proširivost, sigurnost i transparentnost. Pomoću njega možete fino podesiti rutiranje saobraćaja, autorizaciju pristupa između usluga, balansiranje, praćenje, kanarska izdanja i još mnogo toga. Više o Istiu pročitajte u seriji članaka "Povratak na mikroservise sa Istiom".

ambasador

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

Još jedno rješenje bazirano na Envoy-u. Ima besplatne i komercijalne verzije. Pozicioniran je kao "potpuno native za Kubernetes", što donosi odgovarajuće prednosti (čvrsta integracija sa metodama i entitetima K8s klastera).

Uporedna tabela

Dakle, kulminacija članka je ova ogromna tabela:

Pregled i poređenje Ingress kontrolera za Kubernetes

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

Hajde da sumiramo

Svrha ovog članka je pružiti potpunije razumijevanje (međutim, nipošto iscrpno!) koji izbor treba 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 dokazanosti, dovoljno bogatih funkcija - u opštem slučaju, trebao bi biti „dovoljan za oči“. Međutim, ako postoje povećani zahtjevi za stabilnošću, nivoom karakteristika i razvojem, obratite pažnju na Ingress sa NGINX Plus i plaćenu pretplatu. Kong ima najbogatiji set dodataka (i, shodno tome, mogućnosti koje pružaju), a u plaćenoj verziji ih je još više. Ima obilje mogućnosti da radi kao API Gateway, dinamičku konfiguraciju zasnovanu na CRD resursima, kao i osnovne Kubernetes usluge.

Uz povećane zahtjeve za balansiranje i metode autorizacije, pogledajte Traefik i HAProxy. To su projekti otvorenog koda, dokazani godinama, vrlo stabilni i aktivno se razvijaju. Contour postoji već nekoliko godina, ali još uvijek izgleda premlado i ima samo osnovne karakteristike dodane na Envoy. Ako postoje zahtjevi za prisustvo/ugrađivanje WAF-a ispred aplikacije, treba obratiti pažnju na isti Ingress iz Kubernetesa ili HAProxy.

A najbogatiji u smislu karakteristika su proizvodi napravljeni na vrhu Envoya, posebno Istio. Čini se da se radi o sveobuhvatnom rješenju koje „može sve“, što, međutim, znači i znatno viši prag za konfiguraciju/pokretanje/administriranje od ostalih rješenja.

Izabrali smo i još uvijek koristimo Ingress iz Kubernetesa kao standardni kontroler, koji pokriva 80-90% potreba. Prilično je pouzdan, jednostavan za konfiguraciju i proširenje. Općenito, u nedostatku specifičnih 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