
NÀr man startar ett Kubernetes-kluster för en specifik applikation Àr det viktigt att förstÄ vilka krav applikationen, verksamheten och utvecklarna stÀller pÄ denna resurs. Med denna information kan man gÄ vidare med att fatta arkitektoniska beslut och, specifikt, vÀlja en specifik Ingress-kontroller, av vilka det idag finns mÄnga. För att ge en grundlÀggande översikt av de tillgÀngliga alternativen utan att behöva studera mÄnga artiklar/dokumentation med mera, har vi förberett denna översikt och inkluderat de frÀmsta (produktionsklara) Ingress-kontrollerna.
Vi hoppas att detta kommer att hjÀlpa kollegor i valet av arkitektoniskt beslut - Ätminstone kommer det att fungera som utgÄngspunkt för att fÄ mer detaljerad information och praktiska experiment. Vi har pÄ förhand studerat andra liknande material pÄ nÀtet och, mÀrkligt nog, hittade vi inte en enda mer eller mindre komplett, och framför allt - strukturerad - översikt. LÄt oss fylla detta gap!
Kriterier
För att överhuvudtaget kunna göra en jÀmförelse och fÄ nÄgot nyttigt resultat behöver man inte bara förstÄ ÀmnesomrÄdet, utan ocksÄ ha en specifik lista med kriterier som kommer att styra forskningen. Utan att pÄstÄ att vi analyserar alla möjliga anvÀndningsfall för Ingress/Kubernetes har vi försökt att lyfta fram de mest allmÀnna kraven pÄ kontrollerna - var redo att du i alla fall kommer att behöva studera din egen specifika information separat.
Men jag börjar med de egenskaper som blivit sÄ vanliga att de finns i alla lösningar och dÀrför inte diskuteras:
- dynamisk tjÀnstigenkÀnning (service discovery);
- SSL-terminering;
- support för WebSocket.
Nu - om jÀmförelsepunkterna:
Stödda protokoll
En av de grundlÀggande kriterierna för val. Din programvara kanske inte fungerar via standard HTTP eller kan krÀva att man arbetar med flera protokoll samtidigt. Om ditt fall Àr icke-standard, se till att ta hÀnsyn till denna faktor, sÄ du inte behöver justera klustret senare. Listan över stödda protokoll varierar mellan alla kontroller.
Programvaran i grunden
Det finns flera typer av applikationer som kontrollern Àr baserad pÄ. De populÀraste Àr nginx, traefik, haproxy, envoy. Generellt sÀtt pÄverkar dessa kanske inte direkt hur trafiken tas emot och skickas, men det Àr alltid bra att kÀnna till eventuella nyanser och sÀrdrag av vad som "döljer sig bakom kulisserna".
Trafikrouting
Vad baserar man beslutet om riktning av trafiken till en viss tjÀnst? Vanligtvis handlar det om host och path, men det finns Àven ytterligare möjligheter.
Namnrymd inom klustret
Namnrymden (namespace) ger möjlighet att logiskt dela upp resurser i Kubernetes (t.ex. pĂ„ stage, production m.m.). Det finns Ingress-kontroller som behöver installeras separat i varje namespace (och kan dĂ„ styra trafiken bara till pods i denna namnrymd). Men det finns Ă€ven sĂ„dana (och dessa Ă€r uppenbarligen i majoritet) som fungerar globalt för hela klustret â trafiken dirigeras till vilken pod som helst i klustret, oavsett namnrymd.
Prober för upstreams
Hur sÀkerstÀlls att trafiken dirigeras till friska instanser av applikationen och tjÀnster? Det finns alternativ med aktiva och passiva kontroller, omstar försök (retries), circuit breakers (mer om dem kan man se, t.ex., i ), egna implementationer av hÀlsokontroller (custom health checks) osv. Detta Àr en mycket viktig parameter om ni har höga krav pÄ tillgÀnglighet och snabb utsortering av tjÀnster som har fallit.
Lastbalanseringsalgoritmer
HÀr finns mÄnga alternativ: frÄn traditionella till mer exotiska som , samt sÀrskilda möjligheter som .
Autentisering
Vilka autentiseringsscheman stöder kontrollern? Basic, digest, oauth, external-auth â jag tror att dessa alternativ bör vara bekanta. Detta Ă€r en viktig kriterium om man anvĂ€nder mĂ„nga konturer för utvecklare (och/eller helt enkelt stĂ€ngda), vars Ă„tkomst sker via Ingress.
Trafikdistribution
Stöder kontrollern vanliga metoder för trafikdistribution, sÄsom canary releases, A/B-testning, trafikspeglinig (mirroring/shadowing)? Detta Àr ett verkligt problematiskt Àmne för applikationer som krÀver noggrann och exakt trafikhantering för produktiv testning, avkodning av produktfel utanför produktionsmiljön (eller med minimala förluster), trafikanalys m.m.
Betald prenumeration
Finns det en betald version av kontrollern med utökade funktioner och/eller teknisk support?
Grafiskt grÀnssnitt (Web UI)
Finns det nÄgot grafiskt grÀnssnitt för att hantera konfigurationen av kontrollern? Detta Àr frÀmst för "bekvÀmlighet" och/eller för dem som behöver göra vissa förÀndringar i Ingress-konfigurationen, men det Àr obekvÀmt att arbeta med "rÄa" mallar. Det kan vara anvÀndbart om utvecklarna vill genomföra experiment med trafiken i realtid.
JWT-validering
Finns det inbyggd kontroll av JSON web-token för autentisering och validering av anvÀndare i slappapplikationen.
Möjligheter till anpassning av konfigurationen
Utvidgbarhet av mallar i termer av mekanismer för att lÀgga till egna direktiv, flaggor etc. i standardkonfigurationsmallarna.
GrundlÀggande skyddsmekanismer mot DDOS
Enkla rate limit-algoritmer eller mer komplexa alternativ för att filtrera trafik baserat pÄ adresser, vitlistor, lÀnder etc.
BegÀrningstracering
Möjligheter för övervakning, spÄrning och felsökning av begÀrningar frÄn Ingress till specifika tjÀnster/poddar, och i idealfallet Àven mellan tjÀnster/poddar.
WAF
Support .
Ingress-kontrollrar
Listan över kontrollrar har sammanstÀllts utifrÄn och . NÄgra av dem har vi uteslutit frÄn översikten pÄ grund av deras specifikhet eller lÄga spridning (i ett tidigt utvecklingsstadium). De ÄterstÄende har granskats nedan. Vi börjar med en allmÀn beskrivning av lösningarna och fortsÀtter med en sammanstÀllning.
Ingress frÄn Kubernetes
Webbplats:
Licens: Apache 2.0
Detta Àr den officiella kontrollern för Kubernetes, som utvecklas av gemenskapen. Som namnet antyder Àr den baserad pÄ nginx och kompletterad med en uppsÀttning Lua-plugin-program som anvÀnds för att implementera ytterligare funktioner. Tack vare populariteten hos nginx och de minimala modifieringarna som görs pÄ den vid anvÀndning som kontrollern, kan detta alternativ vara det enklaste och mest lÀttförstÄeliga för en genomsnittlig ingenjör (med erfarenhet av webben).
Ingress frÄn NGINX Inc
Webbplats:
Licens: Apache 2.0
En officiell produkt frÄn utvecklarna av nginx. Har en betald version baserad pÄ . Huvudidéen Àr en hög nivÄ av stabilitet, konstant bakÄtkompatibilitet, avsaknad av externa moduler och utlovad ökad hastighet (jÀmfört med den officiella kontrollern), som uppnÄtts genom att avstÄ frÄn Lua.
Den kostnadsfria versionen Àr kraftigt nedskuren, ocksÄ jÀmfört med den officiella kontrollern (pÄ grund av avsaknaden av just Lua-modulerna). Den betalda versionen dÀremot har en ganska omfattande extra funktionalitet: realtidsmetrik, JWT-validering, aktiva hÀlsokontroller och mer. En viktig fördel jÀmfört med NGINX Ingress Àr fullt stöd för TCP/UDP-trafik (Àven i community-versionen!). Nackdelen Àr funktioner för trafikfördelning, vilket dock "har högsta prioritet för utvecklarna", men krÀver tid för implementering.
Kong Ingress
Webbplats:
Licens: Apache 2.0
Produkten utvecklas av Kong Inc. i tvÄ varianter: kommersiell och gratis. Byggd pÄ nginx, vars möjligheter utvidgas med ett stort antal Lua-moduler.
Initialt var den inriktad pÄ hantering och routing av API-förfrÄgningar, d.v.s. som API Gateway, men har nu blivit en fullvÀrdig Ingress-kontroller. Huvudfördelarna: mÄnga extra moduler (inklusive frÄn tredjepartsutvecklare) som Àr lÀtta att installera och konfigurera och med hjÀlp av vilka ett brett spektrum av ytterligare funktioner kan implementeras. Dock erbjuder de inbyggda funktionerna redan mÄnga möjligheter. Konfigurationen görs med hjÀlp av CRD-resurser.
En viktig egenskap hos produkten Àr att den arbetar inom en enda kontur (istÀllet för cross-namespaced), vilket Àr ett omdiskuterat Àmne: vissa kanske tycker att det Àr en nackdel (man mÄste skapa enheter för varje kontur), medan andra ser det som en funktion (högre nivÄ av isolering, eftersom om en kontroll misslyckas, sÄ Àr problemet begrÀnsat till bara en kontur).bÀsta resultatet (subjektiv Äsikt).större nivÄ av isolering, eftersom om en controller gÄr sönder, sÄ Àr problemet begrÀnsat till endast en kontur).
Traefik
Webbplats:
Licens: MIT
En proxy som ursprungligen skapades för att arbeta med routing av förfrĂ„gningar för mikrotjĂ€nster och deras dynamiska miljö. DĂ€rifrĂ„n kommer mĂ„nga anvĂ€ndbara funktioner: konfigurationsuppdateringar utan omstart, stöd för mĂ„nga lastbalanseringsmetoder, webbgrĂ€nssnitt, mĂ€tpunktsgenomgĂ„ng, stöd för olika protokoll, REST API, kanariefunktioner och mycket mer. En trevlig funktion Ă€r ocksĂ„ stöd för Letâs Encrypt-certifikat direkt ur lĂ„dan. Nackdelen Ă€r att för att organisera hög tillgĂ€nglighet (HA) krĂ€vs det att kontrollern installerar och kopplar ett eget KV-lager.
HAProxy
Webbplats:
Licens: Apache 2.0
HAProxy har lÀnge varit kÀnt som proxy och lastbalanserare. Inom ett Kubernetes-kluster erbjuder den "mjuka" konfigurationsuppdateringar (utan trafikförlust), service discovery baserat pÄ DNS, dynamisk konfiguration via API. En attraktiv aspekt kan vara fullstÀndig anpassning av konfigurationsmallar genom att byta ut CM:et, samt möjligheten att anvÀnda funktioner frÄn Sprig-biblioteket. Sammanfattningsvis lÀggs huvudvikten pÄ hög hastighet, optimering och effektivitet i resursanvÀndning. Kontrollerns fördel Àr stödet för ett rekordmÄnga olika lastbalanseringsmetoder.
Voyager
Webbplats:
Licens: Apache 2.0
En controller baserad pÄ HAproxy, som positionerar sig som en universallösning, som stöder omfattande funktionalitet hos mÄnga leverantörer. Den erbjuder möjlighet till lastbalansering pÄ L7 och L4, dÀr lastbalansering av TCP L4-trafik i allmÀnhet kan kallas en av nyckelfunktionerna i lösningen.
Contour
Webbplats:
Licens: Apache 2.0
Detta lösningskoncept bygger inte bara pÄ Envoy: det har utvecklats tillsammans med författarna till denna populÀra proxy. En viktig funktion Àr möjligheten att separera hanteringen av Ingress-resurser med hjÀlp av CRD-resurser IngressRoute. För organisationer med mÄnga utvecklingsteam som anvÀnder ett kluster hjÀlper detta till att maximalt sÀkra hanteringen av trafik i angrÀnsande konturer och skydda dem frÄn fel vid Àndring av Ingress-resurser.
En utvidgad uppsÀttning av balanseringsmetoder erbjuds (det finns möjlighet för begÀrningsspegeling, automatiska omförsök, begrÀnsning av begÀrningsfrekvens och mycket mer), detaljerad övervakning av trafikflödet och avbrott. Avsaknaden av stöd för sticky sessions kan vara en betydande nackdel för vissa (Àven om arbete ).
Istio Ingress
Webbplats:
Licens: Apache 2.0
En komplett service mesh-lösning som inte bara fungerar som en Ingress-kontroller för inkommande trafik utifrÄn, utan ocksÄ kontrollerar all trafik inom klustret. "Under huven" anvÀnds Envoy som en sidecar-proxy för varje tjÀnst. I grund och botten Àr detta en stor maskin som "kan allt", med den centrala idén att maximera hanterbarhet, skalbarhet, sÀkerhet och transparens. Med hjÀlp av detta kan du noggrant konfigurera trafikdirigering, Ätkomstautorisering mellan tjÀnster, lastbalansering, övervakning, kanarrelease och mycket mer. LÀs mer om Istio i serien av artiklar "».
Ambassador
Webbplats:
Licens: Apache 2.0
En annan lösning baserad pÄ Envoy. Har bÄde gratis och kommersiella versioner. Positioneras som "helt nativ för Kubernetes", vilket ger motsvarande fördelar (snabb integration med metoder och entiteter i K8s-klustret).
JÀmförelsetabell
SÄ, kulmen av artikeln Àr denna stora tabell:
Den Àr klickbar för möjlighet till mer detaljerad granskning och finns ocksÄ tillgÀnglig i formatet .
LÄt oss sammanfatta
Syftet med artikeln Àr att ge en mer komplett förstÄelse (Àven om det i sig inte Àr uttömmande!) om vilket val som bör göras i ditt specifika fall. Som vanligt har varje kontroller sina fördelar och nackdelar...
Den klassiska Ingress frĂ„n Kubernetes Ă€r bra pĂ„ grund av sin tillgĂ€nglighet och testbarhet, med tillrĂ€ckligt rika funktioner â i allmĂ€nhet bör den "rĂ€cka till". Men om det finns ökade krav pĂ„ stabilitet, funktionsnivĂ„ och utveckling, bör man övervĂ€ga Ingress med NGINX Plus och en betalprenumeration. Kong har ett omfattande utbud av plugins (och dĂ€rmed möjligheterna som de erbjuder), och i den betalversionen finns det till och med fler. Den har stora möjligheter att fungera som API Gateway, dynamisk konfiguration baserat pĂ„ CRD-resurser, samt grundlĂ€ggande Kubernetes-tjĂ€nster.
Vid högre krav pÄ belastningsbalansering och autentiseringsmetoder, kolla pÄ Traefik och HAProxy. Dessa Àr Open Source-projekt, beprövade genom Ären, mycket stabila och aktivt utvecklade. Contour har funnits ett par Är nu, men ser fortfarande för ungt ut och har endast de grundlÀggande funktionerna, tillagda ovanpÄ Envoy. Om det finns krav pÄ integration av WAF före applikationen, bör man övervÀga samma Ingress frÄn Kubernetes eller HAProxy.
De mest funktionella produkterna Àr de byggda pÄ Envoy, sÀrskilt Istio. Det framstÄr som en heltÀckande lösning som "kan allt", vilket dock innebÀr en betydligt högre tröskel för konfiguration/startadministration Àn för andra lösningar.
Vi har valt Ingress frĂ„n Kubernetes som standardkontroller och anvĂ€nds fortfarande, vilket tĂ€cker 80â90% av behoven. Den Ă€r ganska pĂ„litlig, lĂ€tt att konfigurera och utöka. Generellt, vid avsaknad av specifika krav, bör den passa de flesta kluster/applikationer. FrĂ„n liknande universella och relativt enkla produkter kan Traefik och HAProxy rekommenderas.
P.S.
LÀs Àven i vÄr blogg:
- «Tillbaka till mikrotjÀnster med Istio»: , , ;
- «»;
- «».
KĂ€lla: habr.com
