Kubernetese Ingressi kontrollerite ülevaade ja võrdlus

Kubernetese Ingressi kontrollerite ülevaade ja võrdlus

Konkreetse rakenduse jaoks Kubernetese klastri käivitamisel peate mõistma, mida rakendus ise, ettevõte ja arendajad sellele ressursile pakuvad. Selle teabe abil saate asuda arhitektuurse otsuse tegemisele ja eelkõige konkreetse Ingressi kontrolleri valimisele, mida on täna juba suur hulk. Selleks, et saada põhiline ettekujutus saadaolevatest võimalustest, ilma et peaksite läbima palju artikleid / dokumentatsiooni jne, oleme koostanud selle ülevaate, sealhulgas peamised (tootmisvalmis) Ingressi kontrollerid.

Loodame, et see on kolleegidele abiks arhitektuurse lahenduse valikul – saab vähemalt lähtepunktiks täpsema info hankimisel ja praktilistel katsetustel. Varem uurisime võrgus muid sarnaseid materjale ja kummalisel kombel ei leidnud ühtegi enam-vähem täielikku ja mis kõige tähtsam - struktureeritud ülevaadet. Nii et täidame selle tühimiku!

kriteeriumid

Põhimõtteliselt peate võrdluse tegemiseks ja kasulike tulemuste saamiseks mõistma mitte ainult ainevaldkonda, vaid omama ka konkreetset kriteeriumide loendit, mis määravad uurimisvektori. Analüüsimata kõiki võimalikke Ingressi / Kubernetese kasutamise juhtumeid, püüdsime välja tuua kõige üldisemad nõuded kontrolleritele - olge valmis, et igal juhul peate kõiki oma eripärasid ja üksikasju eraldi uurima.

Kuid alustan omadustest, mis on nii tuttavaks saanud, et neid rakendatakse kõigis lahendustes ja neid ei arvestata:

  • teenuste dünaamiline avastamine (teenuste avastamine);
  • SSL-i lõpetamine;
  • veebipesadega töötamine.

Nüüd võrdlusmomendid:

Toetatud protokollid

Üks valiku põhikriteeriume. Teie tarkvara ei pruugi standardse HTTP-ga töötada või võib vajada tööd mitme protokolliga korraga. Kui teie juhtum on ebastandardne, võtke kindlasti seda tegurit arvesse, et te ei peaks hiljem klastrit ümber seadistama. Kõigi kontrollerite puhul on toetatud protokollide loend erinev.

tarkvara tuumaks

Rakendustel, millel kontroller põhineb, on mitu variatsiooni. Populaarsed on nginx, traefik, haproxy, envoy. Üldjuhul ei pruugi see liikluse vastuvõtmisele ja edastamisele kuigi palju mõju avaldada, kuid alati on kasulik teada “kapoti all” oleva võimalikke nüansse ja omadusi.

Liikluse suunamine

Mille põhjal on võimalik teha otsus liikluse suuna kohta konkreetsele teenusele? Tavaliselt on need host ja tee, kuid on ka täiendavaid võimalusi.

Nimeruum klastris

Nimeruum (nimeruum) - võimalus Kubernetes ressursse loogiliselt jagada (näiteks laval, produktsioonil jne). On sisendkontrollereid, mis tuleb igasse nimeruumi eraldi installida (ja siis saab see liiklust suunata ainult selle ruumi kaunadele). Ja on neid (ja nende selge enamus), mis töötavad globaalselt kogu klastri jaoks – neis suunatakse liiklus klastri mis tahes kaustale, olenemata nimeruumist.

Näidised ülesvoolu jaoks

Kuidas suunatakse liiklus rakenduse ja teenuste tervetele eksemplaridele? On valikuid aktiivse ja passiivse kontrolli, korduskatsete, kaitselülititega (Lisateavet vt nt artikkel Istio kohta), kohandatud tervisekontrollid jne. Väga oluline parameeter, kui teil on kõrged nõuded saadavusele ja ebaõnnestunud teenuste õigeaegsele tasakaalustamisest eemaldamisele.

Tasakaalustusalgoritmid

Võimalusi on palju: traditsioonilisest ümmargune röövel eksootilisele rdp-küpsis, aga ka individuaalseid funktsioone nagu kleepuvad seansid.

Autentimine

Milliseid autoriseerimisskeeme vastutav töötleja toetab? Basic, digest, oauth, external-auth – arvan, et need valikud peaksid olema tuttavad. See on oluline kriteerium, kui Ingressi kaudu pääseb juurde palju arendaja (ja/või ainult privaatseid) silmuseid.

Liiklusjaotus

Kas kontroller toetab selliseid sageli kasutatavaid liikluse jaotusmehhanisme nagu Canary levitamine (kanaari), A / B testimine, liikluse peegeldamine (peegeldamine / varjutamine)? See on tõesti valus teema rakenduste jaoks, mis nõuavad täpset ja täpset liikluse juhtimist produktiivseks testimiseks, tootevigade silumiseks võrguühenduseta (või minimaalse kaoga), liikluse analüüsimiseks jne.

Tasuline tellimus

Kas kontrolleril on lisafunktsioonide ja/või tehnilise toega tasuline valik?

Graafiline kasutajaliides (veebi kasutajaliides)

Kas kontrolleri konfiguratsiooni haldamiseks on olemas GUI? Peamiselt "käepärast" ja/või neile, kes peavad Ingress'a konfiguratsioonis mõningaid muudatusi tegema, kuid "toorete" mallidega töötamine on ebamugav. See võib olla kasulik, kui arendajad soovivad käigupealt liiklusega katseid läbi viia.

JWT valideerimine

JSON-i veebilubade sisseehitatud valideerimise olemasolu kasutaja autoriseerimiseks ja valideerimiseks lõpprakendusele.

Konfiguratsiooni kohandamise võimalused

Malli laiendatavus selles mõttes, et teil on mehhanismid, mis võimaldavad teil standardsetele konfiguratsioonimallidele lisada oma direktiive, lippe jne.

Põhilised DDOS-i kaitsemehhanismid

Lihtsad kiiruspiirangu algoritmid või keerulisemad liikluse filtreerimisvalikud, mis põhinevad aadressidel, valgetel nimekirjadel, riikidel jne.

Taotle jälge

Võimalus jälgida, jälgida ja siluda taotlusi Ingressidest konkreetsetele teenustele / kaustadele ja ideaalis ka teenuste / kaustade vahel.

WAF

Toetama rakenduse tulemüür.

Kontrollerid

Kontrollerite nimekiri moodustati lähtuvalt ametlik Kubernetese dokumentatsioon и see tabel. Mõned neist jätsime ülevaatest välja spetsiifilisuse või madala levimuse tõttu (varajane arengustaadium). Ülejäänuid arutatakse allpool. Alustame lahenduste üldise kirjeldusega ja jätkame kokkuvõtliku tabeliga.

Sissepääs Kubernetesest

Koduleht: github.com/kubernetes/ingress-nginx
Litsents: Apache 2.0

See on Kubernetese ametlik kontroller ja seda arendab kogukond. Nimest nähtub, et see põhineb nginxil ja seda täiendavad erinevad Lua pistikprogrammid, mida kasutatakse lisafunktsioonide rakendamiseks. Nginxi enda populaarsuse ja kontrollerina kasutamisel tehtud minimaalsete muudatuste tõttu võib see valik olla keskmise (veebikogemusega) inseneri jaoks kõige lihtsam ja lihtsamini konfigureeritav.

Ingress by NGINX Inc.

Koduleht: github.com/nginxinc/kubernetes-ingress
Litsents: Apache 2.0

Nginxi arendajate ametlik toode. Sellel on tasuline versioon NGINX Plus. Peamine idee on kõrge stabiilsuse tase, pidev tagasiühilduvus, kõrvaliste moodulite puudumine ja deklareeritud suurenenud kiirus (võrreldes ametliku kontrolleriga), mis on saavutatud Lua tagasilükkamise tõttu.

Tasuta versioon on oluliselt vähenenud, sealhulgas isegi ametliku kontrolleriga võrreldes (samade Lua moodulite puudumise tõttu). Samas on tasulisel üsna lai lisafunktsionaalsus: reaalajas mõõdikud, JWT valideerimine, aktiivne tervisekontroll jpm. Oluline eelis NGINX Ingressi ees on TCP / UDP liikluse täielik tugi (ja ka kogukonna versioonis!). Miinus - puudumine liikluse jaotamise funktsioon, millel on aga "arendajate jaoks kõrgeim prioriteet", kuid selle rakendamine võtab aega.

Kong Ingress

Koduleht: github.com/Kong/kubernetes-ingress-controller
Litsents: Apache 2.0

Toote on välja töötanud Kong Inc. kahes versioonis: kommerts- ja tasuta. Põhineb nginxil, mida on laiendatud suure hulga Lua moodulitega.

Algselt keskenduti API päringute töötlemisele ja marsruutimisele, st. API Gatewayna, kuid hetkel on sellest saanud täisväärtuslik Ingressi kontroller. Peamised eelised: palju lisamooduleid (sh kolmandate osapoolte arendajatelt), mida on lihtne paigaldada ja seadistada ning mille abil realiseeritakse lai valik lisavõimalusi. Sisseehitatud funktsioonid pakuvad aga juba palju võimalusi. Töö konfigureerimine toimub CRD ressursside abil.

Toote oluline omadus – sama kontuuri sees töötamine (ristnimeruumi asemel) on vastuoluline teema: mõne jaoks tundub see puudusena (peate iga kontuuri jaoks üksusi tootma) ja kellegi jaoks on see funktsioon ( bоSuurem isoleerituse tase, nagu kui üks kontroller on katki, piirdub probleem ainult vooluringiga).

Traefik

Koduleht: github.com/containous/traefik
Litsents: MIT

Puhverserver, mis loodi algselt töötama mikroteenuste ja nende dünaamilise keskkonna päringu marsruutimisega. Seega palju kasulikke funktsioone: konfiguratsiooni värskendamine ilma taaskäivitamiseta, suure hulga tasakaalustamismeetodite tugi, veebiliides, mõõdikute edastamine, erinevate protokollide tugi, REST API, kanaari väljalasked ja palju muud. Veel üks tore funktsioon on Let's Encrypti sertifikaatide tugi. Puuduseks on see, et kõrge kättesaadavuse (HA) korraldamiseks peab kontroller installima ja ühendama oma KV-mälu.

HAProxy

Koduleht: github.com/jcmoraisjr/haproxy-ingress
Litsents: Apache 2.0

HAProxy on juba ammu tuntud puhverserveri ja liikluse tasakaalustajana. Kubernetese klastri osana pakub see "pehmet" konfiguratsiooni värskendust (ilma liikluse kadumiseta), DNS-il põhinevat teenuse avastamist, dünaamilist konfiguratsiooni API abil. Konfiguratsioonimalli täielik kohandamine CM-i asendamisega võib olla atraktiivne, aga ka võimalus kasutada selles Sprig teegi funktsioone. Üldiselt on lahenduse põhirõhk suurel kiirusel, selle optimeerimisel ja kulutatud ressursside efektiivsusel. Kontrolleri eeliseks on rekordarvu erinevate tasakaalustusmeetodite tugi.

Voyager

Koduleht: github.com/appscode/voyager
Litsents: Apache 2.0

Põhineb HAproxy kontrolleril, mis on positsioneeritud universaalse lahendusena, mis toetab paljude pakkujate laia valikut funktsioone. Pakutakse võimalust L7 ja L4 liikluse tasakaalustamiseks ning TCP L4 liikluse tasakaalustamist tervikuna võib nimetada lahenduse üheks võtmeomaduseks.

Kontuur

Koduleht: github.com/heptio/contour
Litsents: Apache 2.0

See lahendus ei põhine ainult Envoy'l: selle töötas välja ühiselt selle populaarse puhverserveri autoritega. Oluline funktsioon on võimalus eraldada Ingressi ressursside juhtimine IngressRoute CRD ressursside abil. Organisatsioonidel, kus on palju sama klastrit kasutavaid arendusmeeskondi, aitab see maksimeerida naaberahelate liiklusega töötamise turvalisust ja kaitsta neid vigade eest sissepääsuressursside muutmisel.

Samuti pakub see laiendatud tasakaalustamismeetodite komplekti (seal on taotluste peegeldamine, automaatne kordus, päringute määra piiramine ja palju muud), liiklusvoo ja tõrgete üksikasjalikku jälgimist. Võib-olla on kellegi jaoks märkimisväärne puudus kleepuvate seansside toetuse puudumine (kuigi töö juba käimas).

Istio Ingress

Koduleht: istio.io/docs/tasks/traffic-management/ingress
Litsents: Apache 2.0

Terviklik teenindusvõrgu lahendus, mis ei ole ainult sissepääsukontroller, mis haldab väljast sissetulevat liiklust, vaid juhib ka kogu liiklust klastri sees. Kapoti all kasutatakse Envoyt iga teenuse külgkorvi puhverserverina. Sisuliselt on tegemist suure kombainiga, mis “suudab kõike”, mille põhiideeks on maksimaalne juhitavus, laiendatavus, turvalisus ja läbipaistvus. Sellega saate täpsustada liikluse marsruutimist, juurdepääsu lubamist teenuste vahel, tasakaalustamist, jälgimist, kanaari väljalaseid ja palju muud. Loe Istio kohta lähemalt artiklite sarjast "Istioga tagasi mikroteenuste juurde'.

Suursaadik

Koduleht: github.com/datawire/ambassador
Litsents: Apache 2.0

Teine lahendus, mis põhineb Envoy'l. Sellel on tasuta ja kommertsversioonid. See on positsioneeritud kui "Kubernetese täielikult omapärane", mis toob kaasa vastavad eelised (tihe integratsioon K8s klastri meetodite ja üksustega).

Võrdlustabel

Niisiis, artikli kulminatsioon on see tohutu tabel:

Kubernetese Ingressi kontrollerite ülevaade ja võrdlus

Seda saab lähemalt vaadata ja see on saadaval ka vormingus Google'i arvutustabelid.

Kokkuvõtteks

Selle artikli eesmärk on anda täielikum (mitte mingil juhul ammendav!) arusaam sellest, millist valikut konkreetsel juhul teha. Nagu tavaliselt, on igal kontrolleril oma eelised ja puudused ...

Kubernetese klassikaline Ingress on hea oma kättesaadavuse ja tõestamise, piisavalt rikkalike funktsioonide poolest - üldiselt peaks sellest "silmadele piisama". Kui aga stabiilsusele, funktsioonide tasemele ja arendusele on kõrgendatud nõuded, peaksite pöörama tähelepanu Ingressile koos NGINX Plusi ja tasulise tellimusega. Kongil on kõige rikkalikum pistikprogrammide komplekt (ja vastavalt ka nende pakutavad võimalused) ning tasulises versioonis on neid veelgi rohkem. Sellel on palju võimalusi töötada API lüüsina, CRD ressurssidel põhinev dünaamiline konfiguratsioon, aga ka Kubernetese põhiteenused.

Kuna tasakaalustamis- ja autoriseerimismeetodite nõuded on suurenenud, vaadake Traefik ja HAProxy. Need on avatud lähtekoodiga projektid, mis on aastate jooksul end tõestanud, väga stabiilsed ja aktiivselt arenevad. Contour on olnud väljas juba paar aastat, kuid see näeb endiselt liiga noor välja ja sellele on Envoy peale lisatud ainult põhifunktsioonid. Kui rakenduse ees on nõuded WAF-i olemasolu / manustamise kohta, peaksite pöörama tähelepanu samale Kubernetese või HAProxy sisendile.

Ja funktsioonide poolest on kõige rikkalikumad Envoy peale ehitatud tooted, eriti Istio. Tundub, et tegemist on tervikliku lahendusega, mis "võib teha kõike", mis aga tähendab ka oluliselt kõrgemat sisenemisläve seadistamisel/käivitamisel/haldamisel kui muud lahendused.

Standardkontrolleriks oleme valinud ja kasutame siiani Kubernetese Ingressi, mis katab 80-90% vajadustest. See on üsna töökindel, hõlpsasti konfigureeritav ja laiendatav. Üldiselt peaks see konkreetsete nõuete puudumisel sobima enamikule klastritele/rakendustele. Samadest universaalsetest ja suhteliselt lihtsatest toodetest võib soovitada Traefikut ja HAProxyt.

PS

Loe ka meie blogist:

Allikas: www.habr.com

Lisa kommentaar