Kubernetes'e Ingress kontrollerite ülevaade ja võrdlus

Kubernetes'e Ingress kontrollerite ülevaade ja võrdlus

Kubernetes klastrit käivitades on oluline mõista, millised nõuded selle ressursi suhtes on rakendusel, ärioludel ja arendajatel. Kui see teave on teada, saab alustada arhitektuurilise lahenduse valimist, sealhulgas konkreetse Ingress-kontrolleri valimist, kuna neid on praegu juba palju. Selleks, et saada põhipilti olemasolevatest variantidest ilma hulga artiklite/dokumendi uurimise vajaduseta, oleme koostanud selle ülevaate, lisades põhiaspekte (tootevalmid) Ingress-kontrollerite kohta.

Loodame, et see aitab kolleegidel arhitektuurilise lahenduse valimisel — vähemalt saab see olema lähtepunktiks põhjalikuma teabe ja praktiliste katsete jaoks. Varem oleme uurinud sarnaseid materjale võrgus ja, mis üllatav, ei leidnud ühtegi mõistlikult täielikku ja mis kõige tähtsam — struktureeritud — ülevaadet. Nii et täidame selle tühiku!

Kriteeriumid

Kuna võrreldakse üldiselt ja saadakse mingi kasulik tulemus, on oluline mõista mitte ainult teemat, vaid ka omada konkreetset kriteeriumide loetelu, mis suunavad uurimistööd. Mitte pretendeerides Ingress/Kubernetes kõikide võimalike kasutusjuhtude analüüsile, oleme püüdnud välja tuua kõige üldisemad nõudmised kontrollereid käsitlevalt — olge valmis, et kogu oma spetsiifilisusega tuleb igal juhul eraldi uurida.

Kuid alustan omadustest, mis on saanud nii harjumuseks, et neid on ellu viidud kõikides lahendustes ja ei käsitleta:

  • dünaamiline teenuste avastamine (service discovery);
  • SSL-terminatsioon;
  • töötamine websocketidega.

Nüüd – võrdlemise punktidest:

Toetatud protokollid

Üks põhilisi kriteeriume valiku tegemisel. Teie tarkvara ei pruugi töötada standardse HTTP kujul või nõuda toimimist mitmesuguste protokollide kaudu. Kui teie juhtum on mittestandardne, siis kindlasti arvestage seda tegurit, et hiljem ei peaks klastrit ümber seadistama. Kõikidel kontrollereil varieerub toetatavate protokollide nimekiri.

Tarkvara aluseks

Kontroller põhineb mitmetel rakendustel. Populaarsed on nginx, traefik, haproxy, envoy. Üldiselt ei pruugi see oluliselt mõjutada seda, kuidas liiklust vastu võtetakse ja edastatakse, kuid on alati kasulik teada võimalikke nüansse ja eripärasid, mis on «kapoti all».

Liikluse suunamine

Millisel alusel saab otsustada, kuhu liiklus suunatakse? Tavalised on host ja path, kuid on ka täiendavad võimalused.

Nimi-ala klastris

Nimi-ala (namespace) on võimalus loogiliselt jagada ressursse Kubernetes'is (nt stage, production jne). On Ingress-kontrollereid, mis tuleb paigaldada eraldi igasse nimi-alasse (siis suunab see liikluse ainult selle ala pod'idesse). Samuti on olemas selliseid (ja neid on selgelt enamus), mis töötavad globaalset kogu klastris — nendesse suunatakse liiklus igasse klastri pod'i, sõltumata nimi-alast.

Proovide kontroll põhjendus

Kuidas tagatakse, et liiklus suunatakse tervetesse rakenduse ja teenuse eksemplaridesse? On võimalusi aktiivsete ja passiivsete kontrollide, uuesti katsete (retries), circuit breaker'ite kasutamiseks. (täiendavate detailide kohta vaata näiteks artiklit Istio kohta), kohandatud olekupuuduste kontrollide (custom health checks) ja muu sarnase kohta. See on väga oluline parameeter, kui sul on kõrged nõudmised saadavusele ja kiirele häirete lahendamisele.

Tasakaalustamisalgoritmid

Siin on palju võimalusi: alates traditsioonilistest ring-levi kuni eksootilisteni nagu rdp-cookie, ning ka eraldi võimalused nagu kleepuvad sessioonid.

Autentimine

Milliseid autentimiskeeme toetab kontroller? Basic, digest, oauth, external-auth — arvan, et need valikud peaksid olema tuttavad. See on oluline kriteerium, kui kasutatakse palju arendajate kontuure (ja/või lihtsalt suletud), millele pääseb ligi läbi Ingressi.

Liiklustõhusus

Kas kontroller toetab selliseid sageli kasutatavaid liikluse jaotamise mehhanisme, nagu kanarindade juurutamine (canary), A/B-testimine, liikluse peegeldamine (mirroring/shadowing)? See on tõeliselt tundlik teema rakendustele, mis vajavad täpset ja delikaatset liikluse haldamist toote testimiseks, tootmisvigade tõrkeotsimiseks mitte reaalajas (või minimeeritud kaotustega), liikluse analüüsimiseks jne.

Tasuline tellimus

Kas kontrolleril on tasuline versioon, millel on laiendatud funktsioonid ja/või tehniline tugi?

Graafiline kasutajaliides (Web UI)

Kas kontrolleri seadete haldamiseks on olemas mingi graafiline kasutajaliides? Peamiselt mugavuse tõttu ja/või neile, kes peavad tegema mingeid muudatusi Ingressi seadistustes, kuid „toorete” malli kasutamine on ebamugav. See võib osutuda kasulikuks, kui arendajad soovivad liikluse kallal katsetada.

JWT-i valideerimine

Sisseehitatud JSON web-tokenite kontroll autoriseerimiseks ja lõppkasutaja valideerimiseks.

Konfiguratsioonifaili kohandamise võimalused

Mallide laiendatavus, mis võimaldab standardsete konfiguratsioonimallide lisada oma direktiive, lippe jms.

Põhimehhanismid DDoS-i eest kaitsmiseks

Lihtsad vajaduse piiramisalgoritmid või keerulisemad võimalused liikluse filtreerimiseks aadresside, valgete nimekirjade, riikide jms alusel.

Küsimuste jälgimine

Ingress’teki belirli hizmetlere/pod’lara yönelik gözlemleme, takip etme ve hata ayıklama yetenekleri, ideal olarak hizmetler/pod’lar arasında da yapılmalıdır.

WAF

Toetamine uygulama firewall’ı.

Ingress Kontrolcüsü

Kontrolcülerin listesi şu temel tabloda oluşturulmuştur Kubernetes ametlikest dokumentidest ja bu tablo. Bazılarını, belirli bir yere özgü veya yaygın olmayan (erken aşama gelişim) olmaları nedeniyle incelemelerimizden çıkardık. Geriye kalanlar aşağıda ele alınmıştır. Genel çözümlerle başlayıp ardından özet tabloyla devam edelim.

Kubernetes Ingress’i

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

Bu, topluluk tarafından geliştirilen resmi bir Kubernetes kontrolcüsüdür. Adından da anlaşılacağı gibi, nginx üzerine inşa edilmiştir ve ek yetenekler sağlamak için çeşitli Lua eklentileri ile zenginleştirilmiştir. Nginx’in popülaritesinin ve bir kontrolcü olarak kullanıldığında üzerindeki minimum modifikasyonun neden olduğu, ortalama bir mühendis (web deneyimi olan) tarafından en basit ve anlaşılır yapılandırma seçeneği olabilir.

NGINX Inc. Ingress’i

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

Nginx geliştiricilerinin resmi ürünüdür. Ücretli bir versiyonu vardır. NGINX Plus. Peamine idee on kõrge stabiilsuse tase, pidev tahesündmuste ühilduvus, väliste moodulite puudumine ja väidetavalt suurenenud kiirus (võrreldes ametliku kontrolleriga), mis on saavutatud Lua'ist loobumisega.

Tasuta versioon on oluliselt kärbitud, sealhulgas isegi ametliku kontrolleriga võrreldes (seoses endiste Lua-moodulite puudumisega). Tasuline versioon peab sisaldama piisaval määral täiendavat funktsionaalsust: reaalajas meetmed, JWT-sertifitseerimine, aktiivsed tervisekontrollid jne. Oluline eelis NGINX Ingress'i ees on täielik TCP/UDP liikluse tugi (ka kogukonna versioonis!). Miinus - puudumine funktsioonide osas liikluse jagamiseks, mis „on arendajatele maksimaalse prioriteediga“, kuid vajab rakendamiseks aega.

Kong Ingress

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

Toode, mida arendab Kong Inc. kahes variandis: kommertslik ja tasuta. Põhineb nginx'i platvormil, mille võimalusi on laiendatud suure hulga Lua-moodulitega.

Alguses keskendus see API päringute töötlemisele ja marsruutimisele, st API Gateway näol, kuid praeguseks on see saanud täieõiguslikuks sisenemisjuhtimiseks. Peamised eelised: arvukad lisamoodulid (sealhulgas ka kolmandate osapoolte arendajatelt), mida on lihtne paigaldada ja konfigureerida ning millega saab rakendada laia valikut täiendavaid võimalusi. Siiski pakuvad sisseehitatud funktsioonid juba palju võimalusi. Töö konfigureerimine toimub CRD-ressursside kaudu.

Toote oluline omadus — töö ühes piirios (cross-namespaced asemel) on vaieldav teema: mõned peavad seda puuduseks (iga piiriala jaoks tuleb luua üksused), aga kellegi jaoks on see funktsioon (suurem isolatsiooniaste, kuna kui üks kontroller rikki läheb, siis on probleem piiratud vaid ühe piirkonjaga).ogithub.com/containous/traefik

Traefik

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

Proksi, mis on algselt loodud töötama päringute marsruutimisega mikroteenuste ja nende dünaamilise keskkonna jaoks. Seetõttu on olemas mitmed kasulikud funktsioonid: konfigureerimise värskendamine ilma taaskäivitusteta, suur hulk tasakaalustusmeetodeid, veebiliidese toetus, mõõdikute edastamine, erinevate protokollide tugi, REST API, kanarilev release’id ja palju muud. Ka meeldivaks omaduseks on Let’s Encrypt sertifikaatide väljaandmine otse maailmas. Puuduseks on see, et kõrge kättesaadavuse (HA) korral peab kontrolleri jaoks olema installitud ja ühendatud oma KV-ladu.

HAProxy

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

HAProxy on juba ammu tuntud kui proksi ja liikluse tasakaalustaja. Kubernetes klastris pakub see "pehmet" konfiguratsiooniuuendust (ilma liikluse kaotamiseta), DNS-põhise teenuste avastamise ning dünaamilist konfigureerimist API abil. Atraktiivne võib olla täiendav konfiguratsioonimalli kohandamine CM-i asendamise kaudu ning võimalused kasutada selles Sprigi raamatukogu funktsioone. Üldiselt keskendub lahendus kõrgele töökiirusel, optimeeritusele ja tõhususele ressursikasutuses. Kontrolleri eeliseks on rekordarv erinevaid tasakaalustusmeetodeid.

Voyager

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

HAproxy põhine kontroller, mis positsioneerib end universaalse lahendusena, toetades laia valikut võimalusi paljudes teenusepakkujates. Pakub võimalust liikluse tasakaalustamiseks L7 ja L4 tasemel, kusjuures L4 TCP liikluse tasakaalustamist võib pidada lahenduse üheks peamiseks funktsiooniks.

Contour

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

Selle lahenduse aluseks on mitte ainult Envoy: see on välja töötatud koostöös selle populaarse proksi autoritega. Oluline omadus on Ingressi ressursihalduse jagamine CRD-ressursside IngressRoute abil. See aitab organisatsioonidel, millel on mitu arendusmeeskonda, kes kasutavad ühte klastrit, maksimeerida liikluse töötlemise turvalisust naaberkonfiguratsioonides ja kaitsta neid Ingressi ressursside muutmisest põhjustatud vigade eest.

Samuti on saadaval laiendatud tasakaalustamismeetodite komplekt (sh päringute peegeldamine, automaatsed kordused, päringute määra piiramine ja palju muud), põhjalik liikluse ja tõrgete jälgimine. Mõne jaoks võib olla oluline puudus sticky session’ite toe puudumine (kuigi tööd on juba käimas).

Istio Ingress

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

Kohandatud teenusemeeslahendus, mis on mitte ainult sissetuleva liikluse juhtiv Ingress-kontroller, vaid kontrollib ka kogu liiklust klastris. "Kapoti all" kasutatakse iga teenuse jaoks sidecar-proksina Envoy'd. Sisuliselt on see suur kombain, mis "võib kõike", ja selle peamine mõte on maksimaalne hallatavus, laiendatavus, turvalisus ja läbipaistvus. Selle abil saate peensusteni kohandada liikluse marsruutimist, juurdepääsu autoriseerimist teenuste vahel, koormuse tasakaalustamist, jälgimist, kanarirelease ja palju muud. Lisainfot Istio kohta leiate artiklite seeriast.Tagasi mikroteenustele Istio abil».

Ambassador

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

Veel üks lahendus Envoy põhjal. Saadaval tasuta ja kaubanduslikud versioonid. Positioneeritakse kui "täiesti Kuberneteses kodune", mis toob kaasa vastavad eelised (tihe integreeritus K8si meetodite ja üksustega).

Võrdlev tabel

Nii et artikli tipptase — see tohutu tabel:

Kubernetes'e Ingress kontrollerite ülevaade ja võrdlus

Seda saab klikkida, et näha detailsemalt, ja see on saadaval ka vormingus Google Sheets.

Kokkuvõtteks

Artikli eesmärk on anda põhjalikum arusaam (kuigi mitte ammendav!) sellest, milline valik sobib teie konkreetsele olukorrale. Nagu ikka, on igal kontrolleril omad plussid ja miinused...

Kubernetes'e klassikaline Ingress on hea oma kergesti kätte saadavuse ja usaldusväärsuse poolest ning pakub piisavalt rikkalikke võimalusi — tavaliselt piisab sellest täiesti. Siiski, kui on suurenenud nõudmised stabiilsuse, funktsioonide taseme ja arenduse osas, tasub kaaluda Ingress'i, mis kasutab NGINX Plusi ja tasulist tellimust. Kongil on lai valik pluginaid (ja seega ka nende poolt pakutavaid võimalusi), ning tasulises versioonis on neid isegi rohkem. Sellel on ulatuslikud võimalused töötada API väravana, dünaamiliseks konfigureerimiseks CRD-ressursside põhjal, ja Kubernetes'e põhiteenuste haldamiseks.

Kui teil on kõrgendatud nõuded tasakaalustamise ja autoriseerimise meetodite osas, vaadake Traefiki ja HAProxy poole. Need on avatud lähtekoodiga projektid, mille usaldusväärsust on aastate jooksul testitud ning mille stabiilsus ja areng on pidev. Contour ilmus turule paar aastat tagasi, kuid näeb endiselt liiga noor välja ja omab ainult baass funktsioone, mis on lisatud Envoy põhjal. Kui on nõudmisi WAF-i olemasolu/integreerimise osas enne rakendust, tasub vaadata ka Kubernetes'i Ingressi või HAProxy poole.

Funktsioonide poolest kõige rikkamad tooted on need, mis on ehitatud Envoy põhjal, eriti Istio. See paistab olevat kompleksne lahendus, mis 'suudab kõike', mis omakorda tähendab ka oluliselt kõrgemat sisenemispiiri konfiguratsiooni/käivitamise/halduse osas võrreldes teiste lahendustega.

Meie valikuks on olnud ja endiselt kasutatakse Kubernetes'elt saadud Ingress, mis katab 80–90% vajadustest. See on piisavalt usaldusväärne, kergesti seadistatav ja laiendatav. Üldiselt peaks see sobima enamikule klastritest/rakendustest, kui pole spetsiifilisi nõudeid. Sarnastest universaalsetest ja suhteliselt lihtsatest toodetest võib soovitada ka Traefik ja HAProxy.

P.S.

Lugege ka meie blogist:

Allikas: habr.com

Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid 🔥 Osta usaldusväärne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster