Az Ingress vezérlők áttekintése és összehasonlítása a Kuberneteshez

Az Ingress vezérlők áttekintése és összehasonlítása a Kuberneteshez

A Kubernetes cluster for a specific application should consider the requirements from the application, the business, and the developers. With this information, one can start making architectural decisions, particularly in choosing a specific Ingress controller, of which there are already many available today. To provide a basic overview of the available options without having to study numerous articles/documentation, we have prepared this review, including the main (production ready) Ingress controllers.

We hope this will assist colleagues in selecting an architectural solution — at the very least, it will serve as a starting point for obtaining more detailed information and practical experiments. We initially researched similar materials online and, strangely enough, found not a single reasonably complete, let alone structured, review. So let's fill this gap!

Criteria

To conduct a comparison and obtain any useful results, one must understand not only the subject area but also have a specific list of criteria that will guide the research focus. Without claiming to analyze all possible use cases for Ingress/Kubernetes, we have attempted to highlight the most common requirements for controllers — be prepared that specific details will need to be studied separately.

But I will start with characteristics that have become so common that they are implemented in all solutions and are not discussed:

  • dynamic service discovery;
  • SSL termination;
  • working with websockets.

Now — on the comparison points:

Supported protocols

One of the fundamental criteria for selection. Your software may not operate on standard HTTP or may require functioning with multiple protocols simultaneously. If your case is non-standard, be sure to consider this factor to avoid having to reconfigure the cluster later. The list of supported protocols varies among all controllers.

Software at its core

Többféle alkalmazás létezik, amelyen a vezérlő alapul. A legnépszerűbbek közé tartozik a nginx, traefik, haproxy, envoy. Általában nem befolyásolja túlságosan, hogy a forgalmat hogyan fogadják és továbbítják, de mindig hasznos tudni a potenciális finomságokat és jellemzőket, ami a „motorháztető alatt” található.

Forgalomirányítás

Milyen alapokon lehet dönteni a forgalom irányításáról egy adott szolgáltatás felé? Általában ez a host és a path, de vannak további lehetőségek is.

Névtér a klaszteren belül

A névtér (namespace) a Kubernetes erőforrások logikai felosztásának lehetősége (például stage, production stb.). Vannak Ingress-vezérlők, amelyeket külön kell telepíteni minden névtérbe (és így forgalmat irányíthatnak az adott térbe tartozó podokba). Vannak olyanok is (és ezek a többség), amelyek globálisan működnek az egész klaszterre — a forgalmat bármely podhoz irányítják a klaszteren belül, függetlenül a névtől. a fő DB példányhoz a podokba az adott térbe). Vannak olyan vezérlők is (és ezek a többség), amelyek globálisan működnek az egész klaszterre — az ilyen vezérlők bármely podhoz irányítják a forgalmat, függetlenül a névtértől.

Kérdések az upstreamokhoz

Hogyan biztosítják a forgalom irányítását az egészséges alkalmazás- és szolgáltatásminták felé? Vannak lehetőségek aktív és passzív ellenőrzésekre, újrapróbálkozásokra (retries), áramkörmegszakítókra. (további információkért lásd például a cikket az Istio-ról), saját állapotellenőrzési megoldásaikkal (custom health checks) stb. Ez egy nagyon fontos paraméter, ha magas elérhetőségi és időben történő kivezetési követelmények vannak a hibás szolgáltatásokból.

Kiegyensúlyozási algoritmusok

Itt számos lehetőség van: a hagyományos módszerektől körforgásos egészen egzotikusakig, mint például rdp-cookie, valamint különböző lehetőségek, mint például sticky sessions.

Hitelesítés

Milyen hitelesítési sémákat támogat a vezérlő? Basic, digest, oauth, external-auth — gondolom, hogy ezek az opciók ismerősek. Ez egy fontos kritérium, ha sok fejlesztői (és/vagy egyszerűen zárt) kör működik, amelyekhez az Ingress-en keresztül lehet hozzáférni.

Forgalomelosztás

Támogatja-e a vezérlő az olyan gyakran használt forgalomelosztási mechanizmusokat, mint a kanáriváltoztatások (canary), A/B-tesztelés, forgalom tükörzése (mirroring/shadowing)? Ez valóban fájdalmas téma az alkalmazások számára, amelyek pontos és precíz forgalomkezelést igényelnek a termék teszteléséhez, termékhibák debuggolásához (vagy minimális veszteségek mellett), a forgalom elemzéséhez stb.

Fizetős előfizetés

Van-e fizetős verzió a vezérlőből, kiterjesztett funkciókkal és/vagy technikai támogatással?

Grafikus felület (Web UI)

Van-e valamilyen grafikus felület a vezérlő konfigurációjának kezelésére? Főként a „könnyebb használat” érdekében és/vagy azok számára, akik módosításokat kívánnak végrehajtani az Ingress konfigurációban, de kényelmetlen a „nyers” sablonokkal dolgozni. Hasznos lehet, ha a fejlesztők kísérleteket szeretnének végezni a forgalommal.

JWT-érvényesítés

Beépített JSON web-tokenek ellenőrzésének megléte a felhasználói alkalmazás hitelesítésére és érvényesítésére.

Konfiguráció testreszabási lehetőségek

A sablonok bővíthetősége abban az értelemben, hogy mechanizmusokat tartalmaz, amelyek lehetővé teszik saját direktívák, zászlók stb. hozzáadását a standard konfigurációs sablonokhoz.

Alapvető védelmi mechanizmusok a DDoS ellen

Egyszerű sebességkorlátozó algoritmusok, vagy bonyolultabb megoldások, amelyek a forgalom szűrésére szolgálnak címek, fehérlisták, országok stb. alapján.

Kérésnyomozás

Megfigyelési, nyomon követési és hibakeresési lehetőségek az Ingress-től egyes szolgáltatások/pod-okhoz, és ideális esetben a szolgáltatások/pod-ok közötti nyomon követésre is.

WAF

Támogatás alkalmazás tűzfal.

Ingress vezérlők

A vezérlők listája az alábbiak alapján készült a Kubernetes hivatalos dokumentációja és e táblázat. Néhányat a specifikussága vagy kis elterjedtsége (korai fejlesztési szakasz) miatt kizártunk a betekintésből. A fennmaradókat alább tárgyaljuk. Kezdjük az általános megoldások leírásával, és folytatjuk egy összefoglaló táblázattal.

Ingress a Kubernetes-től

Weboldal: github.com/kubernetes/ingress-nginx
Licenc: Apache 2.0

Ez a Kubernetes hivatalos vezérlője, amelyet a közösség fejleszt. A nevéből egyértelműen kiderül, hogy nginx alapú, és kiegészítették különböző Lua bővítményekkel, amelyeket további lehetőségek megvalósítására használnak. Az nginx népszerűsége és a néhány minimális módosítás miatt, amikor vezérlőként használják, ez a verzió a legkönnyebben érthető és konfigurálható középkategóriás mérnök számára (webes tapasztalattal).

Ingress az NGINX Inc-től

Weboldal: github.com/nginxinc/kubernetes-ingress
Licenc: Apache 2.0

Az nginx fejlesztőinek hivatalos terméke. Fizetős verzióval rendelkezik, amelyen alapul. NGINX PlusA fő elképzelés a magas stabilitás, a folyamatos visszafelé kompatibilitás, mindenféle külső modul hiánya és a hivatalos vezérlőhöz képest elért fokozott sebesség (amelyet a Lua elhagyásával értek el).

A ingyenes változat jelentősen korlátozott, még a hivatalos vezérlőhöz képest is (a Lua modulok hiánya miatt). A fizetős változat ezzel szemben elég széleskörű kiegészítő funkciókkal rendelkezik: valós idejű metrikák, JWT-érvényesítés, aktív állapotellenőrzések és mások. Fontos előnye az NGINX Ingress-szel szemben a TCP/UDP forgalom teljes körű támogatása (és a közösségi verzióban is!). Hátrány — hiánya a forgalom elosztásának funkcióinak, ami azonban "maximális prioritást élvez a fejlesztők számára", de időt igényel a megvalósításhoz.

Kong Ingress

Weboldal: github.com/Kong/kubernetes-ingress-controller
Licenc: Apache 2.0

A Kong Inc. által kifejlesztett termék, két változatban: kereskedelmi és ingyenes. Az nginx alapjain készült, amelynek lehetőségeit sok Lua modul bővíti.

Eredetileg API-kérések feldolgozására és irányítására volt orientálva, azaz API Gateway-ként működött, azonban mára teljes értékű Ingress-vezérlővé vált. Fő előnyök: számos kiegészítő modul (többek között harmadik féltől származó fejlesztők által is) könnyen telepíthető és konfigurálható, amelyeken keresztül széles spektrumú kiegészítő lehetőségek valósíthatók meg. Azonban az alapfunkciók már számos lehetőséget kínálnak. A munka konfigurálása CRD-erőforrások segítségével történik.

A termék fontos jellemzője — egy konténer keretei között való működés (a cross-namespaced helyett) vitatott téma: valakinek hátrányként tűnhet (mivel entitások tömkelegét kell létrehozni minden konténerhez), míg másnak előnyként (bóiztosítva van a nagyobb szintű elszigeteltség, mivel ha egy vezérlő meghibásodik, a probléma egyetlen konténerre korlátozódik).

Traefik

Weboldal: github.com/containous/traefik
Licenc: MIT

Proxy, amelyet eredetileg a kérések irányítására terveztek mikroszolgáltatások és dinamikus környezetük számára. Innen következik számos hasznos lehetőség: konfiguráció frissítés teljes újraindítás nélkül, rengeteg terheléselosztási módszer támogatása, webes felület, metrika továbbítása, különböző protokollok támogatása, REST API, kanáris kiadások és még sok más. Kellemes jellemzője, hogy a Let’s Encrypt tanúsítványok támogatása natívan be van építve. Hátránya, hogy a magas rendelkezésre állás (HA) megvalósításához a vezérlő saját KV-tárolót igényel.

HAProxy

Weboldal: github.com/jcmoraisjr/haproxy-ingress
Licenc: Apache 2.0

A HAProxy régóta ismert proxyként és forgalomterhelés-elosztóként. A Kubernetes klaszter keretein belül a konfiguráció "lágy" frissítését (forgalomveszteség nélkül) kínálja, DNS alapú szolgáltatáskeresést, dinamikus konfigurálást API-n keresztül. A megoldás vonzó lehetősége a konfigurációs sablon teljes testreszabása, CM cseréjével és a Sprig könyvtár funkcionalitásának használatával. Összességében az alapvető hangsúly a gyors működésen, optimalizáltságon és a felhasználások hatékonyságán van. A vezérlő előnye a rekordmennyiségű különféle terheléselosztási mód támogatása.

Voyager

Weboldal: github.com/appscode/voyager
Licenc: Apache 2.0

A HAProxy alapú vezérlő, amelyet univerzális megoldásként pozicionálnak, széleskörű lehetőségeket támogat számos szolgáltatónál. Lehetővé teszi a forgalom terheléselosztását L7 és L4 szinten, míg a TCP L4 forgalom terheléselosztása egyértelműen a megoldás egyik kulcsfontosságú funkciója.

Contour

Weboldal: github.com/heptio/contour
Licenc: Apache 2.0

Ennek a megoldásnak az alapját nemcsak az Envoy képezi: közösen készítették a népszerű proxy szerzőivel. Fontos jellemzője a forgalom Ingress erőforrásainak CRD erőforrásokon keresztüli kezelése. Az olyan szervezetek számára, ahol több fejlesztőcsapat dolgozik egy klaszteren, ez segít maximalizálni a forgalom kezelésének biztonságát a szomszédos kontúrokban, és megvédi őket az Ingress erőforrások módosításából eredő hibáktól.

Egy kiterjesztett terheléselosztási módszerek készlete is elérhető (tartalmazza a kérés tükörözést, automatikus újrapróbálkozásokat, kérés rate-limitinget és sok mást), részletes forgalomfigyelés és hibafigyelés. Lehetséges, hogy néhányak számára jelentős hátrányt jelent a sticky sessions támogatásának hiánya (bár a munka már folyamatban van).

Istio Ingress

Weboldal: istio.io/docs/tasks/traffic-management/ingress
Licenc: Apache 2.0

Egy átfogó service mesh megoldás, amely nemcsak mint Ingress vezérlő működik a bejövő forgalom irányításában, hanem az egész klaszter keretein belül is kezeli a forgalmat. A háttérben, mint sidecar proxy minden szolgáltatás számára, az Envoy alkalmazás található. Valójában egy nagy kombájn, amely "mindent tud", és alapvető ötlete a maximális kezelhetőség, skálázhatóság, biztonság és átláthatóság. Segítségével finomra tudja hangolni a forgalom irányítását, a szolgáltatások közötti hozzáférés engedélyezését, terheléselosztását, figyelését, kanáris kiadásokat és még sok mást. Több információt az Istióról a "Vissza a mikroszolgáltatásokhoz Istióval».

Ambassador

Weboldal: github.com/datawire/ambassador
Licenc: Apache 2.0

Egy másik Envoy alapú megoldás. Ingyenes és kereskedelmi verziók is rendelkezésre állnak. Olyan megoldásként pozicionálják, mint a "teljesen natív Kubernetes számára", ami megfelelő előnyöket biztosít (szoros integráció a K8s klaszter módszereivel és entitásaival).

Összehasonlító táblázat

Így a cikk csúcspontja ez az óriási táblázat:

Az Ingress vezérlők áttekintése és összehasonlítása a Kuberneteshez

Kattintható, hogy lehetővé tegye a részletesebb nézetet, és elérhető Google Sheets.

Összegzés

A cikk célja, hogy átfogóbb megértést nyújtson (bár nem teljeskörű!) arról, hogy melyik választást válassza az Ön konkrét esetében. Mint általában, minden vezérlőnek megvannak a maga előnyei és hátrányai…

A klasszikus Ingress a Kubernetestől jónak számít elérhetősége és megbízhatósága miatt, és elég gazdag funkciókban — általában véve, ez elég is szokott lenni. Azonban, ha a stabilitással, a funkciók szintjével és a fejlesztéssel kapcsolatban magasabb követelmények vannak, érdemes figyelmet fordítani az NGINX Plus-szal és előfizetéssel rendelkező Ingress-re. A Kong számos pluginnal rendelkezik (és így a biztosított funkciókkal), ráadásul a fizetős verzióban még több van belőlük. Széleskörű lehetőségeket kínál API Gateway-ként, dinamikus konfigurálásra CRD-erőforrások alapján, valamint az alap Kubernetes szolgáltatások számára.

Magasabb követelmények esetén a terheléselosztással és az engedélyezési módszerekkel kapcsolatban érdemes figyelni a Traefik-re és a HAProxy-ra. Ezek nyílt forráskódú projektek, amelyeket éveken át teszteltek, nagyon stabilak és aktívan fejlődnek. A Contour már pár éve jelen van, de még mindig fiatalnak tűnik, és csak az Envoy-ra épülő alapvető funkciókkal rendelkezik. Ha WAF használatára/védelmére van szükség az alkalmazás előtt, akkor érdemes figyelni a Kubernetes Ingress-re vagy a HAProxy-ra is.

A legfunkciógazdagabb termékek az Envoy alapú megoldások, különösen az Istio. Ez egy átfogó megoldásként jelenik meg, ami "mindent tud", ami viszont magasabb belépési küszöböt jelent a konfigurálásra/indításra/adminisztrációra, mint a többi megoldás.

Mi az Ingress-t választottuk standard vezérlőként, és ez még mindig használatban van, amely 80-90% -os igényt elégít ki. Elég megbízható, könnyen konfigurálható, bővíthető. Általában, specifikus követelmények hiányában, ez megfelelő a legtöbb klaszterhez/alkalmazáshoz. Hasonló univerzális és viszonylag egyszerű termékekként a Traefik-et és a HAProxy-t lehet ajánlani.

P.S.

Olvasson további információkat a blogunkban:

Forrás: habr.com

Megbízható hosting vásárlása weboldalak számára, DDoS védelemmel, VPS VDS szerverek. 🔥 Megbízható webtárhely vásárlása DDoS védelemmel, VPS VDS szerverek | ProHoster