Iwwersiicht a Verglach vun Ingress Controller fir Kubernetes

Iwwersiicht a Verglach vun Ingress Controller fir Kubernetes

Wann Dir e Kubernetes-Cluster fir eng spezifesch Applikatioun lancéiert, musst Dir verstoen wat d'Applikatioun selwer, d'Geschäft an d'Entwéckler fir dës Ressource stellen. Mat dëser Informatioun kënnt Dir ufänken eng architektonesch Entscheedung ze treffen a besonnesch e spezifeschen Ingress Controller ze wielen, vun deem et haut schonn eng grouss Zuel gëtt. Fir eng Basis Iddi vun de verfügbaren Optiounen ze kréien ouni vill Artikelen / Dokumentatioun, etc.

Mir hoffen, datt et de Kollegen hëlleft bei der Auswiel vun enger architektonescher Léisung - op d'mannst wäert et e Startpunkt ginn fir méi detailléiert Informatioun a praktesch Experimenter ze kréien. Virdrun hu mir aner ähnlech Materialien um Netz studéiert an, komesch genuch, keng eenzeg méi oder manner komplett, an am wichtegsten - strukturéiert - Iwwerpréiwung fonnt. Also loosst eis dee Lach ausfëllen!

Kritären

Am Prinzip, fir e Verglach ze maachen an all nëtzlech Resultat ze kréien, musst Dir net nëmmen d'Themaberäich verstoen, awer och eng spezifesch Lëscht vu Critèren hunn, déi de Fuerschungsvektor festleeën. Ouni virzegoen, all méiglech Fäll vun der Benotzung vun Ingress / Kubernetes ze analyséieren, hu mir probéiert déi allgemeng Ufuerderunge fir Controller ze markéieren - sidd bereet datt Dir op alle Fall all Är Spezifizitéiten a Detailer separat studéiere musst.

Awer ech fänke mat de Charakteristiken un, déi sou vertraut ginn, datt se an all Léisungen ëmgesat ginn an net berücksichtegt ginn:

  • dynamesch Entdeckung vu Servicer (Service Entdeckung);
  • SSL Terminatioun;
  • mat Websockets schaffen.

Elo fir d'Punkte vum Verglach:

Ënnerstëtzt Protokoller

Ee vun de fundamental Auswiel Critèren. Är Software funktionnéiert vläicht net op Standard HTTP, oder et kann Aarbecht op verschidde Protokoller gläichzäiteg erfuerderen. Wann Äre Fall net-Standard ass, gitt sécher dëse Faktor Rechnung ze huelen fir datt Dir de Stärekoup méi spéit net nei konfiguréieren musst. Fir all Controller variéiert d'Lëscht vun de ënnerstëtzte Protokoller.

Software am Kär

Et gi verschidde Variatiounen vun Uwendungen op déi de Controller baséiert. Populär sinn nginx, traefik, haproxy, envoy. Am allgemenge Fall kann et net vill Effekter hunn op wéi de Verkéier kritt an iwwerdroen gëtt, awer et ass ëmmer nëtzlech fir d'Potenzial Nuancen an d'Features vun deem wat "ënnert der Hood" ass, ze kennen.

Verkéier Routing

Op Basis vu wat ass et méiglech eng Entscheedung iwwer d'Richtung vum Verkéier op e bestëmmte Service ze maachen? Normalerweis sinn dës Host a Wee, awer et ginn zousätzlech Méiglechkeeten.

Nummraum bannent engem Cluster

Namespace (Namespace) - d'Fäegkeet fir Ressourcen an Kubernetes logesch opzedeelen (zum Beispill op der Bühn, Produktioun, etc.). Et gi Ingress Controller déi separat an all Nummraum installéiert musse ginn (an da kann et de Verkéier dirigéieren nëmmen zu de Pods vun dësem Raum). An et ginn déi (an hir kloer Majoritéit) déi global fir de ganze Cluster schaffen - an hinnen gëtt de Verkéier op all Pod vum Cluster geleet, onofhängeg vum Nummraum.

Echantillon fir Upstream

Wéi gëtt de Verkéier op gesonde Fäll vun der Applikatioun, Servicer geleet? Et gi Optiounen mat aktiven a passive Schecken, Retry, Circuit Breaker (Fir méi Detailer, kuckt z.B. Artikel iwwer Istio), eegen Implementatioune vu Gesondheetschecken (personaliséiert Gesondheetschecken), asw. E ganz wichtege Parameter wann Dir héich Ufuerderunge fir Disponibilitéit a rechtzäiteg Entfernung vu gescheitert Servicer aus Balance hutt.

Balancéieren Algorithmen

Et gi vill Méiglechkeeten: vun traditionell Ronn-Robin zum exotesch rdp-cookie, souwéi individuell Funktiounen wéi plakeg Sessiounen.

Authentifikatioun

Wéi eng Autorisatiounsschemaen ënnerstëtzt de Controller? Basis, digest, oauth, extern-auth - ech mengen dës Optiounen sollten vertraut sinn. Dëst ass e wichtege Critère wann et vill Entwéckler (an / oder just privat) Loops sinn, déi iwwer Ingress zougänglech sinn.

Verkéier Verdeelung

Ënnerstëtzt de Controller sou allgemeng benotzte Verkéiersverdeelungsmechanismen wéi Kanaresch Rollouts (Kanaresch), A / B Testen, Traffic Spigelen (Spigel / Schatten)? Dëst ass e wierklech traureg Thema fir Uwendungen déi präzis a präzis Trafficmanagement fir produktiv Tester erfuerderen, Produktbugs off-line (oder mat minimalem Verloscht), Verkéiersanalyse, asw.

Bezuelt Abonnement

Gëtt et eng bezuelte Optioun fir de Controller, mat fortgeschratt Funktionalitéit an / oder technescher Ënnerstëtzung?

Graphical User Interface (Web UI)

Gëtt et eng GUI fir d'Konfiguratioun vum Controller ze managen? Haaptsächlech fir "handiness" an / oder fir déi, déi e puer Ännerungen un der Ingress'a Configuratioun musse maachen, awer mat "raw" Templates ze schaffen ass onbequem. Et kann nëtzlech sinn wann d'Entwéckler e puer Experimenter mam Traffic op der Flucht maache wëllen.

JWT Validatioun

D'Präsenz vun agebauter Validatioun vu JSON Web Tokens fir Autorisatioun a Validatioun vum Benotzer bis zum Ennapplikatioun.

Méiglechkeete fir Configuratioun Personnalisatioun

Schabloun-Extensibilitéit am Sënn vu Mechanismen ze hunn, déi Iech erlaben Är eege Direktiven, Fändelen, asw.

Basis DDOS Schutz Mechanismen

Einfach Taux Limit Algorithmen oder méi komplex Traffic Filter Optiounen baséiert op Adressen, Whitelists, Länner, etc.

Ufro Spuer

D'Fäegkeet fir Ufroe vun Ingressen op spezifesch Servicer / Pods ze iwwerwaachen, ze verfollegen an ze debuggen, an am Idealfall och tëscht Servicer / Pods.

WAF

Ënnerstëtzung Applikatioun Firewall.

Controller

D'Lëscht vun de Controller gouf geformt baséiert op offiziell Kubernetes Dokumentatioun и dësem Dësch. Mir hunn e puer vun hinnen aus der Iwwerpréiwung ausgeschloss wéinst Spezifizitéit oder gerénger Prävalenz (fréi Etapp vun der Entwécklung). De Rescht ginn ënnert diskutéiert. Loosst eis mat enger allgemenger Beschreiwung vun de Léisungen ufänken a weider mat enger Resumétabelle.

Ingress vun Kubernetes

Websäit: github.com/kubernetes/ingress-nginx
Lizenz: Apache 2.0

Dëst ass den offiziellen Controller fir Kubernetes a gëtt vun der Gemeinschaft entwéckelt. Natierlech vum Numm baséiert et op nginx a gëtt ergänzt duerch eng aner Rei vu Lua Plugins déi benotzt gi fir zousätzlech Funktiounen ëmzesetzen. Wéinst der Popularitéit vum nginx selwer a minimale Ännerunge fir et wann se als Controller benotzt gëtt, ass dës Optioun déi einfachst an einfachst ze konfiguréieren fir den duerchschnëttleche Ingenieur (mat Weberfahrung).

Ingress vun NGINX Inc.

Websäit: github.com/nginxinc/kubernetes-ingress
Lizenz: Apache 2.0

Den offiziellen Produkt vun den nginx Entwéckler. Huet eng bezuelte Versioun baséiert op NGINX Plus. D'Haaptidee ass en héijen Niveau vu Stabilitéit, konstante Réckkompatibilitéit, d'Feele vun all externe Moduler an déi deklaréiert erhéicht Geschwindegkeet (am Verglach zum offiziellen Controller), erreecht duerch d'Oflehnung vu Lua.

Déi gratis Versioun ass wesentlech reduzéiert, och wann et mam offiziellen Controller vergläicht (wéinst dem Mangel un déiselwecht Lua Moduler). Zur selwechter Zäit huet de bezuelte eng zimlech breet zousätzlech Funktionalitéit: Echtzäit Metriken, JWT Validatioun, aktiv Gesondheetschecken, a méi. E wichtege Virdeel iwwer NGINX Ingress ass voll Ënnerstëtzung fir TCP / UDP Traffic (an och an der Gemeinschaftsversioun!). Minus - e Manktem un Verkéier Verdeelung Fonktioun, déi awer, "huet déi héchste Prioritéit fir Entwéckler," mee hëlt Zäit ze realiséieren.

Kong Ingress

Websäit: github.com/Kong/kubernetes-ingress-controller
Lizenz: Apache 2.0

Produkt entwéckelt vum Kong Inc. an zwou Versiounen: kommerziell a fräi . Baséiert op nginx, déi mat enger grousser Zuel vu Lua Moduler verlängert gouf.

Am Ufank war et op d'Veraarbechtung an d'Routing vun API-Ufroen konzentréiert, d.h. als API Gateway, awer am Moment ass et e vollwäertege Ingress Controller ginn. Haaptvirdeeler: vill zousätzlech Moduler (och déi vun Drëtt-Entwéckler) déi einfach z'installéieren an ze konfiguréieren a mat der Hëllef vun deenen eng breet Palette vun zousätzlech Funktiounen ëmgesat gëtt. Wéi och ëmmer, agebaute Funktiounen bidden scho vill Méiglechkeeten. D'Aarbechtskonfiguratioun gëtt mat CRD Ressourcen gemaach.

Eng wichteg Feature vum Produkt - an der selwechter Kontur ze schaffen (amplaz vu Kräiz-Nummspace) ass e kontrovers Thema: fir e puer wäert et wéi en Nodeel schéngen (Dir musst Entitéite fir all Kontur produzéieren), a fir een ass et eng Feature ( bоGréissere Niveau vun Isolatioun, wéi wann ee Controller gebrach ass, dann ass de Problem eleng op de Circuit limitéiert).

Traefik

Websäit: github.com/containous/traefik
Lizenz: MIT

E Proxy deen ursprénglech erstallt gouf fir mat Ufrorouting fir Mikroservicer an hiren dynamesche Ëmfeld ze schaffen. Dofir vill nëtzlech Features: d'Konfiguratioun aktualiséieren ouni iwwerhaapt nei ze starten, Ënnerstëtzung fir eng grouss Zuel vu Balancéierungsmethoden, Webinterface, Metrik Forwarding, Ënnerstëtzung fir verschidde Protokoller, REST API, Kanaresch Verëffentlechungen, a vill méi. Eng aner flott Feature ass Ënnerstëtzung fir Let's Encrypt Certificaten aus der Këscht. De Nodeel ass datt fir eng héich Disponibilitéit (HA) ze organiséieren, de Controller muss seng eege KV-Späichere installéieren a verbannen.

HAProxy

Websäit: github.com/jcmoraisjr/haproxy-ingress
Lizenz: Apache 2.0

HAProxy ass laang bekannt als Proxy a Traffic Balancer. Als Deel vun engem Kubernetes Cluster bitt et e "mëllen" Konfiguratiounsupdate (ouni Verkéiersverloscht), Service Entdeckung baséiert op DNS, dynamesch Konfiguratioun mat API. Et kann attraktiv sinn d'Konfiguratiounsschabloun komplett ze personaliséieren andeems Dir den CM ersetzt, souwéi d'Fäegkeet fir Sprig Bibliothéik Funktiounen dran ze benotzen. Am Allgemengen ass den Haaptaccent vun der Léisung op Héichgeschwindegkeet, seng Optimisatioun an Effizienz an de verbrauchte Ressourcen. De Virdeel vum Controller ass d'Ënnerstëtzung vun enger Rekordzuel vu verschiddene Balancemethoden.

Voyager

Websäit: github.com/appscode/voyager
Lizenz: Apache 2.0

Baséierend op HAproxy Controller, deen als universell Léisung positionéiert ass, déi eng breet Palette vu Funktiounen op enger grousser Zuel vu Fournisseuren ënnerstëtzt. Eng Geleeënheet gëtt ugebueden fir de Verkéier op L7 an L4 ze balancéieren, an den TCP L4 Verkéier als Ganzt balancéieren kann ee vun de Schlësselmerkmale vun der Léisung genannt ginn.

Contour

Websäit: github.com/heptio/contour
Lizenz: Apache 2.0

Dës Léisung baséiert net nëmmen op Envoy: et gouf entwéckelt vum zesumme mat den Auteure vun dësem populäre Proxy. Eng wichteg Feature ass d'Fäegkeet fir d'Kontroll vun Ingress Ressourcen ze trennen mat IngressRoute CRD Ressourcen. Fir Organisatiounen mat villen Entwécklungsteams, déi deeselwechte Cluster benotzen, hëlleft dëst d'Sécherheet ze maximéieren fir mam Traffic an de Nopeschschleifen ze schaffen an se vu Feeler ze schützen wann Dir Ingress Ressourcen ännert.

Et bitt och en erweiderten Set vu Balancéierungsmethoden (et gëtt Ufro Spigelen, Auto-Widderhuelung, Ufro Taux limitéieren, a vill méi), detailléiert Iwwerwaachung vum Verkéiersfloss a Feeler. Vläicht fir een ass et e wesentlechen Nodeel de Mangel u Ënnerstëtzung fir plakeg Sessiounen (obwuel d'Aarbecht schonn ënnerwee).

Istio Ingress

Websäit: istio.io/docs/tasks/traffic-management/ingress
Lizenz: Apache 2.0

Eng ëmfaassend Service-Mesh-Léisung déi net nëmmen en Ingress Controller ass deen den erakommende Traffic vu baussen geréiert, awer och all Traffic am Cluster kontrolléiert. Ënnert der Hood gëtt Envoy als Sidecar Proxy fir all Service benotzt. Am Wesentlechen ass dëst eng grouss Kombinatioun déi "alles ka maache", a seng Haaptidee ass maximal Handhabbarkeet, Erweiterbarkeet, Sécherheet an Transparenz. Mat et kënnt Dir Traffic Routing feinstëmmen, Zougang Autorisatioun tëscht Servicer, Balance, Iwwerwaachung, Kanaresch Verëffentlechungen, a vill méi. Liest méi iwwer Istio an der Serie vun Artikelen "Zréck op Mikroservicer mat Istio".

Ambassadeur

Websäit: github.com/datawire/ambassador
Lizenz: Apache 2.0

Eng aner Léisung baséiert op Envoy. Et huet gratis a kommerziell Versiounen. Et ass positionéiert als "voll gebierteg zu Kubernetes", wat déi entspriechend Virdeeler bréngt (enk Integratioun mat de Methoden an Entitéite vum K8s Cluster).

Verglach Dësch

Also, de Kulminatioun vum Artikel ass dësen riesegen Dësch:

Iwwersiicht a Verglach vun Ingress Controller fir Kubernetes

Et ass klickbar fir méi no ze kucken, an ass och am Format verfügbar Google Sheets.

Loosst eis all Zort sinn

Den Zweck vun dësem Artikel ass e méi komplette Verständnis ze bidden (awer op kee Fall ustrengend!) vu wat fir eng Entscheedung an Ärem bestëmmte Fall ze maachen. Wéi gewinnt huet all Controller seng eegen Virdeeler an Nodeeler ...

De klassesche Ingress vu Kubernetes ass gutt fir seng Disponibilitéit a Beweis, räich genuch Features - am allgemenge Fall sollt et "genuch fir d'Aen" sinn. Wéi och ëmmer, wann et erhéicht Ufuerderunge fir Stabilitéit, den Niveau vun de Funktiounen an d'Entwécklung gëtt, sollt Dir op Ingress mat NGINX Plus an e bezuelten Abonnement oppassen. Kong huet de räichste Set vu Plug-ins (an deementspriechend d'Méiglechkeeten déi se ubidden), an an der bezuelter Versioun sinn et nach méi. Et huet vill Méiglechkeeten fir als API Gateway ze schaffen, dynamesch Konfiguratioun baséiert op CRD Ressourcen, souwéi Basis Kubernetes Servicer.

Mat verstäerkten Ufuerderunge fir Balance- an Autorisatiounsmethoden, kuckt op Traefik an HAProxy. Dëst sinn Open Source Projeten, iwwer d'Jore bewisen, ganz stabil an aktiv entwéckelen. Contour ass zënter e puer Joer eraus, awer et gesäit nach ëmmer ze jonk aus an huet nëmmen Basisfeatures uewen op Envoy bäigefüügt. Wann et Ufuerderunge fir d'Präsenz / Embedding vu WAF virun der Applikatioun sinn, sollt Dir op déiselwecht Ingress vu Kubernetes oder HAProxy oppassen.

An déi räichst wat d'Features ugeet sinn Produkter déi uewen op Envoy gebaut sinn, besonnesch Istio. Et schéngt eng ëmfaassend Léisung ze sinn, déi "alles ka maachen", wat awer och e wesentlech méi héije Entréesschwell fir Konfiguratioun / Start / Administratioun bedeit wéi aner Léisungen.

Mir hunn gewielt a benotzen nach ëmmer Ingress vu Kubernetes als Standard Controller, deen 80-90% vun de Besoinen deckt. Et ass ganz zouverlässeg, einfach ze konfiguréieren an auszebauen. Am Allgemengen, an der Verontreiung vu spezifesche Viraussetzungen, sollt et déi meescht Cluster / Uwendungen passen. Vun de selwechten universellen a relativ einfache Produkter kënnen Traefik an HAProxy recommandéiert ginn.

PS

Liest och op eisem Blog:

Source: will.com

Setzt e Commentaire