Pārskats un salīdzinājums par Kubernetes Ingress kontrolieriem

Pārskats un salīdzinājums par Kubernetes Ingress kontrolieriem

Palaižot Kubernetes klasteru konkrētai lietojumprogrammai, jums ir jāsaprot, ko pati lietojumprogramma, bizness un izstrādātāji rada Å”im resursam. Izmantojot Å”o informāciju, jÅ«s varat sākt pieņemt arhitektonisku lēmumu un, jo Ä«paÅ”i, izvēlēties konkrētu Ingress kontrolieri, kuru jau Å”odien ir liels skaits. Lai gÅ«tu priekÅ”statu par pieejamajām opcijām, neizpētot daudz rakstu/dokumentāciju utt., esam sagatavojuÅ”i Å”o pārskatu, iekļaujot galvenos (ražoÅ”anai gatavus) Ingress kontrollerus.

Ceram, ka tas palÄ«dzēs kolēģiem arhitektoniskā risinājuma izvēlē ā€“ vismaz kļūs par atspēriena punktu sÄ«kākas informācijas iegÅ«Å”anai un praktiskiem eksperimentiem. IepriekÅ” mēs pētÄ«jām citus lÄ«dzÄ«gus materiālus tÄ«klā un, dÄ«vainā kārtā, neatradām nevienu vairāk vai mazāk pilnÄ«gu un pats galvenais - strukturētu pārskatu. Tāpēc aizpildÄ«sim Å”o robu!

kritēriji

Principā, lai veiktu salÄ«dzinājumu un iegÅ«tu kādu noderÄ«gu rezultātu, jums ir jāsaprot ne tikai priekÅ”meta joma, bet arÄ« jābÅ«t konkrētam kritēriju sarakstam, kas noteiks pētÄ«juma vektoru. Nepretendējot uz visu iespējamo Ingress / Kubernetes lietoÅ”anas gadÄ«jumu analÄ«zi, mēs centāmies izcelt vispārÄ«gākās prasÄ«bas kontrolieriem - esiet gatavi, ka jebkurā gadÄ«jumā jums bÅ«s jāizpēta visa jÅ«su specifika un detaļas atseviŔķi.

Bet es sākÅ”u ar Ä«paŔībām, kas ir kļuvuÅ”as tik pazÄ«stamas, ka tās tiek ieviestas visos risinājumos un netiek ņemtas vērā:

  • dinamiska pakalpojumu atklāŔana (pakalpojumu atklāŔana);
  • SSL pārtraukÅ”ana;
  • darbs ar tÄ«mekļa ligzdām.

Tagad par salīdzināŔanas punktiem:

Atbalstītie protokoli

Viens no galvenajiem atlases kritērijiem. JÅ«su programmatÅ«ra var nedarboties ar standarta HTTP, vai arÄ« tai var bÅ«t nepiecieÅ”ams darbs ar vairākiem protokoliem vienlaikus. Ja jÅ«su korpuss ir nestandarta, noteikti ņemiet vērā Å”o faktoru, lai vēlāk nebÅ«tu jāpārkonfigurē klasteris. Visiem kontrolleriem atbalstÄ«to protokolu saraksts atŔķiras.

programmatūras pamatā

Ir vairākas lietojumprogrammu variācijas, uz kurām balstās kontrolieris. Populāri ir nginx, traefik, haproxy, envoy. VispārÄ«gā gadÄ«jumā tam var nebÅ«t lielas ietekmes uz to, kā satiksme tiek uztverta un pārraidÄ«ta, taču vienmēr ir noderÄ«gi zināt iespējamās nianses un iezÄ«mes tam, kas atrodas ā€œzem pārsegaā€.

Satiksmes marŔrutēŔana

Uz kā pamata var pieņemt lēmumu par satiksmes virzienu uz konkrēto pakalpojumu? Parasti tie ir saimniekdators un ceļŔ, taču ir arÄ« papildu iespējas.

Nosaukumtelpa klasterī

Namespace (namespace) - iespēja loÄ£iski sadalÄ«t resursus Kubernetes (piemēram, uz skatuves, producÄ“Å”ana utt.). Ir Ingress kontrolleri, kas katrā nosaukumvietā ir jāinstalē atseviŔķi (un tad tas var novirzÄ«t trafiku tikai uz Ŕīs telpas pākstÄ«m). Un ir tie (un to nepārprotami lielākā daļa), kas darbojas globāli visā klasterÄ« - tajos trafika tiek novirzÄ«ta uz jebkuru klastera apgabalu neatkarÄ«gi no nosaukumvietas.

Paraugi augÅ”tecēm

Kā trafiks tiek novirzÄ«ts uz veseliem lietojumprogrammu gadÄ«jumiem, pakalpojumiem? Ir iespējas ar aktÄ«vām un pasÄ«vām pārbaudēm, atkārtojumiem, automātiskiem slēdžiem (SÄ«kāku informāciju skatiet, piemēram, raksts par Istio), pielāgotas veselÄ«bas pārbaudes utt. Ä»oti svarÄ«gs parametrs, ja jums ir augstas prasÄ«bas attiecÄ«bā uz pieejamÄ«bu un neveiksmÄ«gu pakalpojumu savlaicÄ«gu izņemÅ”anu no balansÄ“Å”anas.

BalansēŔanas algoritmi

Ir daudz iespēju: no tradicionālās apaļŔ laupÄ«jums uz eksotiku rdp-sÄ«kdatne, kā arÄ« atseviŔķas funkcijas, piemēram, lipÄ«gās sesijas.

Autentifikācija

Kādas autorizācijas shēmas pārzinis atbalsta? Pamata, Ä«ssavilkums, oauth, ārējā autentifikācija ā€” es domāju, ka Ŕīm opcijām vajadzētu bÅ«t pazÄ«stamām. Tas ir svarÄ«gs kritērijs, ja ir daudz izstrādātāju (un/vai tikai privātu) cilpu, kurām var piekļūt, izmantojot Ingress.

Satiksmes sadale

Vai kontrolieris atbalsta tādus bieži lietotus satiksmes sadales mehānismus kā kanārijputnu izlaiÅ”ana (kanārijputniņŔ), A/B testÄ“Å”ana, satiksmes spoguļoÅ”ana (spoguļoÅ”ana/ēnoÅ”ana)? Å is ir ļoti sāpÄ«gs temats lietojumprogrammām, kurām nepiecieÅ”ama precÄ«za un precÄ«za trafika pārvaldÄ«ba produktÄ«vai testÄ“Å”anai, produktu kļūdu atkļūdoÅ”anai bezsaistē (vai ar minimāliem zaudējumiem), trafika analÄ«zei utt.

Maksas abonements

Vai kontrolierim ir maksas opcija ar uzlabotu funkcionalitāti un/vai tehnisko atbalstu?

Grafiskā lietotāja saskarne (tīmekļa lietotāja interfeiss)

Vai ir kāds GUI, lai pārvaldītu kontrollera konfigurāciju? Galvenokārt "ērtībai" un/vai tiem, kam jāveic dažas izmaiņas Ingress'a konfigurācijā, taču darbs ar "neapstrādātām" veidnēm ir neērts. Tas var būt noderīgi, ja izstrādātāji vēlas veikt dažus eksperimentus ar satiksmi lidojuma laikā.

JWT validācija

Iebūvēta JSON tīmekļa pilnvaru validācija lietotāja autorizācijai un validācijai gala lietojumprogrammā.

Konfigurācijas pielāgoÅ”anas iespējas

Veidņu paplaÅ”ināŔana tādā nozÄ«mē, ka ir mehānismi, kas ļauj standarta konfigurācijas veidnēm pievienot savas direktÄ«vas, karogus utt.

Pamata DDOS aizsardzības mehānismi

VienkārÅ”i ātruma ierobežojuma algoritmi vai sarežģītākas trafika filtrÄ“Å”anas iespējas, kuru pamatā ir adreses, baltie saraksti, valstis utt.

Pieprasīt izsekoŔanu

Iespēja pārraudzīt, izsekot un atkļūdot pieprasījumus no Ingresses uz konkrētiem pakalpojumiem/apd, un ideālā gadījumā arī starp pakalpojumiem/aplikumiem.

WAF

atbalsts lietojumprogrammu ugunsmūris.

Kontrolieri

Kontrolieru saraksts tika izveidots, pamatojoties uz oficiālā Kubernetes dokumentācija Šø Å”o tabulu. Dažus no tiem mēs izslēdzām no pārskata specifiskuma vai zemas izplatÄ«bas dēļ (agrÄ«na attÄ«stÄ«bas stadija). Pārējie ir apspriesti tālāk. Sāksim ar vispārÄ«gu risinājumu aprakstu un turpināsim ar kopsavilkuma tabulu.

Ieeja no Kubernetes

Mājas lapa: github.com/kubernetes/ingress-nginx
Licence: Apache 2.0

Å is ir oficiālais Kubernetes kontrolieris, un to izstrādā kopiena. AcÄ«mredzot pēc nosaukuma, tas ir balstÄ«ts uz nginx, un to papildina cits Lua spraudņu komplekts, ko izmanto papildu funkciju ievieÅ”anai. Sakarā ar paÅ”a nginx popularitāti un minimālajām modifikācijām tajā, kad to izmanto kā kontrolieri, Ŕī opcija var bÅ«t visvieglāk un visvieglāk konfigurējama vidusmēra inženierim (ar tÄ«mekļa pieredzi).

Ieeja no NGINX Inc.

Mājas lapa: github.com/nginxinc/kubernetes-ingress
Licence: Apache 2.0

Oficiālais nginx izstrādātāju produkts. Ir maksas versija, kuras pamatā ir NGINX Plus. Galvenā ideja ir augsts stabilitātes lÄ«menis, pastāvÄ«ga atpakaļejoÅ”a savietojamÄ«ba, sveÅ”u moduļu neesamÄ«ba un deklarētais palielinātais ātrums (salÄ«dzinājumā ar oficiālo kontrolieri), kas panākts Lua noraidÄ«Å”anas dēļ.

Bezmaksas versija ir ievērojami samazināta, tostarp pat salÄ«dzinot ar oficiālo kontrolieri (tādu paÅ”u Lua moduļu trÅ«kuma dēļ). Tajā paŔā laikā maksas ir diezgan plaÅ”a papildu funkcionalitāte: reāllaika metrika, JWT validācija, aktÄ«vās veselÄ«bas pārbaudes un daudz kas cits. SvarÄ«ga priekÅ”rocÄ«ba salÄ«dzinājumā ar NGINX Ingress ir pilnÄ«gs TCP / UDP trafika atbalsts (un arÄ« kopienas versijā!). MÄ«nuss - trÅ«kums trafika sadales funkcija, kurai tomēr "izstrādātājiem ir visaugstākā prioritāte", taču tā ievieÅ”ana prasa laiku.

Kong Ingress

Mājas lapa: github.com/Kong/kubernetes-ingress-controller
Licence: Apache 2.0

Produkts, ko izstrādājis Kong Inc. divās versijās: komerciālā un bezmaksas. Balstīts uz nginx, kas ir paplaŔināts ar lielu skaitu Lua moduļu.

Sākotnēji tas bija vērsts uz API pieprasÄ«jumu apstrādi un marÅ”rutÄ“Å”anu, t.i. kā API Gateway, bet Å”obrÄ«d tas ir kļuvis par pilnvērtÄ«gu Ingress kontrolieri. Galvenās priekÅ”rocÄ«bas: daudzi papildu moduļi (ieskaitot treÅ”o puÅ”u izstrādātājus), kurus ir viegli uzstādÄ«t un konfigurēt un ar kuru palÄ«dzÄ«bu tiek ieviests plaÅ”s papildu funkciju klāsts. Tomēr iebÅ«vētās funkcijas jau piedāvā daudzas iespējas. Darba konfigurÄ“Å”ana tiek veikta, izmantojot CRD resursus.

SvarÄ«ga produkta Ä«paŔība - darbs vienā kontÅ«rā (nevis starpnosaukumos) ir strÄ«dÄ«gs temats: dažiem tas ŔķitÄ«s trÅ«kums (katrai kontÅ«rai ir jāizveido entÄ«tijas), bet kādam tā ir funkcija ( bŠ¾Lielāks izolācijas lÄ«menis, kā ja ir bojāts viens kontrolieris, problēma attiecas tikai uz ķēdi).

Traefik

Mājas lapa: github.com/containous/traefik
Licence: MIT

Starpniekserveris, kas sākotnēji tika izveidots, lai strādātu ar pieprasÄ«jumu marÅ”rutÄ“Å”anu mikropakalpojumiem un to dinamiskajai videi. LÄ«dz ar to daudzas noderÄ«gas funkcijas: konfigurācijas atjaunināŔana bez pārstartÄ“Å”anas, atbalsts lielam skaitam balansÄ“Å”anas metožu, tÄ«mekļa saskarne, metrikas pārsÅ«tÄ«Å”ana, atbalsts dažādiem protokoliem, REST API, kanārijputnu izlaidumi un daudz kas cits. Vēl viena jauka funkcija ir atbalsts Let's Encrypt sertifikātiem. TrÅ«kums ir tāds, ka, lai organizētu augstu pieejamÄ«bu (HA), kontrolierim bÅ«s jāinstalē un jāpievieno sava KV krātuve.

HAProxy

Mājas lapa: github.com/jcmoraisjr/haproxy-ingress
Licence: Apache 2.0

HAProxy jau sen ir pazÄ«stams kā starpniekserveris un satiksmes lÄ«dzsvarotājs. Kā daļa no Kubernetes klastera tas piedāvā ā€œmÄ«kstoā€ konfigurācijas atjauninājumu (bez trafika zuduma), pakalpojumu atklāŔanu, pamatojoties uz DNS, dinamisku konfigurāciju, izmantojot API. Var bÅ«t pievilcÄ«gi pilnÄ«bā pielāgot konfigurācijas veidni, aizstājot CM, kā arÄ« iespēju tajā izmantot Sprig bibliotēkas funkcijas. Kopumā risinājuma galvenais uzsvars ir uz lielu ātrumu, tā optimizāciju un efektivitāti patērētajos resursos. Kontroliera priekÅ”rocÄ«ba ir rekordliela dažādu balansÄ“Å”anas metožu atbalsts.

Ceļotājs

Mājas lapa: github.com/appscode/voyager
Licence: Apache 2.0

BalstÄ«ts uz HAproxy kontrolleri, kas ir pozicionēts kā universāls risinājums, kas atbalsta plaÅ”u funkciju klāstu daudziem pakalpojumu sniedzējiem. Tiek piedāvāta iespēja balansēt trafiku uz L7 un L4, un TCP L4 trafika balansÄ“Å”anu kopumā var saukt par vienu no galvenajām risinājuma iezÄ«mēm.

Kontūra

Mājas lapa: github.com/heptio/contour
Licence: Apache 2.0

Å is risinājums nav balstÄ«ts tikai uz Envoy: to izstrādāja kopÄ«gi ar Ŕī populārā starpniekservera autoriem. SvarÄ«ga iezÄ«me ir iespēja nodalÄ«t Ingress resursu kontroli, izmantojot IngressRoute CRD resursus. Organizācijām ar daudzām izstrādes komandām, kuras izmanto vienu un to paÅ”u kopu, tas palÄ«dz maksimāli palielināt droŔību darbā ar trafiku blakus esoÅ”ajās cilpās un aizsargāt tās no kļūdām, mainot ieejas resursus.

Tas piedāvā arÄ« paplaÅ”inātu balansÄ“Å”anas metožu kopu (ir pieprasÄ«juma spoguļoÅ”ana, automātiskais atkārtojums, pieprasÄ«juma ātruma ierobežoÅ”ana un daudz kas cits), detalizētu satiksmes plÅ«smas un kļūmju uzraudzÄ«bu. VarbÅ«t kādam tas bÅ«s bÅ«tisks trÅ«kums atbalsta trÅ«kums lipÄ«gām sesijām (lai gan darbs jau notiek).

Istio Ingress

Mājas lapa: istio.io/docs/tasks/traffic-management/ingress
Licence: Apache 2.0

VisaptveroÅ”s pakalpojumu tÄ«kla risinājums, kas ir ne tikai Ingress kontrolieris, kas pārvalda ienākoÅ”o trafiku no ārpuses, bet arÄ« kontrolē visu trafiku klasterÄ«. Zem pārsega Envoy tiek izmantots kā blakusvāģa starpniekserveris katram pakalpojumam. BÅ«tÄ«bā Å”is ir liels kombains, kas ā€œvar visuā€, un tā galvenā ideja ir maksimāla vadāmÄ«ba, paplaÅ”ināmÄ«ba, droŔība un caurspÄ«dÄ«gums. Ar to jÅ«s varat precizēt trafika marÅ”rutÄ“Å”anu, piekļuves autorizāciju starp pakalpojumiem, balansÄ“Å”anu, uzraudzÄ«bu, kanāriju izlaidumus un daudz ko citu. Vairāk par Istio lasiet rakstu sērijā "Atgriezties uz mikropakalpojumiem ar Istio'.

Vēstnieks

Mājas lapa: github.com/datawire/ambassador
Licence: Apache 2.0

Cits risinājums, kura pamatā ir Envoy. Tam ir bezmaksas un komerciālas versijas. Tas ir pozicionēts kā "pilnÄ«bā Kubernetes dzimtene", kas sniedz atbilstoŔās priekÅ”rocÄ«bas (cieÅ”a integrācija ar K8s klastera metodēm un entÄ«tijām).

salīdzinājuma tabula

Tātad, raksta kulminācija ir Ŕī milzīgā tabula:

Pārskats un salīdzinājums par Kubernetes Ingress kontrolieriem

Tas ir noklikŔķināms, lai skatītu tuvāk, un tas ir pieejams arī formātā Google izklājlapas.

Apkopojot

Å Ä« raksta mērÄ·is ir sniegt pilnÄ«gāku izpratni (tomēr tas nekādā gadÄ«jumā nav izsmeļoÅ”s!) par to, kādu izvēli izdarÄ«t konkrētajā gadÄ«jumā. Kā parasti, katram kontrolierim ir savas priekÅ”rocÄ«bas un trÅ«kumiā€¦

Klasiskais Kubernetes Ingress ir labs ar savu pieejamÄ«bu un pierādÄ«tÄ«bu, pietiekami bagātÄ«gām funkcijām - kopumā tam vajadzētu bÅ«t ā€œacÄ«m pietiekamiā€. Tomēr, ja ir paaugstinātas prasÄ«bas attiecÄ«bā uz stabilitāti, funkciju lÄ«meni un attÄ«stÄ«bu, jums vajadzētu pievērst uzmanÄ«bu Ingress ar NGINX Plus un maksas abonementu. Kongam ir visbagātākais spraudņu komplekts (un attiecÄ«gi arÄ« to sniegtās iespējas), un maksas versijā to ir vēl vairāk. Tam ir plaÅ”as iespējas strādāt kā API vārteja, dinamiska konfigurācija, kuras pamatā ir CRD resursi, kā arÄ« pamata Kubernetes pakalpojumi.

Ņemot vērā paaugstinātās prasÄ«bas balansÄ“Å”anas un autorizācijas metodēm, apskatiet Traefik un HAProxy. Tie ir atvērtā koda projekti, kas ir pārbaudÄ«ti gadu gaitā, ļoti stabili un aktÄ«vi attÄ«stās. Contour ir iznācis jau pāris gadus, taču tas joprojām izskatās pārāk jauns, un tam ir pievienotas tikai pamata funkcijas, kas pievienotas Envoy. Ja ir prasÄ«bas attiecÄ«bā uz WAF klātbÅ«tni / iegulÅ”anu lietojumprogrammas priekŔā, jums jāpievērÅ” uzmanÄ«ba tam paÅ”am Kubernetes vai HAProxy Ingress.

Un visbagātākie funkciju ziņā ir produkti, kas uzbÅ«vēti uz Envoy, Ä«paÅ”i Istio. Å Ä·iet, ka tas ir visaptveroÅ”s risinājums, kas "var darÄ«t jebko", kas tomēr nozÄ«mē arÄ« ievērojami augstāku ievades slieksni konfigurÄ“Å”anai / palaiÅ”anai / administrÄ“Å”anai nekā citi risinājumi.

Kā standarta kontrolieri esam izvēlējuÅ”ies un joprojām izmantojam Ingress no Kubernetes, kas sedz 80-90% vajadzÄ«bu. Tas ir diezgan uzticams, viegli konfigurējams un paplaÅ”ināms. Kopumā, ja nav Ä«paÅ”u prasÄ«bu, tai vajadzētu bÅ«t piemērotai lielākajai daļai klasteru/lietojumprogrammu. No tiem paÅ”iem universālajiem un salÄ«dzinoÅ”i vienkārÅ”iem produktiem var ieteikt Traefik un HAProxy.

PS

Lasi arī mūsu emuārā:

Avots: www.habr.com

Pievieno komentāru