Pregled in primerjava krmilnikov Ingress za Kubernetes

Pregled in primerjava krmilnikov Ingress za Kubernetes

Ko zaženete gručo Kubernetes za določeno aplikacijo, morate razumeti, kaj sama aplikacija, podjetje in razvijalci predstavljajo za ta vir. S temi informacijami se lahko lotite sprejemanja arhitekturne odločitve in predvsem izbire določenega krmilnika Ingress, ki jih je danes že ogromno. Da bi dobili osnovno predstavo o razpoložljivih možnostih, ne da bi morali iti skozi veliko člankov / dokumentacije itd., smo pripravili ta pregled, vključno z glavnimi (pripravljenimi za proizvodnjo) krmilniki Ingress.

Upamo, da bo kolegom v pomoč pri izbiri arhitekturne rešitve – postala bo vsaj izhodišče za pridobivanje podrobnejših informacij in praktičnih poskusov. Prej smo preučevali druge podobne materiale v omrežju in, nenavadno, nismo našli niti enega bolj ali manj popolnega in kar je najpomembnejše - strukturiranega - pregleda. Zapolnimo torej to vrzel!

merila

Načeloma, če želite narediti primerjavo in dobiti kakršen koli uporaben rezultat, morate razumeti ne le predmetno področje, ampak imeti tudi določen seznam meril, ki bodo določili raziskovalni vektor. Ne da bi se pretvarjali, da analiziramo vse možne primere uporabe Ingress / Kubernetes, smo poskušali izpostaviti najsplošnejše zahteve za krmilnike - bodite pripravljeni, da boste v vsakem primeru morali vse svoje posebnosti in podrobnosti preučiti ločeno.

Začel pa bom z lastnostmi, ki so postale tako znane, da so implementirane v vse rešitve in niso upoštevane:

  • dinamično odkrivanje storitev (service discovery);
  • prekinitev SSL;
  • delo s spletnimi vtičnicami.

Zdaj pa točke primerjave:

Podprti protokoli

Eden od temeljnih kriterijev izbire. Vaša programska oprema morda ne bo delovala na standardnem HTTP-ju ali pa bo zahtevala delo na več protokolih hkrati. Če je vaš primer nestandarden, ne pozabite upoštevati tega dejavnika, da vam pozneje ne bo treba znova konfigurirati gruče. Za vse krmilnike se seznam podprtih protokolov razlikuje.

programsko opremo v jedru

Obstaja več različic aplikacij, na katerih temelji krmilnik. Priljubljeni so nginx, traefik, haproxy, envoy. V splošnem primeru morda nima velikega vpliva na to, kako se promet sprejema in prenaša, vendar je vedno koristno poznati morebitne nianse in značilnosti tega, kar je "pod pokrovom".

Usmerjanje prometa

Na podlagi česa se je mogoče odločiti o smeri prometa na določeno storitev? Običajno sta to gostitelj in pot, obstajajo pa tudi dodatne možnosti.

Imenski prostor znotraj gruče

Imenski prostor (imenski prostor) - možnost logične razdelitve virov v Kubernetesu (na primer na odru, v produkciji itd.). Obstajajo krmilniki Ingress, ki jih je treba namestiti ločeno v vsak imenski prostor (in potem lahko usmerja promet Samo na stroke tega prostora). Obstajajo pa tudi tisti (in njihova očitna večina), ki delujejo globalno za celotno gručo - v njih je promet usmerjen na katero koli enoto gruče, ne glede na imenski prostor.

Vzorci za gorvodne tokove

Kako je promet usmerjen na zdrave primerke aplikacije, storitev? Obstajajo možnosti z aktivnimi in pasivnimi preverjanji, ponovnimi poskusi, odklopniki (Za več podrobnosti glejte npr. članek o Istio), zdravstveni pregledi po meri itd. Zelo pomemben parameter, če imate visoke zahteve glede razpoložljivosti in pravočasne odstranitve neuspelih storitev iz uravnoteženja.

Algoritmi za uravnoteženje

Možnosti je veliko: od tradicionalnih okroglo-robin do eksotike rdp-piškotek, kot tudi posamezne lastnosti, kot je lepljive seje.

Preverjanje pristnosti

Katere avtorizacijske sheme podpira krmilnik? Basic, digest, oauth, external-auth - mislim, da bi te možnosti morale biti znane. To je pomembno merilo, če obstaja veliko razvijalskih (in/ali samo zasebnih) zank, do katerih se dostopa prek Ingressa.

Distribucija prometa

Ali krmilnik podpira tako pogosto uporabljene mehanizme za distribucijo prometa, kot so kanarčki, testiranje A / B, zrcaljenje prometa (zrcaljenje / senčenje)? To je zelo boleča tema za aplikacije, ki zahtevajo natančno in natančno upravljanje prometa za produktivno testiranje, odpravljanje napak izdelka brez povezave (ali z minimalno izgubo), analizo prometa itd.

Plačana naročnina

Ali obstaja plačljiva možnost za krmilnik z napredno funkcionalnostjo in/ali tehnično podporo?

Grafični uporabniški vmesnik (spletni uporabniški vmesnik)

Ali obstaja kakšen GUI za upravljanje konfiguracije krmilnika? Predvsem za "priročnost" in/ali za tiste, ki morajo narediti nekaj sprememb v konfiguraciji Ingress'a, vendar je delo s "surovimi" predlogami neprijetno. Lahko je koristno, če želijo razvijalci izvajati nekaj poskusov s prometom sproti.

Validacija JWT

Prisotnost vgrajene validacije spletnih žetonov JSON za avtorizacijo in validacijo uporabnika do končne aplikacije.

Možnosti za prilagoditev konfiguracije

Razširljivost predloge v smislu mehanizmov, ki vam omogočajo dodajanje lastnih direktiv, zastavic itd. v standardne konfiguracijske predloge.

Osnovni zaščitni mehanizmi DDOS

Preprosti algoritmi za omejitev hitrosti ali bolj zapletene možnosti filtriranja prometa na podlagi naslovov, belih seznamov, držav itd.

Zahtevaj sled

Zmožnost spremljanja, sledenja in odpravljanja napak v zahtevah od Ingresses do določenih storitev/strokov in idealno tudi med storitvami/stroki.

WAF

Podpora požarni zid aplikacij.

Krmilniki

Seznam kontrolorjev je bil oblikovan na podlagi uradna dokumentacija Kubernetes и ta miza. Nekatere smo zaradi specifičnosti ali majhne razširjenosti (zgodnja razvojna faza) izločili iz pregleda. Ostali so obravnavani spodaj. Začnimo s splošnim opisom rešitev in nadaljujmo s zbirno tabelo.

Vhod iz Kubernetesa

Spletna stran: github.com/kubernetes/ingress-nginx
Licenca: Apache 2.0

To je uradni krmilnik za Kubernetes in ga razvija skupnost. Iz imena je očitno, da temelji na nginxu in ga dopolnjuje drugačen niz vtičnikov Lua, ki se uporabljajo za izvajanje dodatnih funkcij. Zaradi priljubljenosti samega nginxa in njegovih minimalnih sprememb, ko se uporablja kot krmilnik, je ta možnost morda najlažja in najlažja za konfiguracijo za povprečnega inženirja (s spletnimi izkušnjami).

Ingress podjetja NGINX Inc.

Spletna stran: github.com/nginxinc/kubernetes-ingress
Licenca: Apache 2.0

Uradni izdelek razvijalcev nginx. Ima plačljivo različico, ki temelji na NGINX Plus. Glavna ideja je visoka raven stabilnosti, stalna združljivost za nazaj, odsotnost kakršnih koli tujih modulov in deklarirana povečana hitrost (v primerjavi z uradnim krmilnikom), dosežena zaradi zavrnitve Lua.

Brezplačna različica je znatno zmanjšana, tudi v primerjavi z uradnim krmilnikom (zaradi pomanjkanja enakih modulov Lua). Hkrati ima plačljivi precej široko dodatno funkcionalnost: meritve v realnem času, validacijo JWT, aktivne preglede zdravja in drugo. Pomembna prednost pred NGINX Ingress je popolna podpora za promet TCP / UDP (in tudi v različici skupnosti!). minus - Odsotnost funkcija distribucije prometa, ki pa ima "najvišjo prioriteto za razvijalce", vendar zahteva čas za implementacijo.

Kong Ingress

Spletna stran: github.com/Kong/kubernetes-ingress-controller
Licenca: Apache 2.0

Izdelek, ki ga je razvil Kong Inc. v dveh različicah: komercialni in brezplačni. Temelji na nginxu, ki je bil razširjen z velikim številom modulov Lua.

Sprva je bil osredotočen na obdelavo in usmerjanje API zahtev, tj. kot API Gateway, trenutno pa je postal polnopravni krmilnik Ingress. Glavne prednosti: številni dodatni moduli (vključno s tistimi od razvijalcev tretjih oseb), ki jih je enostavno namestiti in konfigurirati ter s pomočjo katerih je implementiran širok nabor dodatnih funkcij. Vendar že vgrajene funkcije ponujajo veliko možnosti. Konfiguracija opravila se izvede z uporabo virov CRD.

Pomembna značilnost izdelka - delo znotraj iste konture (namesto navzkrižnega imenskega prostora) je sporna tema: za nekatere se bo to zdelo kot pomanjkljivost (izdelati morate entitete za vsako konturo), za nekoga pa je to lastnost ( bоVečja stopnja izolacije, kot če je en krmilnik pokvarjen, je težava omejena samo na vezje).

Traefik

Spletna stran: github.com/containous/traefik
Licenca: MIT

Proxy, ki je bil prvotno ustvarjen za delo z usmerjanjem zahtev za mikrostoritve in njihovo dinamično okolje. Zato številne uporabne funkcije: posodabljanje konfiguracije brez ponovnega zagona, podpora za veliko število metod uravnoteženja, spletni vmesnik, posredovanje metrik, podpora za različne protokole, REST API, izdaje canary in še veliko več. Še ena dobra lastnost je podpora za potrdila Let's Encrypt. Pomanjkljivost je, da bo moral krmilnik za organizacijo visoke razpoložljivosti (HA) namestiti in povezati lastno KV shrambo.

HAProxy

Spletna stran: github.com/jcmoraisjr/haproxy-ingress
Licenca: Apache 2.0

HAProxy je že dolgo znan kot posrednik in izravnavalec prometa. Kot del gruče Kubernetes ponuja "mehko" posodobitev konfiguracije (brez izgube prometa), odkrivanje storitev na podlagi DNS, dinamično konfiguracijo z uporabo API-ja. Privlačna je lahko popolna prilagoditev konfiguracijske predloge z zamenjavo CM, kot tudi možnost uporabe funkcij knjižnice Sprig v njej. Na splošno je glavni poudarek rešitve na visoki hitrosti, njeni optimizaciji in učinkovitosti porabljenih virov. Prednost regulatorja je podpora rekordnemu številu različnih načinov uravnoteženja.

Voyager

Spletna stran: github.com/appscode/voyager
Licenca: Apache 2.0

Temelji na krmilniku HAproxy, ki je postavljen kot univerzalna rešitev, ki podpira široko paleto funkcij pri velikem številu ponudnikov. Ponuja se priložnost za uravnoteženje prometa na L7 in L4, uravnoteženje TCP L4 prometa kot celote pa lahko imenujemo ena ključnih lastnosti rešitve.

Contour

Spletna stran: github.com/heptio/contour
Licenca: Apache 2.0

Ta rešitev ne temelji le na Envoyju: razvili so jo skupaj z avtorji tega priljubljenega posrednika. Pomembna lastnost je zmožnost ločevanja nadzora nad viri Ingress z uporabo virov IngressRoute CRD. Za organizacije z veliko razvojnimi skupinami, ki uporabljajo isto gručo, to pomaga povečati varnost dela s prometom v sosednjih zankah in jih zaščititi pred napakami pri spreminjanju virov Ingress.

Ponuja tudi razširjen nabor metod uravnoteženja (obstaja zrcaljenje zahtev, samodejno ponavljanje, omejitev stopnje zahtev in še veliko več), podrobno spremljanje pretoka prometa in napak. Morda bo za koga pomembna pomanjkljivost pomanjkanje podpore za lepljive seje (čeprav delo že poteka).

Istio Ingress

Spletna stran: istio.io/docs/tasks/traffic-management/ingress
Licenca: Apache 2.0

Celovita storitvena mrežna rešitev, ki ni le krmilnik Ingress, ki upravlja dohodni promet od zunaj, ampak nadzoruje tudi ves promet znotraj gruče. Pod pokrovom se Envoy uporablja kot stranski posrednik za vsako storitev. V bistvu je to velika kombinacija, ki »zmore vse«, njena glavna ideja pa je maksimalna vodljivost, razširljivost, varnost in preglednost. Z njim lahko natančno prilagodite usmerjanje prometa, avtorizacijo dostopa med storitvami, uravnoteženje, spremljanje, sproščanje kanarčkov in še veliko več. Preberite več o Istio v seriji člankov "Nazaj k mikrostoritvam z Istio".

Veleposlanik

Spletna stran: github.com/datawire/ambassador
Licenca: Apache 2.0

Še ena rešitev, ki temelji na Envoyju. Ima brezplačno in komercialno različico. Postavljen je kot "popolnoma izviren za Kubernetes", kar prinaša ustrezne prednosti (tesna integracija z metodami in entitetami gruče K8s).

primerjalna tabela

Torej, vrhunec članka je ta ogromna tabela:

Pregled in primerjava krmilnikov Ingress za Kubernetes

Za bližji pogled ga je mogoče klikniti, na voljo pa je tudi v obliki Google Preglednice.

Če povzamemo

Namen tega članka je zagotoviti popolnejše razumevanje (vendar nikakor ne izčrpno!) tega, kaj izbrati v vašem konkretnem primeru. Kot običajno ima vsak krmilnik svoje prednosti in slabosti ...

Klasični Ingress iz Kubernetesa je dober zaradi svoje razpoložljivosti in dokazanosti, dovolj bogatih funkcij - v splošnem bi moral biti "dovolj za oči". Če pa obstajajo povečane zahteve glede stabilnosti, ravni funkcij in razvoja, bodite pozorni na Ingress z NGINX Plus in plačano naročnino. Kong ima najbogatejši nabor vtičnikov (in s tem možnosti, ki jih ponujajo), v plačljivi različici pa jih je še več. Ima veliko možnosti za delovanje kot API Gateway, dinamično konfiguracijo, ki temelji na virih CRD, kot tudi osnovne storitve Kubernetes.

S povečanimi zahtevami za metode uravnoteženja in avtorizacije si oglejte Traefik in HAProxy. To so odprtokodni projekti, preizkušeni z leti, zelo stabilni in se aktivno razvijajo. Contour je na voljo že nekaj let, vendar je še vedno videti premlad in ima poleg Envoya dodane le osnovne funkcije. Če obstajajo zahteve za prisotnost / vgradnjo WAF pred aplikacijo, bodite pozorni na isti Ingress iz Kubernetesa ali HAProxy.

In najbogatejši v smislu funkcij so izdelki, zgrajeni na vrhu Envoy, zlasti Istio. Zdi se, da gre za celovito rešitev, ki »zmore vse«, kar pa pomeni tudi bistveno višji vstopni prag za konfiguracijo / zagon / administracijo kot druge rešitve.

Kot standardni krmilnik smo izbrali in še vedno uporabljamo Ingress iz Kubernetesa, ki pokriva 80-90% potreb. Je precej zanesljiv, enostaven za konfiguracijo in razširitev. Na splošno bi moral, če ni posebnih zahtev, ustrezati večini grozdov/aplikacij. Od enakih univerzalnih in razmeroma preprostih izdelkov lahko priporočimo Traefik in HAProxy.

PS

Preberite tudi na našem blogu:

Vir: www.habr.com

Dodaj komentar