„Kubernetes“ skirtų „Ingress“ valdiklių apžvalga ir palyginimas

„Kubernetes“ skirtų „Ingress“ valdiklių apžvalga ir palyginimas

Paleidžiant Kubernetes klasterį konkrečiai programai, turite suprasti, ką pati programa, verslas ir kūrėjai suteikia šiam ištekliui. Turėdami šią informaciją galite pradėti priimti architektūrinį sprendimą ir ypač pasirinkti konkretų Ingress valdiklį, kurio šiandien jau yra daug. Siekdami susidaryti pagrindinį supratimą apie galimas parinktis neperžiūrėdami daugybės straipsnių / dokumentacijos ir pan., parengėme šią apžvalgą, įskaitant pagrindinius (gamybai paruoštus) Ingress valdiklius.

Tikimės, kad tai padės kolegoms renkantis architektūrinį sprendimą – bent jau taps atskaitos tašku norint gauti išsamesnės informacijos ir atlikti praktinius eksperimentus. Anksčiau mes išstudijavome kitą panašią medžiagą internete ir, kaip bebūtų keista, neradome nei vienos daugiau ar mažiau išsamios, o svarbiausia – struktūrizuotos apžvalgos. Taigi, užpildykime šią spragą!

kriterijai

Iš esmės, norint atlikti palyginimą ir gauti bet kokį naudingą rezultatą, reikia suprasti ne tik dalykinę sritį, bet ir turėti konkretų kriterijų sąrašą, kuris nustatys tyrimo vektorių. Nepretenduodami į tai, kad analizuojame visus galimus Ingress / Kubernetes naudojimo atvejus, stengėmės išryškinti pačius bendriausius reikalavimus valdikliams – būkite pasiruošę, kad bet kuriuo atveju turėsite išstudijuoti visą savo specifiką ir detales atskirai.

Bet pradėsiu nuo ypatybių, kurios tapo tokios žinomos, kad yra įdiegtos visuose sprendimuose ir į jas neatsižvelgiama:

  • dinaminis paslaugų atradimas (service discovery);
  • SSL nutraukimas;
  • darbas su internetiniais lizdais.

Dabar apie palyginimo taškus:

Palaikomi protokolai

Vienas iš pagrindinių atrankos kriterijų. Jūsų programinė įranga gali neveikti naudojant standartinį HTTP arba gali reikėti dirbti su keliais protokolais vienu metu. Jei jūsų atvejis nestandartinis, būtinai atsižvelkite į šį veiksnį, kad vėliau nereikėtų iš naujo konfigūruoti grupės. Visiems valdikliams palaikomų protokolų sąrašas skiriasi.

programinė įranga esmėje

Yra keletas taikymo parinkčių, kuriomis pagrįstas valdiklis. Populiarūs yra nginx, traefik, haproxy, envoy. Apskritai tai gali neturėti per daug įtakos srauto priėmimui ir perdavimui, tačiau visada naudinga žinoti galimus niuansus ir ypatumus, kas yra po gaubtu.

Eismo maršrutas

Kuo remiantis galite priimti sprendimą nukreipti srautą į konkrečią paslaugą? Paprastai tai yra pagrindinis kompiuteris ir kelias, tačiau yra ir papildomų galimybių.

Vardų erdvė grupėje

Vardų erdvė – tai galimybė logiškai padalyti išteklius „Kubernetes“ (pavyzdžiui, į sceną, gamybą ir pan.). Yra „Ingress“ valdiklių, kuriuos reikia įdiegti atskirai kiekvienoje vardų erdvėje (ir tada jis gali nukreipti srautą tik į šios erdvės ankštis). Ir yra tokių (ir akivaizdi jų dauguma), kurie visame klasteryje veikia globaliai – juose srautas siunčiamas į bet kurią klasterio grupę, neatsižvelgiant į vardų erdvę.

Pavyzdžiai prieš srovę

Kaip užtikrinamas srautas, nukreipiamas į sveikus programos ir paslaugų egzempliorius? Yra parinkčių su aktyviu ir pasyviu patikrinimu, bandymais, grandinės pertraukikliais (Daugiau informacijos žr., pvz. straipsnis apie Istio), pačių atliekami sveikatos patikrinimai (pasirinktiniai sveikatos patikrinimai) ir kt. Labai svarbus parametras, jei keliate aukštus reikalavimus dėl prieinamumo ir sugedusių paslaugų laiku pašalinimo iš balansavimo.

Balansavimo algoritmai

Yra daug variantų: nuo tradicinių apyrankė prie egzotikos rdp-slapukas, taip pat individualios funkcijos, pvz lipnios sesijos.

Autentifikavimas

Kokias autorizavimo schemas palaiko duomenų valdytojas? Pagrindinis, santrauka, oauth, išorinis autentifikavimas – manau, kad šios parinktys turėtų būti žinomos. Tai svarbus kriterijus, jei yra daug kūrėjo (ir (arba) privačių) kilpų, kurios pasiekiamos per Ingress.

Eismo paskirstymas

Ar valdiklis palaiko tokius dažniausiai naudojamus srauto paskirstymo mechanizmus kaip canary rollouts (kanarinis), A/B testavimas, eismo atspindėjimas (veidrodis / šešėliavimas)? Tai tikrai skaudi tema programoms, kurioms reikalingas tikslus ir tikslus srauto valdymas, siekiant produktyvaus testavimo, produkto klaidų derinimo neprisijungus (arba su minimaliais nuostoliais), srauto analize ir pan.

Mokamas abonementas

Ar yra mokama valdiklio parinktis su patobulintomis funkcijomis ir (arba) technine pagalba?

Grafinė vartotojo sąsaja (žiniatinklio vartotojo sąsaja)

Ar yra kokia nors GUI valdiklio konfigūracijai valdyti? Daugiausia dėl patogumo ir (arba) tiems, kuriems reikia atlikti kai kuriuos Ingress konfigūracijos pakeitimus, tačiau dirbti su „neapdorotais“ šablonais yra nepatogu. Tai gali būti naudinga, jei kūrėjai nori atlikti bet kokius eksperimentus su eismu.

JWT patvirtinimas

Galimybė naudoti įtaisytąjį JSON žiniatinklio prieigos raktų patvirtinimą, skirtą galutinės programos autorizacijai ir naudotojo patvirtinimui.

Konfigūracijos pritaikymo galimybės

Šablonų išplėtimas, nes yra mechanizmų, leidžiančių prie standartinių konfigūracijos šablonų pridėti savo direktyvas, vėliavėles ir pan.

Pagrindiniai DDOS apsaugos mechanizmai

Paprasti greičio apribojimo algoritmai arba sudėtingesnės parinktys srautui filtruoti pagal adresus, baltuosius sąrašus, šalis ir kt.

Prašyti pėdsakų

Galimybė stebėti, sekti ir derinti užklausas iš Ingress į konkrečias paslaugas / modulius, o idealiu atveju - tarp paslaugų / paketų.

WAF

Remti programos ugniasienė.

Valdikliai

Kontrolierių sąrašas buvo sudarytas remiantis oficiali Kubernetes dokumentacija и ši lentelė. Kai kuriuos iš jų neįtraukėme į apžvalgą dėl jų specifiškumo arba mažo paplitimo (ankstyvoji vystymosi stadija). Likusieji aptariami toliau. Pradėkime nuo bendro sprendimų aprašymo ir tęskime nuo suvestinės lentelės.

Įėjimas iš Kubernetes

Interneto svetainė: github.com/kubernetes/ingress-nginx
Licencija: Apache 2.0

Tai yra oficialus „Kubernetes“ valdiklis, kurį kuria bendruomenė. Akivaizdu, kad iš pavadinimo jis pagrįstas „nginx“ ir yra papildytas kitokiu „Lua“ papildinių rinkiniu, naudojamu papildomoms funkcijoms įdiegti. Dėl paties nginx populiarumo ir minimalių jo modifikacijų, kai naudojamas kaip valdiklis, ši parinktis gali būti lengviausia ir lengviausia konfigūruoti paprastam inžinieriui (su žiniatinklio patirtimi).

„NGINX Inc.“ įėjimas.

Interneto svetainė: github.com/nginxinc/kubernetes-ingress
Licencija: Apache 2.0

Oficialus „nginx“ kūrėjų produktas. Yra mokama versija, pagrįsta NGINX Plus. Pagrindinė idėja yra aukštas stabilumo lygis, nuolatinis suderinamumas atgal, pašalinių modulių nebuvimas ir deklaruotas padidintas greitis (palyginti su oficialiu kontrolieriu), pasiektas dėl Lua atsisakymo.

Nemokama versija yra žymiai sumažinta, net ir lyginant su oficialiu valdikliu (dėl tų pačių Lua modulių trūkumo). Tuo pačiu mokamas turi gana platų papildomą funkcionalumą: realaus laiko metriką, JWT patvirtinimą, aktyvius sveikatos patikrinimus ir kt. Svarbus pranašumas, palyginti su NGINX Ingress, yra visiškas TCP / UDP srauto palaikymas (taip pat ir bendruomenės versijoje!). Minusas - nebuvimas srauto paskirstymo ypatybės, kurios vis dėlto „turi didžiausią prioritetą kūrėjams“, tačiau jas įgyvendinti reikia laiko.

Kong Ingress

Interneto svetainė: github.com/Kong/kubernetes-ingress-controller
Licencija: Apache 2.0

Produktą sukūrė Kong Inc. dvi versijos: komercinė ir nemokama. Remiantis nginx, kurios galimybes praplečia daugybė Lua modulių.

Iš pradžių buvo orientuota į API užklausų apdorojimą ir nukreipimą, t.y. kaip API vartai, tačiau šiuo metu jis tapo visaverčiu Ingress valdikliu. Pagrindiniai privalumai: daug papildomų modulių (taip pat ir trečiųjų šalių kūrėjų), kuriuos lengva įdiegti ir konfigūruoti ir kurių pagalba įdiegta daugybė papildomų funkcijų. Tačiau įmontuotos funkcijos jau suteikia daug galimybių. Darbo konfigūracija atliekama naudojant CRD išteklius.

Svarbi gaminio savybė – darbas vienoje grandinėje (o ne kryžminės vardų erdvės) yra prieštaringa tema: vieniems tai atrodys kaip trūkumas (kiekvienai grandinei reikia sukurti objektus), o kitiems tai bus funkcija. (bоaukštesnis izoliacijos lygis, nes jei vienas valdiklis sugenda, tada problema apsiriboja tik viena grandine).

Traefik

Interneto svetainė: github.com/containous/traefik
Licencija: MIT

Tarpinis serveris, kuris iš pradžių buvo sukurtas dirbti su mikropaslaugų ir jų dinaminės aplinkos užklausų maršrutizavimu. Taigi, daug naudingų funkcijų: konfigūracijos atnaujinimas visiškai neperkraunant, daugybės balansavimo metodų palaikymas, žiniatinklio sąsaja, metrikų persiuntimas, įvairių protokolų palaikymas, REST API, kanarėlių leidimai ir daug daugiau. Dar viena maloni funkcija yra „Let's Encrypt“ sertifikatų palaikymas. Trūkumas yra tas, kad norint organizuoti aukštą prieinamumą (HA), valdiklis turės įdiegti ir prijungti savo KV saugyklą.

HAProxy

Interneto svetainė: github.com/jcmoraisjr/haproxy-ingress
Licencija: Apache 2.0

HAProxy jau seniai žinomas kaip tarpinis serveris ir eismo balansuotojas. Kaip „Kubernetes“ klasterio dalis, jis siūlo „minkštą“ konfigūracijos naujinimą (neprarandant srauto), paslaugos aptikimą, pagrįstą DNS, dinaminę konfigūraciją naudojant API. Gali būti patrauklu visiškai tinkinti konfigūracijos šabloną pakeičiant CM, taip pat galimybę jame naudoti Sprig bibliotekos funkcijas. Apskritai, pagrindinis sprendimo akcentas yra didelis greitis, jo optimizavimas ir sunaudojamų išteklių efektyvumas. Valdiklio privalumas yra rekordinio skaičiaus skirtingų balansavimo metodų palaikymas.

Keliautojas

Interneto svetainė: github.com/appscode/voyager
Licencija: Apache 2.0

Valdiklis, pagrįstas HAproxy, kuris yra universalus sprendimas, palaikantis plačias daugelio tiekėjų galimybes. Tai suteikia galimybę subalansuoti srautą L7 ir L4, o TCP L4 srauto balansavimą apskritai galima vadinti viena iš pagrindinių sprendimo savybių.

Kontūras

Interneto svetainė: github.com/heptio/contour
Licencija: Apache 2.0

Šis sprendimas pagrįstas ne tik Envoy: jį sukūrė kartu su šio populiaraus tarpinio serverio autoriais. Svarbi savybė yra galimybė atskirti Ingress išteklių valdymą naudojant IngressRoute CRD išteklius. Organizacijoms, turinčioms kelias kūrimo komandas, naudojančias vieną klasterį, tai padeda maksimaliai padidinti gretimų kilpų srauto tvarkymo saugumą ir apsaugoti jas nuo klaidų keičiant įėjimo išteklius.

Ji taip pat siūlo išplėstą balansavimo metodų rinkinį (užklausų atspindėjimas, automatiniai pasikartojimai, užklausų dažnio apribojimai ir daug daugiau), detalų srauto ir gedimų stebėjimą. Galbūt kai kuriems reikšmingas trūkumas bus klijuotų seansų palaikymo trūkumas (nors ir darbas jau vyksta).

Istio Ingress

Interneto svetainė: istio.io/docs/tasks/traffic-management/ingress
Licencija: Apache 2.0

Išsamus paslaugų tinklelio sprendimas, kuris yra ne tik „Ingress“ valdiklis, valdantis įeinantį srautą iš išorės, bet ir valdantis visą srautą klasterio viduje. Po gaubtu „Envoy“ naudojamas kaip kiekvienos paslaugos šoninės priekabos tarpinis serveris. Iš esmės tai didelis kombainas, „galintis bet ką“, o pagrindinė jo idėja – maksimalus valdomumas, išplečiamumas, saugumas ir skaidrumas. Su juo galite tiksliai sureguliuoti srauto maršrutą, prieigos tarp paslaugų leidimą, balansavimą, stebėjimą, kanalų leidimus ir dar daugiau. Daugiau apie Istio skaitykite straipsnių cikle "Atgal į mikroservisus su Istio".

Ambasadorius

Interneto svetainė: github.com/datawire/ambassador
Licencija: Apache 2.0

Kitas sprendimas, pagrįstas pasiuntiniu. Yra nemokama ir komercinė versija. Pateikta kaip „visiškai gimtoji Kubernetes“, o tai duoda atitinkamą naudą (glaudži integracija su K8s klasterio metodais ir objektais).

palyginimo lentelė

Taigi, straipsnio kulminacija yra ši didžiulė lentelė:

„Kubernetes“ skirtų „Ingress“ valdiklių apžvalga ir palyginimas

Jį galima spustelėti, kad pamatytumėte iš arčiau, ir taip pat yra formatu "Google" skaičiuoklės.

Apibendrinant

Straipsnio tikslas – suteikti išsamesnį supratimą (tačiau visai neišsamų!), ką pasirinkti konkrečiu atveju. Kaip įprasta, kiekvienas valdiklis turi savų privalumų ir trūkumų...

Klasikinis „Kubernetes“ „Ingress“ yra geras dėl savo prieinamumo ir patikrinimo, pakankamai turtingų funkcijų - apskritai jo turėtų pakakti akims. Tačiau jei yra didesni reikalavimai stabilumui, funkcijų lygiui ir plėtrai, turėtumėte atkreipti dėmesį į Ingress su NGINX Plus ir mokama prenumerata. Kongas turi turtingiausią priedų rinkinį (ir atitinkamai jų teikiamas galimybes), o mokamoje versijoje jų yra dar daugiau. Jis turi daug galimybių dirbti kaip API šliuzas, dinaminė konfigūracija, pagrįsta CRD ištekliais, taip pat pagrindinės Kubernetes paslaugos.

Dėl didesnių reikalavimų balansavimo ir autorizacijos metodams pažvelkite į Traefik ir HAProxy. Tai atvirojo kodo projektai, pasiteisinę per daugelį metų, labai stabilūs ir aktyviai besivystantys. „Contour“ buvo išleistas jau porą metų, tačiau jis vis dar atrodo per jaunas ir turi tik pagrindines funkcijas, pridėtas prie „Envoy“. Jei yra WAF buvimo / įterpimo prieš programą reikalavimai, turėtumėte atkreipti dėmesį į tą patį „Kubernetes“ arba „HAPRoxy“ įėjimą.

O turtingiausi yra produktai, sukurti ant Envoy, ypač Istio. Atrodo, kad tai yra išsamus sprendimas, kuris „gali padaryti viską“, o tai taip pat reiškia žymiai didesnę konfigūravimo / paleidimo / administravimo kliūtį nei kiti sprendimai.

Pasirinkome ir vis dar naudojame Kubernetes Ingress kaip standartinį valdiklį, kuris patenkina 80-90% mūsų poreikių. Tai gana patikima, lengvai konfigūruojama ir plečiama. Apskritai, jei nėra konkrečių reikalavimų, jis turėtų tikti daugumai grupių / programų. Iš tų pačių universalių ir gana paprastų gaminių galime rekomenduoti Traefik ir HAProxy.

PS

Taip pat skaitykite mūsų tinklaraštyje:

Šaltinis: www.habr.com

Добавить комментарий