Oersjoch en fergeliking fan Ingress-controllers foar Kubernetes

Oersjoch en fergeliking fan Ingress-controllers foar Kubernetes

By it lansearjen fan in Kubernetes-kluster foar in spesifike applikaasje, moatte jo begripe wat de applikaasje sels, it bedriuw en de ûntwikkelders foar dizze boarne posearje. Mei dizze ynformaasje kinne jo begjinne mei it meitsjen fan in arsjitektoanysk beslút en, benammen, it kiezen fan in spesifike Ingress-controller, wêrfan d'r hjoed al in grut oantal binne. Om in basis idee te krijen fan 'e beskikbere opsjes sûnder in protte artikels / dokumintaasje, ensfh.

Wy hoopje dat it kollega's sil helpe by it kiezen fan in arsjitektoanyske oplossing - teminsten sil it in útgongspunt wurde foar it krijen fan mear detaillearre ynformaasje en praktyske eksperiminten. Earder studearren wy oare ferlykbere materialen op it net en fûnen, frjemd genôch, gjin inkele min of mear folsleine, en vooral - strukturearre - resinsje. Dus litte wy dat gat folje!

kritearia

Yn prinsipe, om in fergeliking te meitsjen en in nuttich resultaat te krijen, moatte jo net allinich it fakgebiet begripe, mar ek in spesifike list fan kritearia hawwe dy't de ûndersyksvektor sil ynstelle. Sûnder pretend te analysearjen alle mooglike gefallen fan it brûken fan Ingress / Kubernetes, hawwe wy besocht de meast algemiene easken foar controllers te markearjen - wês der wis fan dat jo yn alle gefallen al jo spesifikaasjes en details apart moatte studearje.

Mar ik sil begjinne mei de skaaimerken dy't sa bekend wurden binne dat se yn alle oplossingen ymplementearre wurde en net wurde beskôge:

  • dynamyske ûntdekking fan tsjinsten (tsjinstûntdekking);
  • SSL-beëiniging;
  • wurkje mei websockets.

No foar de punten fan fergeliking:

Stipe protokollen

Ien fan 'e fûnemintele seleksjekritearia. Jo software kin miskien net wurkje op standert HTTP, of it kin wurk fereaskje op meardere protokollen tagelyk. As jo ​​saak net-standert is, wês dan wis dat jo dizze faktor yn 'e rekken hâlde, sadat jo it kluster letter net opnij hoege te konfigurearjen. Foar alle controllers ferskilt de list mei stipe protokollen.

software yn 'e kearn

D'r binne ferskate farianten fan tapassingen wêrop de controller is basearre. Populêre binne nginx, traefik, haproxy, envoy. Yn it algemiene gefal kin it net folle ynfloed hawwe op hoe't ferkear ûntfongen en oerdroegen wurdt, mar it is altyd nuttich om de potinsjele nuânses en funksjes te kennen fan wat "ûnder de kap" is.

Ferkear routing

Op grûn fan wat is it mooglik om in beslút oer de rjochting fan ferkear nei in bepaalde tsjinst? Meastal binne dit host en paad, mar der binne ekstra mooglikheden.

Nammeromte binnen in kluster

Nammeromte (nammeromte) - de mooglikheid om boarnen logysk te splitsen yn Kubernetes (bygelyks op it poadium, produksje, ensfh.). D'r binne Ingress-controllers dy't apart moatte wurde ynstalleare yn elke nammeromte (en dan kin it ferkear rjochtsje allinnich nei de pods fan dizze romte). En d'r binne dejingen (en har dúdlike mearderheid) dy't wrâldwiid wurkje foar it heule kluster - yn har wurdt ferkear rjochte op elke pod fan it kluster, nettsjinsteande de nammeromte.

Samples foar upstreams

Hoe wurdt ferkear rjochte op sûne eksimplaren fan 'e applikaasje, tsjinsten? D'r binne opsjes mei aktive en passive kontrôles, opnij besykjen, circuit breakers (Sjoch foar mear details, bygelyks, artikel oer Istio), eigen ymplemintaasjes fan sûnenskontrôles (oanpaste sûnenskontrôles), ensfh. In tige wichtige parameter as jo hege easken hawwe foar beskikberens en op 'e tiid ferwiderjen fan mislearre tsjinsten út balânsjen.

Balancing algoritmen

D'r binne in protte opsjes: fan tradisjoneel rûn-robin nei it eksoatyske rdp-koekje, lykas yndividuele funksjes lykas kleverige sesjes.

Ferifikaasje

Hokker autorisaasjeskema's stipet de controller? Basis, digest, oauth, ekstern-auth - ik tink dat dizze opsjes fertroud wêze moatte. Dit is in wichtich kritearium as d'r in protte ûntwikkelders (en / of gewoan privee) loops binne dy't tagonklik binne fia Ingress.

Ferkear ferdieling

Stipe de controller sokke faak brûkte ferkearsferdielingsmeganismen as kanaryske rollouts (kanarie), A / B-testen, ferkearsspegeljen (spegeljen / skaadsjen)? Dit is in echt sear ûnderwerp foar applikaasjes dy't krekt en sekuer ferkearsbehear nedich binne foar produktive testen, debuggen fan produktbugs off-line (as mei minimaal ferlies), ferkearsanalyse, ensfh.

Betelle abonnemint

Is d'r in betelle opsje foar de controller, mei avansearre funksjonaliteit en / of technyske stipe?

Grafyske brûkersynterface (Web UI)

Is d'r in GUI om kontrôlekonfiguraasje te behearjen? Benammen foar "handiness" en / of foar dyjingen dy't moatte meitsje wat feroarings oan de Ingress'a konfiguraasje, mar wurkje mei "raw" sjabloanen is ûngemaklik. It kin nuttich wêze as ûntwikkelders wat eksperiminten wolle útfiere mei ferkear op 'e flecht.

JWT validaasje

De oanwêzigens fan ynboude falidaasje fan JSON-webtokens foar autorisaasje en falidaasje fan 'e brûker nei de einapplikaasje.

Mooglikheden foar konfiguraasje oanpassing

Sjabloan útwreidzjen yn 'e betsjutting fan it hawwen fan meganismen wêrmei jo te foegjen jo eigen rjochtlinen, flaggen, ensfh oan standert konfiguraasje sjabloanen.

Basis DDOS beskerming meganismen

Ienfâldige algoritmen foar taryflimyt as mear komplekse opsjes foar ferkearsfiltering basearre op adressen, whitelists, lannen, ensfh.

Spoor oanfreegje

De mooglikheid om oanfragen fan Ingresses nei spesifike tsjinsten / pods te kontrolearjen, te folgjen en te debuggen, en by útstek ek tusken tsjinsten / pods.

WAF

stipe applikaasje firewall.

Controllers

De list fan controllers waard foarme basearre op offisjele Kubernetes dokumintaasje и dizze tabel. Wy hawwe guon fan har útsletten fan 'e resinsje fanwege spesifisiteit of lege prevalens (betiid stadium fan ûntwikkeling). De rest wurde hjirûnder besprutsen. Litte wy begjinne mei in algemiene beskriuwing fan 'e oplossingen en trochgean mei in gearfettingstabel.

Ingress fan Kubernetes

Website: github.com/kubernetes/ingress-nginx
Lisinsje: Apache 2.0

Dit is de offisjele controller foar Kubernetes en wurdt ûntwikkele troch de mienskip. Fansels fan 'e namme is it basearre op nginx en wurdt oanfolle troch in oare set Lua-plugins dy't brûkt wurde om ekstra funksjes te ymplementearjen. Fanwegen de populariteit fan nginx sels en minimale oanpassingen derfan as se brûkt wurde as kontrôler, kin dizze opsje de maklikste en maklikste wêze om te konfigurearjen foar de gemiddelde yngenieur (mei webûnderfining).

Ingress troch NGINX Inc.

Website: github.com/nginxinc/kubernetes-ingress
Lisinsje: Apache 2.0

It offisjele produkt fan 'e nginx-ûntwikkelders. Hat in betelle ferzje basearre op NGINX Plus. It haadidee is in heech nivo fan stabiliteit, konstante efterútkompatibiliteit, it ûntbrekken fan bûtensteande modules en de ferklearre ferhege snelheid (yn ferliking mei de offisjele controller), berikt troch de ôfwizing fan Lua.

De fergese ferzje is signifikant fermindere, ynklusyf sels yn ferliking mei de offisjele controller (fanwege it ûntbrekken fan deselde Lua-modules). Tagelyk hat de betelle in frij brede ekstra funksjonaliteit: realtime metriken, JWT-validaasje, aktive sûnenskontrôles, en mear. In wichtich foardiel boppe NGINX Ingress is folsleine stipe foar TCP / UDP-ferkear (en ek yn 'e mienskipferzje!). Minus - it gebrek oan ferkear distribúsje feature, dy't, lykwols, "hat de heechste prioriteit foar ûntwikkelers," mar duorret tiid in útfiere.

Kong Ingress

Website: github.com/Kong/kubernetes-ingress-controller
Lisinsje: Apache 2.0

Produkt ûntwikkele troch Kong Inc. yn twa ferzjes: kommersjeel en fergees. Op grûn fan nginx, dy't útwreide is mei in grut oantal Lua-modules.

Yn it earstoan wie it rjochte op it ferwurkjen en routing fan API-oanfragen, d.w.s. as API Gateway, mar op it stuit is it in folweardich Ingress-controller wurden. Wichtichste foardielen: in protte ekstra modules (ynklusyf dy fan ûntwikkelders fan tredden) dy't maklik te ynstallearjen en konfigurearje binne en mei help wêrfan in breed oanbod fan ekstra funksjes wurdt ymplementearre. Ynboude funksjes biede lykwols al in protte mooglikheden. Jobkonfiguraasje wurdt dien mei CRD-boarnen.

In wichtich skaaimerk fan it produkt - wurkje binnen deselde kontoer (ynstee fan cross-namespaced) is in kontroversjeel ûnderwerp: foar guon sil it lykje as in neidiel (jo moatte produsearje entiteiten foar elke kontoer), en foar immen is it in funksje ( bоGruttere nivo fan isolemint, as as ien kontrôler is brutsen, dan is it probleem beheind ta it circuit allinich).

Traefik

Website: github.com/containous/traefik
lisinsje: MIT

In proxy dy't oarspronklik waard makke om te wurkjen mei fersykrouting foar mikrotsjinsten en har dynamyske omjouwing. Dêrtroch in protte nuttige funksjes: it bywurkjen fan de konfiguraasje sûnder opnij opstarten, stipe foar in grut oantal balânsmetoaden, webynterface, metriken trochstjoere, stipe foar ferskate protokollen, REST API, kanaryske releases, en folle mear. In oare leuke funksje is stipe foar Let's Encrypt-sertifikaten út 'e doaze. It neidiel is dat om hege beskikberens (HA) te organisearjen, de controller syn eigen KV-opslach moat ynstallearje en ferbine.

HAProxy

Website: github.com/jcmoraisjr/haproxy-ingress
Lisinsje: Apache 2.0

HAProxy is al lang bekend as in proxy en ferkearsbalanser. As ûnderdiel fan in Kubernetes-kluster biedt it in "sêfte" konfiguraasje-update (sûnder ferlies fan ferkear), tsjinstûntdekking basearre op DNS, dynamyske konfiguraasje mei API. It kin oantreklik wêze om it konfiguraasjesjabloan folslein oan te passen troch de CM te ferfangen, lykas ek de mooglikheid om Sprig-bibleteekfunksjes dêryn te brûken. Yn 't algemien is de wichtichste klam fan' e oplossing op hege snelheid, syn optimalisaasje en effisjinsje yn konsumeare boarnen. It foardiel fan 'e controller is de stipe fan in rekord oantal ferskillende balânsmetoaden.

voyager

Website: github.com/appscode/voyager
Lisinsje: Apache 2.0

Basearre op HAproxy controller, dat is gepositioneerd as in universele oplossing dy't stipet in breed skala oan funksjes op in grut oantal providers. In kâns wurdt oanbean foar balancing ferkear op L7 en L4, en balancing TCP L4 ferkear as gehiel kin neamd wurde ien fan de wichtichste skaaimerken fan de oplossing.

Kontoer

Website: github.com/heptio/contour
Lisinsje: Apache 2.0

Dizze oplossing is net allinich basearre op Envoy: it is ûntwikkele troch tegearre mei de skriuwers fan dizze populêre proxy. In wichtich skaaimerk is de mooglikheid om te skieden kontrôle fan Ingress boarnen mei help fan IngressRoute CRD boarnen. Foar organisaasjes mei in protte ûntwikkelingsteams dy't itselde kluster brûke, helpt dit om de feiligens fan it wurkjen mei ferkear yn oanbuorjende loops te maksimalisearjen en se te beskermjen tsjin flaters by it feroarjen fan Ingress-boarnen.

It biedt ek in útwreide set fan balânsmetoaden (d'r is fersykspegeljen, auto-repetysje, beheining fan fersykrate, en folle mear), detaillearre tafersjoch op ferkearsstream en mislearrings. Miskien foar immen sil it in signifikant nadeel wêze it gebrek oan stipe foar kleverige sesjes (hoewol it wurk al oan 'e gong).

Istio Ingress

Website: istio.io/docs/tasks/traffic-management/ingress
Lisinsje: Apache 2.0

In wiidweidige tsjinstmesh-oplossing dy't net allinich in Ingress-controller is dy't ynkommende ferkear fan bûten beheart, mar ek alle ferkear binnen it kluster kontrolearret. Under de motorkap wurdt Envoy brûkt as sidecar-proxy foar elke tsjinst. Yn wêzen is dit in grutte kombinearje dat "alles kin dwaan", en har haadidee is maksimale behearberens, útwreidzjen, feiligens en transparânsje. Mei it kinne jo ferkearsrouting fine, tagongsautorisaasje tusken tsjinsten, balânsjen, tafersjoch, kanaryske releases, en folle mear. Lês mear oer Istio yn de searje artikels "Werom nei mikrotsjinsten mei Istio".

Ambassadeur

Website: github.com/datawire/ambassador
Lisinsje: Apache 2.0

In oare oplossing basearre op Envoy. It hat fergese en kommersjele ferzjes. It is gepositioneerd as "folslein memmetaal oan Kubernetes", wat de oerienkommende foardielen bringt (strakke yntegraasje mei de metoaden en entiteiten fan it K8s-kluster).

ferliking tafel

Dat, de kulminaasje fan it artikel is dizze enoarme tabel:

Oersjoch en fergeliking fan Ingress-controllers foar Kubernetes

It is te klikken foar in tichterby besjen, en is ek beskikber yn it formaat Google Blêden.

Litte wy it opkomme

It doel fan dit artikel is om in folsleiner begryp te jaan (lykwols net folslein!) fan hokker kar te meitsjen yn jo bepaalde gefal. Lykas gewoanlik hat elke controller syn eigen foardielen en neidielen ...

De klassike Ingress fan Kubernetes is goed foar syn beskikberens en bewiis, ryk genôch funksjes - yn 't algemien moat it "genôch foar de eagen" wêze. As d'r lykwols ferhege easken binne foar stabiliteit, it nivo fan funksjes en ûntwikkeling, moatte jo omtinken jaan oan Ingress mei NGINX Plus en in betelle abonnemint. Kong hat de rykste set plug-ins (en, dus, de kânsen dy't se leverje), en yn 'e betelle ferzje binne d'r noch mear. It hat genôch mooglikheden om te wurkjen as in API Gateway, dynamyske konfiguraasje basearre op CRD-boarnen, lykas basis Kubernetes-tsjinsten.

Mei ferhege easken foar balâns- en autorisaasjemetoaden, sjoch ris op Traefik en HAProxy. Dit binne Open Source-projekten, bewezen oer de jierren, heul stabyl en aktyf ûntwikkeljen. Contour is no in pear jier út, mar it liket noch te jong en hat allinich basisfunksjes tafoege boppe op Envoy. As d'r easken binne foar de oanwêzigens / ynbêding fan WAF foar de applikaasje, moatte jo oandacht jaan oan deselde Ingress fan Kubernetes of HAProxy.

En de rykste yn termen fan funksjes binne produkten boud boppe op Envoy, benammen Istio. It liket in wiidweidige oplossing te wêzen dy't "alles kin dwaan", wat lykwols ek in signifikant hegere yngongsdrompel foar konfiguraasje / lansearring / administraasje betsjut dan oare oplossingen.

Wy hawwe keazen en brûke noch Ingress fan Kubernetes as in standert kontrôler, dy't 80-90% fan behoeften beslacht. It is frij betrouber, maklik te konfigurearjen en útwreidzje. Yn 't algemien soe it by it ûntbrekken fan spesifike easken moatte passe by de measte klusters / tapassingen. Fan deselde universele en relatyf ienfâldige produkten kinne Traefik en HAProxy oanrikkemandearre wurde.

PS

Lês ek op ús blog:

Boarne: www.habr.com

Add a comment