ProHoster > Blog > Bestjoer > 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.
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.
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.
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).
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.
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).
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 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.
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.
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).
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".
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:
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.