Prehľad a porovnanie ovládačov Ingress pre Kubernetes

Prehľad a porovnanie ovládačov Ingress pre Kubernetes

Pri spustení klastra Kubernetes pre konkrétnu aplikáciu musíte pochopiť, čo pre tento zdroj predstavuje samotná aplikácia, podnik a vývojári. S týmito informáciami sa môžete pustiť do architektonického rozhodovania a najmä výberu konkrétneho Ingress ovládača, ktorých je už dnes veľké množstvo. Aby ste získali základnú predstavu o dostupných možnostiach bez toho, aby ste museli prechádzať množstvom článkov / dokumentácie atď., pripravili sme tento prehľad vrátane hlavných (na výrobu pripravených) ovládačov Ingress.

Dúfame, že pomôže kolegom pri výbere architektonického riešenia – minimálne sa stane východiskom pre získanie podrobnejších informácií a praktických experimentov. Predtým sme študovali iné podobné materiály na nete a napodiv sme nenašli jedinú viac či menej kompletnú, a čo je najdôležitejšie - štruktúrovanú - recenziu. Tak vyplňte túto medzeru!

kritériá

V zásade platí, že ak chcete porovnať a získať nejaký užitočný výsledok, musíte pochopiť nielen oblasť predmetu, ale musíte mať aj konkrétny zoznam kritérií, ktoré určia vektor výskumu. Bez toho, aby sme predstierali, že analyzujeme všetky možné prípady používania Ingress / Kubernetes, pokúsili sme sa zdôrazniť najvšeobecnejšie požiadavky na ovládače - pripravte sa, že v každom prípade si budete musieť všetky svoje špecifiká a podrobnosti naštudovať samostatne.

Začnem však charakteristikami, ktoré sa stali tak známymi, že sú implementované vo všetkých riešeniach a neberú sa do úvahy:

  • dynamické zisťovanie služieb (objavovanie služieb);
  • ukončenie SSL;
  • práca s websocketmi.

Teraz k porovnávacím bodom:

Podporované protokoly

Jedno zo základných kritérií výberu. Váš softvér nemusí fungovať na štandardnom HTTP alebo môže vyžadovať prácu na viacerých protokoloch naraz. Ak je váš prípad neštandardný, určite berte tento faktor do úvahy, aby ste neskôr nemuseli klaster prekonfigurovať. Pre všetky radiče sa zoznam podporovaných protokolov líši.

softvér v jadre

Existuje niekoľko variácií aplikácií, na ktorých je ovládač založený. Populárne sú nginx, traefik, haproxy, envoy. Vo všeobecnom prípade to nemusí mať veľký vplyv na to, ako sa prevádzka prijíma a prenáša, ale vždy je užitočné poznať potenciálne nuansy a vlastnosti toho, čo je „pod kapotou“.

Smerovanie dopravy

Na základe čoho je možné rozhodnúť o smerovaní premávky na konkrétnu službu? Zvyčajne sú to hostiteľ a cesta, ale existujú aj ďalšie možnosti.

Menný priestor v rámci klastra

Namespace (namespace) - možnosť logicky rozdeliť zdroje v Kubernetes (napríklad na pódiu, produkcii atď.). Existujú ovládače Ingress, ktoré musia byť nainštalované samostatne v každom mennom priestore (a potom môžu riadiť prevádzku iba do strukov tohto priestoru). A sú také (a ich jasná väčšina), ktoré fungujú globálne pre celý klaster – v nich je prevádzka smerovaná do ľubovoľného modulu klastra, bez ohľadu na menný priestor.

Vzorky pre protiprúdy

Ako je návštevnosť smerovaná do zdravých inštancií aplikácie, služieb? Existujú možnosti s aktívnymi a pasívnymi kontrolami, opakovaniami, ističmi (Bližšie informácie nájdete napr. článok o Istiovi), vlastné implementácie zdravotných kontrol (vlastné zdravotné kontroly) a pod. Veľmi dôležitý parameter, ak máte vysoké požiadavky na dostupnosť a včasné odstránenie zlyhaných služieb z balancovania.

Vyvažovacie algoritmy

Existuje veľa možností: od tradičných každý s každým do exotiky rdp-cookie, ako aj jednotlivé funkcie ako lepkavé relácie.

overenie pravosti

Aké autorizačné schémy ovládač podporuje? Basic, digest, oauth, external-auth – myslím, že tieto možnosti by mali byť známe. Toto je dôležité kritérium, ak existuje veľa vývojárskych (a/alebo len súkromných) slučiek, ktoré sú prístupné cez Ingress.

Rozdelenie dopravy

Podporuje kontrolór také bežne používané mechanizmy distribúcie premávky, ako sú kanárske zavádzanie (canary), testovanie A/B, zrkadlenie premávky (zrkadlenie / tieňovanie)? Toto je skutočne bolestivá téma pre aplikácie, ktoré vyžadujú presné a presné riadenie prevádzky na produktívne testovanie, ladenie chýb produktu off-line (alebo s minimálnou stratou), analýzu prevádzky atď.

Platené predplatné

Existuje platená možnosť pre ovládač s pokročilými funkciami a / alebo technickou podporou?

Grafické používateľské rozhranie (Web UI)

Existuje nejaké grafické rozhranie na správu konfigurácie ovládača? Hlavne pre „šikovnosť“ a/alebo pre tých, ktorí potrebujú vykonať nejaké zmeny v konfigurácii Ingress'a, ale práca so „surovými“ šablónami je nepohodlná. Môže to byť užitočné, ak chcú vývojári vykonávať nejaké experimenty s prevádzkou za behu.

Validácia JWT

Prítomnosť vstavanej validácie webových tokenov JSON na autorizáciu a validáciu používateľa až do koncovej aplikácie.

Možnosti prispôsobenia konfigurácie

Rozšíriteľnosť šablóny v zmysle mechanizmov, ktoré vám umožňujú pridávať vlastné direktívy, príznaky atď. do štandardných konfiguračných šablón.

Základné ochranné mechanizmy DDOS

Jednoduché algoritmy obmedzenia rýchlosti alebo zložitejšie možnosti filtrovania návštevnosti na základe adries, bielych zoznamov, krajín atď.

Požiadať o sledovanie

Schopnosť monitorovať, sledovať a ladiť požiadavky z Ingresses na konkrétne služby/pody a ideálne aj medzi službami/podmi.

WAF

Podpora aplikačný firewall.

Ovládače

Zoznam kontrolórov bol vytvorený na základe oficiálna dokumentácia Kubernetes и táto tabuľka. Niektoré z nich sme z prehľadu vylúčili pre špecifickosť alebo nízku prevalenciu (skoré štádium vývoja). Zvyšok je diskutovaný nižšie. Začnime všeobecným popisom riešení a pokračujme súhrnnou tabuľkou.

Vstup od Kubernetes

Website: github.com/kubernetes/ingress-nginx
Licencia: Apache 2.0

Toto je oficiálny kontrolór pre Kubernetes a je vyvíjaný komunitou. Z názvu je zrejmé, že je založený na nginx a je doplnený o inú sadu doplnkov Lua používaných na implementáciu ďalších funkcií. Vzhľadom na popularitu samotného nginx a jeho minimálnych úprav pri použití ako ovládača môže byť táto možnosť najjednoduchšia a najjednoduchšia na konfiguráciu pre priemerného inžiniera (so skúsenosťami s webom).

Ingress od NGINX Inc.

Website: github.com/nginxinc/kubernetes-ingress
Licencia: Apache 2.0

Oficiálny produkt vývojárov nginx. Má platenú verziu založenú na NGINX Plus. Hlavnou myšlienkou je vysoká úroveň stability, stála spätná kompatibilita, absencia akýchkoľvek cudzích modulov a deklarovaná zvýšená rýchlosť (v porovnaní s oficiálnym kontrolórom), dosiahnutá vďaka odmietnutiu Lua.

Bezplatná verzia je výrazne znížená, a to aj v porovnaní s oficiálnym kontrolórom (kvôli nedostatku rovnakých modulov Lua). Platený má zároveň pomerne širokú doplnkovú funkcionalitu: metriky v reálnom čase, validáciu JWT, aktívne kontroly zdravotného stavu a ďalšie. Dôležitou výhodou oproti NGINX Ingress je plná podpora pre TCP / UDP prenos (a to aj v komunitnej verzii!). mínus - absencia funkcia distribúcie návštevnosti, ktorá však „má pre vývojárov najvyššiu prioritu“, no implementácia si vyžaduje čas.

Kong Ingress

Website: github.com/Kong/kubernetes-ingress-controller
Licencia: Apache 2.0

Produkt vyvinutý spoločnosťou Kong Inc. v dvoch verziách: komerčná a bezplatná. Založené na nginx, ktorý bol rozšírený o veľké množstvo Lua modulov.

Spočiatku bol zameraný na spracovanie a smerovanie API požiadaviek, t.j. ako API Gateway, no momentálne sa z neho stal plnohodnotný Ingress controller. Hlavné výhody: veľa doplnkových modulov (vrátane modulov od vývojárov tretích strán), ktoré sa ľahko inštalujú a konfigurujú a pomocou ktorých je implementovaná široká škála doplnkových funkcií. Mnoho možností však už ponúkajú vstavané funkcie. Konfigurácia úlohy sa vykonáva pomocou prostriedkov CRD.

Dôležitá vlastnosť produktu – práca v rámci toho istého obrysu (namiesto cross-namespaced) je kontroverznou témou: pre niekoho sa to bude zdať ako nevýhoda (musíte vytvárať entity pre každý obrys) a pre niekoho je to vlastnosť ( bоVyššia miera izolácie, napr ak je jeden ovládač poškodený, problém je obmedzený na samotný okruh).

Traefik

Website: github.com/containous/traefik
Licencia: MIT

Proxy, ktorý bol pôvodne vytvorený na prácu so smerovaním požiadaviek pre mikroslužby a ich dynamické prostredie. Preto existuje veľa užitočných funkcií: aktualizácia konfigurácie bez reštartu, podpora veľkého množstva metód vyvažovania, webové rozhranie, preposielanie metrík, podpora rôznych protokolov, REST API, verzie canary a oveľa viac. Ďalšou príjemnou funkciou je podpora certifikátov Let's Encrypt hneď po vybalení. Nevýhodou je, že na organizáciu vysokej dostupnosti (HA) bude musieť ovládač nainštalovať a pripojiť svoje vlastné úložisko KV.

HAProxy

Website: github.com/jcmoraisjr/haproxy-ingress
Licencia: Apache 2.0

HAProxy je už dlho známy ako proxy a vyrovnávač dopravy. Ako súčasť klastra Kubernetes ponúka „mäkkú“ aktualizáciu konfigurácie (bez straty prevádzky), zisťovanie služieb na základe DNS, dynamickú konfiguráciu pomocou API. Môže byť atraktívne úplne prispôsobiť šablónu konfigurácie nahradením CM, ako aj možnosť používať v nej funkcie knižnice Sprig. Vo všeobecnosti je hlavný dôraz riešenia kladený na vysokú rýchlosť, jej optimalizáciu a efektivitu spotrebovaných zdrojov. Výhodou regulátora je podpora rekordného počtu rôznych spôsobov vyvažovania.

Cestovateľ

Website: github.com/appscode/voyager
Licencia: Apache 2.0

Založené na ovládači HAproxy, ktorý je umiestnený ako univerzálne riešenie, ktoré podporuje širokú škálu funkcií u veľkého počtu poskytovateľov. Ponúka sa príležitosť na vyváženie prevádzky na L7 a L4 a vyváženie TCP L4 prevádzky ako celku možno nazvať jednou z kľúčových vlastností riešenia.

obrys

Website: github.com/heptio/contour
Licencia: Apache 2.0

Toto riešenie nie je založené len na Envoy: bolo vyvinuté spoločnosťou spoločne s autormi tohto obľúbeného proxy. Dôležitou vlastnosťou je možnosť oddeliť riadenie zdrojov Ingress pomocou prostriedkov IngressRoute CRD. Pre organizácie s mnohými vývojovými tímami používajúcimi rovnaký klaster to pomáha maximalizovať bezpečnosť práce s prevádzkou v susedných slučkách a chrániť ich pred chybami pri zmene prostriedkov Ingress.

Ponúka tiež rozšírenú sadu balančných metód (existuje zrkadlenie požiadaviek, automatické opakovanie, obmedzenie počtu požiadaviek a mnohé ďalšie), podrobné sledovanie toku prevádzky a porúch. Možno pre niekoho bude významnou nevýhodou nedostatok podpory pre lepkavé relácie (aj keď práca už prebieha).

Istio Ingress

Website: istio.io/docs/tasks/traffic-management/ingress
Licencia: Apache 2.0

Komplexné riešenie service mesh, ktoré nie je len kontrolérom Ingress, ktorý riadi prichádzajúcu komunikáciu zvonku, ale riadi aj všetku komunikáciu v rámci klastra. Pod kapotou sa Envoy používa ako zástupca postranného vozíka pre každú službu. V podstate ide o veľký kombajn, ktorý „môže robiť čokoľvek“ a jeho hlavnou myšlienkou je maximálna ovládateľnosť, rozšíriteľnosť, bezpečnosť a transparentnosť. S ním môžete doladiť smerovanie prevádzky, autorizáciu prístupu medzi službami, vyvažovanie, monitorovanie, kanárske vydania a mnoho ďalšieho. Prečítajte si viac o Istio v sérii článkov "Späť k mikroslužbám s Istio".

Veľvyslanec

Website: github.com/datawire/ambassador
Licencia: Apache 2.0

Ďalšie riešenie založené na Envoy. Má bezplatné a komerčné verzie. Je umiestnený ako „plne natívny pre Kubernetes“, čo prináša zodpovedajúce výhody (tesná integrácia s metódami a entitami klastra K8s).

porovnávacia tabuľka

Takže vyvrcholením článku je táto obrovská tabuľka:

Prehľad a porovnanie ovládačov Ingress pre Kubernetes

Dá sa naň kliknúť pre bližšie zobrazenie a je k dispozícii aj vo formáte Tabuľky Google.

Aby som to zhrnul

Účelom tohto článku je poskytnúť úplnejšie pochopenie (avšak v žiadnom prípade nie vyčerpávajúce!) akú voľbu urobiť vo vašom konkrétnom prípade. Ako obvykle, každý ovládač má svoje výhody a nevýhody...

Klasický Ingress od Kubernetes je dobrý svojou dostupnosťou a osvedčením, dostatočne bohatými funkciami - vo všeobecnosti by to malo „stačiť pre oči“. Ak sú však zvýšené požiadavky na stabilitu, úroveň funkcií a vývoj, mali by ste venovať pozornosť Ingress s NGINX Plus a plateným predplatným. Kong má najbohatšiu sadu doplnkov (a podľa toho aj príležitosti, ktoré poskytujú) a v platenej verzii je ich ešte viac. Má dostatok príležitostí pracovať ako API Gateway, dynamickú konfiguráciu založenú na zdrojoch CRD, ako aj základné služby Kubernetes.

So zvýšenými požiadavkami na metódy vyvažovania a autorizácie sa pozrite na Traefik a HAProxy. Ide o projekty s otvoreným zdrojovým kódom, rokmi overené, veľmi stabilné a aktívne sa rozvíjajúce. Contour je vonku už pár rokov, no stále vyzerá príliš mlado a nad Envoy má pridané len základné funkcie. Ak existujú požiadavky na prítomnosť / vloženie WAF pred aplikáciou, mali by ste venovať pozornosť rovnakému Ingress od Kubernetes alebo HAProxy.

A najbohatšie na funkcie sú produkty postavené na Envoy, najmä Istio. Zdá sa, že ide o komplexné riešenie, ktoré „môže robiť čokoľvek“, čo však znamená aj výrazne vyšší vstupný prah pre konfiguráciu / spustenie / správu ako iné riešenia.

Ako štandardný ovládač sme zvolili a stále používame Ingress od Kubernetes, ktorý pokrýva 80-90% potrieb. Je celkom spoľahlivý, ľahko sa konfiguruje a rozširuje. Vo všeobecnosti, ak neexistujú špecifické požiadavky, mal by vyhovovať väčšine klastrov/aplikácií. Z rovnakých univerzálnych a relatívne jednoduchých produktov možno odporučiť Traefik a HAProxy.

PS

Prečítajte si aj na našom blogu:

Zdroj: hab.com

Pridať komentár