{"id":31173,"date":"2019-10-31T21:39:53","date_gmt":"2019-10-31T18:39:53","guid":{"rendered":"https:\/\/prohoster.info\/blog\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\/"},"modified":"2019-10-31T21:39:53","modified_gmt":"2019-10-31T18:39:53","slug":"obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","title":{"rendered":"Przegl\u0105d i por\u00f3wnanie kontroler\u00f3w Ingress dla Kubernetes","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Przegl\u0105d i por\u00f3wnanie kontroler\u00f3w Ingress dla Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/3e6d3882a8f5a96a257fab4daaa230f2.png\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nPrzy uruchamianiu klastra Kubernetes dla konkretnej aplikacji nale\u017cy zrozumie\u0107, jakie wymagania stawia ta aplikacja, biznes i programi\u015bci. Posiadaj\u0105c te informacje, mo\u017cna przyst\u0105pi\u0107 do podejmowania decyzji architektonicznych, w szczeg\u00f3lno\u015bci do wyboru konkretnego kontrolera Ingress, kt\u00f3rych obecnie jest wiele. Aby stworzy\u0107 podstawowe poj\u0119cie o dost\u0119pnych opcjach bez konieczno\u015bci przeszukiwania wielu artyku\u0142\u00f3w\/dokumentacji itp., przygotowali\u015bmy ten przegl\u0105d, w kt\u00f3rym uwzgl\u0119dnili\u015bmy g\u0142\u00f3wnych (gotowych do produkcji) kontroler\u00f3w Ingress.<\/p>\n<p>Mamy nadziej\u0119, \u017ce pomo\u017ce on kolegom w wyborze decyzji architektonicznej \u2014 przynajmniej b\u0119dzie punktem wyj\u015bcia do uzyskania bardziej szczeg\u00f3\u0142owych informacji i praktycznych eksperyment\u00f3w. Uprzednio zbadali\u015bmy inne podobne materia\u0142y w sieci i, co ciekawe, nie znale\u017ali\u015bmy \u017cadnego bardziej w miar\u0119 kompletnego, a przede wszystkim \u2014 uporz\u0105dkowanego \u2014 przegl\u0105du. Zatem uzupe\u0142nijmy t\u0119 luk\u0119!<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<h2>Kryteria<\/h2>\n<p>\nAby w og\u00f3le przeprowadzi\u0107 por\u00f3wnanie i uzyska\u0107 jakiekolwiek u\u017cyteczne wyniki, nale\u017cy zrozumie\u0107 nie tylko obszar tematyczny, ale tak\u017ce mie\u0107 konkretn\u0105 list\u0119 kryteri\u00f3w, kt\u00f3re b\u0119d\u0105 wyznacza\u0107 kierunek bada\u0144. Nie pretenduj\u0105c do analizy wszystkich mo\u017cliwych przypadk\u00f3w zastosowania Ingress\/Kubernetes, starali\u015bmy si\u0119 wyr\u00f3\u017cni\u0107 najbardziej og\u00f3lne wymagania dotycz\u0105ce kontroler\u00f3w \u2014 b\u0105d\u017acie gotowi na to, \u017ce wszelkie szczeg\u00f3\u0142y i specyfika b\u0119d\u0105 musia\u0142y by\u0107 badane osobno.<\/p>\n<p>Zaczn\u0119 jednak od cech, kt\u00f3re sta\u0142y si\u0119 na tyle powszechne, \u017ce s\u0105 zrealizowane we wszystkich rozwi\u0105zaniach i nie s\u0105 omawiane:<\/p>\n<ul>\n<li> dynamiczne odkrywanie us\u0142ug (service discovery);<\/li>\n<li> terminowanie SSL;<\/li>\n<li> praca z websocketami.<\/li>\n<\/ul>\n<p>\nTeraz \u2014 o punktach por\u00f3wnania:<\/p>\n<h3>Obs\u0142ugiwane protoko\u0142y<\/h3>\n<p>\nJeden z podstawowych kryteri\u00f3w wyboru. Wasze oprogramowanie mo\u017ce nie dzia\u0142a\u0107 wed\u0142ug standardowego protoko\u0142u HTTP lub wymaga\u0107 pracy od razu z wieloma protoko\u0142ami. Je\u015bli wasz przypadek jest niestandardowy, koniecznie we\u017acie pod uwag\u0119 ten czynnik, aby nie trzeba by\u0142o p\u00f3\u017aniej ponownie konfigurowa\u0107 klastra. Lista obs\u0142ugiwanych protoko\u0142\u00f3w r\u00f3\u017cni si\u0119 w zale\u017cno\u015bci od kontrolera.<\/p>\n<h3>Oprogramowanie w podstawie<\/h3>\n<p>\nIstnieje kilka rodzaj\u00f3w aplikacji, na kt\u00f3rych oparty jest kontroler. Popularne to nginx, traefik, haproxy, envoy. W og\u00f3lnym przypadku mo\u017ce to nie mie\u0107 du\u017cego wp\u0142ywu na to, jak ruch jest odbierany i przesy\u0142any, jednak zawsze warto zna\u0107 potencjalne niuanse i szczeg\u00f3\u0142y tego, co \u201epod mask\u0105\u201d.<\/p>\n<h3>Trasowanie ruchu<\/h3>\n<p>\nNa podstawie czego mo\u017cna podejmowa\u0107 decyzje o kierowaniu ruchu do konkretnej us\u0142ugi? Zazwyczaj jest to host i \u015bcie\u017cka, ale istniej\u0105 r\u00f3wnie\u017c dodatkowe mo\u017cliwo\u015bci.<\/p>\n<h3>Przestrze\u0144 nazw w klastrze<\/h3>\n<p>\nPrzestrze\u0144 nazw (namespace) \u2013 mo\u017cliwo\u015b\u0107 logicznego podzia\u0142u zasob\u00f3w w Kubernetes (na przyk\u0142ad na stage, production itp.). S\u0105 kontrolery Ingress, kt\u00f3re nale\u017cy instalowa\u0107 osobno w ka\u017cdej przestrzeni nazw (i wtedy mog\u0105 kierowa\u0107 ruch <i>tylko<\/i> w podach tej przestrzeni). Istniej\u0105 takie (i jest ich zdecydowana wi\u0119kszo\u015b\u0107), kt\u00f3re dzia\u0142aj\u0105 globalnie na ca\u0142y klaster \u2014 w nich ruch kierowany jest do dowolnego podu klastra, niezale\u017cnie od przestrzeni nazw.<\/p>\n<h3>Pr\u00f3bki dla upstream\u00f3w<\/h3>\n<p>\nW jaki spos\u00f3b zapewniane jest kierowanie ruchu do zdrowych instancji aplikacji, us\u0142ug? Istniej\u0105 opcje z aktywnymi i pasywnymi kontrolami, powt\u00f3rnymi pr\u00f3bami (retries), circuit breakers <i>(wi\u0119cej na ten temat mo\u017cna znale\u017a\u0107 na przyk\u0142ad w <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">artyku\u0142 o Istio<\/a><\/noindex>)<\/i>, w\u0142asnymi realizacjami kontroli zdrowia (custom health checks) itp. Jest to bardzo wa\u017cny parametr, je\u015bli masz wysokie wymagania dotycz\u0105ce dost\u0119pno\u015bci i terminowego wy\u0142\u0105czenia z obci\u0105\u017cenia us\u0142ug, kt\u00f3re uleg\u0142y awarii.<\/p>\n<h3>Algorytmy balansowania<\/h3>\n<p>\nTutaj jest wiele opcji: od tradycyjnych <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Round-robin_DNS\">round-robin<\/a><\/noindex> do egzotycznych, takich jak <noindex><a rel=\"nofollow\" href=\"http:\/\/www.loadbalancer.org\/blog\/load-balancing-windows-terminal-server-haproxy-and-rdp-cookies\/\">rdp-cookie<\/a><\/noindex>, a tak\u017ce dodatkowe mo\u017cliwo\u015bci, takie jak <noindex><a rel=\"nofollow\" href=\"https:\/\/access.redhat.com\/solutions\/900933\">sesje sticky<\/a><\/noindex>.<\/p>\n<h3>Autoryzacja<\/h3>\n<p>\nJakie schematy autoryzacji obs\u0142uguje kontroler? Basic, digest, oauth, external-auth \u2013 my\u015bl\u0119, \u017ce te opcje powinny by\u0107 znane. To wa\u017cny kryterium, je\u015bli korzysta si\u0119 z wielu obwod\u00f3w dla deweloper\u00f3w (i\/lub po prostu zamkni\u0119tych), do kt\u00f3rych dost\u0119p realizowany jest poprzez Ingress. <\/p>\n<h3>Rozdzielanie ruchu<\/h3>\n<p>\nCzy kontroler obs\u0142uguje takie powszechnie stosowane mechanizmy rozdzielania ruchu, jak wdro\u017cenia kanarowe (canary), testy A\/B, mirroring\/shadowing? To naprawd\u0119 wa\u017cny temat dla aplikacji, kt\u00f3re wymagaj\u0105 dok\u0142adnego i precyzyjnego zarz\u0105dzania ruchem do test\u00f3w produkcyjnych, debugowania b\u0142\u0119d\u00f3w produkt\u00f3w nie na \u017cywo (lub przy minimalnych stratach), analizy ruchu itp.<\/p>\n<h3>Subskrypcja p\u0142atna<\/h3>\n<p>\nCzy istnieje p\u0142atna wersja kontrolera z rozszerzonymi funkcjonalno\u015bciami i\/lub wsparciem technicznym?<\/p>\n<h3>Interfejs graficzny (Web UI)<\/h3>\n<p>\nCzy istnieje jakikolwiek graficzny interfejs do zarz\u0105dzania konfiguracj\u0105 kontrolera? G\u0142\u00f3wnie dla \u201ewygody\u201d i\/lub dla tych, kt\u00f3rzy musz\u0105 wprowadza\u0107 zmiany w konfiguracji Ingress, ale praca z \u201esurowymi\u201d szablonami jest niewygodna. Mo\u017ce by\u0107 przydatny, gdy programi\u015bci chc\u0105 przeprowadza\u0107 jakie\u015b eksperymenty z ruchem na bie\u017c\u0105co.<\/p>\n<h3>Weryfikacja JWT<\/h3>\n<p>\nObecno\u015b\u0107 wbudowanej weryfikacji token\u00f3w JSON web do autoryzacji i walidacji u\u017cytkownika w aplikacji ko\u0144cowej.<\/p>\n<h3>Mo\u017cliwo\u015bci dostosowania konfiguracji<\/h3>\n<p>\nRozszerzalno\u015b\u0107 szablon\u00f3w w sensie dost\u0119pno\u015bci mechanizm\u00f3w pozwalaj\u0105cych na dodawanie w standardowych szablonach konfiguracji w\u0142asnych dyrektyw, flag itp.<\/p>\n<h3>Podstawowe mechanizmy ochrony przed DDOS<\/h3>\n<p>\nProste algorytmy limituj\u0105ce ruch lub bardziej z\u0142o\u017cone opcje filtrowania ruchu na podstawie adres\u00f3w, bia\u0142ych list, kraj\u00f3w itp.<\/p>\n<h3>\u015aledzenie zapyta\u0144<\/h3>\n<p>\nMo\u017cliwo\u015bci monitorowania, \u015bledzenia i debugowania \u017c\u0105da\u0144 od Ingress\u00f3w do konkretnych us\u0142ug\/pod\u00f3w, a w idealnym przypadku \u2014 tak\u017ce mi\u0119dzy us\u0142ugami\/podami.<\/p>\n<h3>WAF<\/h3>\n<p>\nWsparcie <noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Web_application_firewall\">aplikacyjnego firewalla<\/a><\/noindex>.<\/p>\n<h2>Kontrolery Ingress<\/h2>\n<p>\nLista kontroler\u00f3w zosta\u0142a opracowana na podstawie <noindex><a rel=\"nofollow\" href=\"https:\/\/kubernetes.io\/docs\/concepts\/services-networking\/ingress-controllers\/#additional-controllers\">oficjalnej dokumentacji Kubernetes<\/a><\/noindex> i <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/spreadsheets\/d\/16bxRgpO1H_Bn-5xVZ1WrR_I-0A-GOI6egmhvqqLMOmg\/edit\">tego zestawienia<\/a><\/noindex>. Niekt\u00f3re z nich zosta\u0142y wykluczone z przegl\u0105du z powodu specyfiki lub ma\u0142ej popularno\u015bci (wczesna faza rozwoju). Pozosta\u0142e s\u0105 om\u00f3wione poni\u017cej. Zacznijmy od og\u00f3lnego opisu rozwi\u0105za\u0144 i kontynuujmy zestawieniem tabeli.<\/p>\n<h3>Ingress od Kubernetes<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/kubernetes\/ingress-nginx\">github.com\/kubernetes\/ingress-nginx<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>To oficjalny kontroler dla Kubernetes, kt\u00f3ry jest rozwijany przez spo\u0142eczno\u015b\u0107. Jak wskazuje nazwa, oparty jest na nginx i wzbogacony o r\u00f3\u017cny zestaw wtyczek Lua, stosowanych do realizacji dodatkowych mo\u017cliwo\u015bci. Dzi\u0119ki popularno\u015bci samego nginx i minimalnym modyfikacjom przy u\u017cyciu jako kontrolera, ta opcja mo\u017ce by\u0107 najprostsz\u0105 i najbardziej zrozumia\u0142\u0105 w konfiguracji dla przeci\u0119tnego in\u017cyniera (z do\u015bwiadczeniem w web).<\/p>\n<h3>Ingress od NGINX Inc<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/kubernetes-ingress\">github.com\/nginxinc\/kubernetes-ingress<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Oficjalny produkt tw\u00f3rc\u00f3w nginx. Posiada p\u0142atn\u0105 wersj\u0119 opart\u0105 na <noindex><a rel=\"nofollow\" href=\"https:\/\/www.nginx.com\/products\/nginx\/\">NGINX Plus<\/a><\/noindex>G\u0142\u00f3wn\u0105 ide\u0105 jest wysoki poziom stabilno\u015bci, ci\u0105g\u0142a wsteczna kompatybilno\u015b\u0107, brak jakichkolwiek zewn\u0119trznych modu\u0142\u00f3w i zadeklarowana zwi\u0119kszona pr\u0119dko\u015b\u0107 (w por\u00f3wnaniu do oficjalnego kontrolera), osi\u0105gni\u0119ta dzi\u0119ki rezygnacji z Lua. <\/p>\n<p>Wersja darmowa jest znacznie okrojona, nawet w por\u00f3wnaniu do oficjalnego kontrolera (ze wzgl\u0119du na brak tych samych modu\u0142\u00f3w Lua). Wersja p\u0142atna oferuje natomiast do\u015b\u0107 szerok\u0105 gam\u0119 dodatkowych funkcji: metryki w czasie rzeczywistym, walidacj\u0119 JWT, aktywne health checki i inne. Wa\u017cn\u0105 zalet\u0105 w por\u00f3wnaniu do NGINX Ingress jest pe\u0142ne wsparcie dla ruchu TCP\/UDP (r\u00f3wnie\u017c w wersji community!). Minusem jest <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/nginxinc\/kubernetes-ingress\/issues\/464\">brak<\/a><\/noindex> niedob\u00f3r funkcji do rozk\u0142adania ruchu, co jednak \u201ema najwy\u017cszy priorytet dla programist\u00f3w\u201d, ale wymaga czasu na realizacj\u0119.<\/p>\n<h3>Kong Ingress<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Kong\/kubernetes-ingress-controller\">github.com\/Kong\/kubernetes-ingress-controller<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Produkt rozwijany przez firm\u0119 Kong Inc. w dw\u00f3ch wersjach: komercyjnej i darmowej. Opiera si\u0119 na nginx, kt\u00f3rego mo\u017cliwo\u015bci zosta\u0142y rozszerzone o szereg modu\u0142\u00f3w na Lua.<\/p>\n<p>Pocz\u0105tkowo by\u0142 skierowany na obs\u0142ug\u0119 i routowanie \u017c\u0105da\u0144 API, tj. jako API Gateway, jednak obecnie sta\u0142 si\u0119 pe\u0142noprawnym kontrolerem Ingress. G\u0142\u00f3wne zalety: wiele dodatkowych modu\u0142\u00f3w (w tym od zewn\u0119trznych programist\u00f3w), kt\u00f3re mo\u017cna \u0142atwo zainstalowa\u0107 i skonfigurowa\u0107, a kt\u00f3re umo\u017cliwiaj\u0105 realizacj\u0119 szerokiego wachlarza dodatkowych mo\u017cliwo\u015bci. Niemniej wbudowane funkcje oferuj\u0105 ju\u017c wiele mo\u017cliwo\u015bci. Konfiguracja pracy odbywa si\u0119 za pomoc\u0105 zasob\u00f3w CRD.<\/p>\n<p>Wa\u017cn\u0105 cech\u0105 produktu jest dzia\u0142anie w ramach jednego konturu (w przeciwie\u0144stwie do cross-namespaced), co jest kontrowersyjnym tematem: dla niekt\u00f3rych mo\u017ce to by\u0107 wad\u0105 (konieczno\u015b\u0107 tworzenia jednostek dla ka\u017cdego konturu), a dla innych \u2013 funkcjonalno\u015bci\u0105 (wi\u0119kszy poziom izolacji, poniewa\u017c je\u015bli jeden kontroler zawiedzie, problem ogranicza si\u0119 tylko do jednego konturu).<i>wi\u0119ksz\u0105<\/i>wi\u0119kszy poziom izolacji, poniewa\u017c je\u015bli jeden kontroler ulegnie awarii, problem dotyczy tylko jednego konturu.<\/p>\n<h3>Traefik<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/containous\/traefik\">github.com\/containous\/traefik<\/a><\/noindex><\/i><br \/>\n<i>Licencja: MIT<\/i><\/p>\n<p>Proxy, kt\u00f3re pierwotnie zosta\u0142o stworzone do pracy z routowaniem \u017c\u0105da\u0144 dla mikrous\u0142ug i ich dynamicznego \u015brodowiska. St\u0105d wiele przydatnych funkcji: aktualizacja konfiguracji ca\u0142kowicie bez przestoj\u00f3w, wsparcie dla wielu metod balansowania, interfejs webowy, przesy\u0142anie metryk, wsparcie dla r\u00f3\u017cnych protoko\u0142\u00f3w, REST API, wydania kanaryjskie i wiele wi\u0119cej. Przyjemn\u0105 w\u0142a\u015bciwo\u015bci\u0105 jest r\u00f3wnie\u017c wsparcie dla certyfikat\u00f3w Let's Encrypt bez dodatkowych konfiguracji. Niedogodno\u015bci\u0105 jest to, \u017ce dla zorganizowania wysokiej dost\u0119pno\u015bci (HA) kontroler potrzebuje instalacji i pod\u0142\u0105czenia w\u0142asnego magazynu KV.<\/p>\n<h3>HAProxy<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/jcmoraisjr\/haproxy-ingress\">github.com\/jcmoraisjr\/haproxy-ingress<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>HAProxy od dawna znane jest jako proxy i balancer ruchu. W ramach klastra Kubernetes oferuje \"mi\u0119kk\u0105\" aktualizacj\u0119 konfiguracji (bez utraty ruchu), odkrywanie us\u0142ug na podstawie DNS, dynamiczn\u0105 konfiguracj\u0119 za pomoc\u0105 API. Atrakcyjno\u015b\u0107 mo\u017ce stanowi\u0107 pe\u0142na customizacja szablonu konfiguracji poprzez zamian\u0119 CM-a, jak r\u00f3wnie\u017c mo\u017cliwo\u015b\u0107 u\u017cywania w nim funkcji biblioteki Sprig. Og\u00f3lnie rzecz bior\u0105c, g\u0142\u00f3wny nacisk rozwi\u0105zania k\u0142adzie si\u0119 na wysok\u0105 pr\u0119dko\u015b\u0107 pracy, jego optymalizacj\u0119 i efektywno\u015b\u0107 w zu\u017cywanych zasobach. Zalet\u0105 kontrolera jest wsparcie rekordowej liczby r\u00f3\u017cnych metod balansowania.<\/p>\n<h3>Voyager<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/appscode\/voyager\">github.com\/appscode\/voyager<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Kontroler oparty na HAproxy, kt\u00f3ry jest pozycjonowany jako uniwersalne rozwi\u0105zanie, oferuj\u0105ce szerokie mo\u017cliwo\u015bci na du\u017cej liczbie dostawc\u00f3w. Oferuje mo\u017cliwo\u015b\u0107 r\u00f3wnowa\u017cenia ruchu na L7 i L4, a r\u00f3wnowa\u017cenie ruchu TCP L4 mo\u017cna okre\u015bli\u0107 jako jedn\u0105 z kluczowych cech tego rozwi\u0105zania.<\/p>\n<h3>Contour<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/heptio\/contour\">github.com\/heptio\/contour<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Podstaw\u0105 tego rozwi\u0105zania nie tylko jest Envoy: zosta\u0142o opracowane <i>wsp\u00f3lnie<\/i> z autorami tego popularnego proxy. Wa\u017cn\u0105 cech\u0105 jest mo\u017cliwo\u015b\u0107 podzia\u0142u zarz\u0105dzania zasobami Ingress za pomoc\u0105 zasob\u00f3w CRD IngressRoute. Dla organizacji z wieloma zespo\u0142ami deweloperskimi u\u017cywaj\u0105cymi jednego klastra, pomaga to maksymalnie zabezpieczy\u0107 prac\u0119 z ruchem w s\u0105siednich konturach i chroni\u0107 je przed b\u0142\u0119dami podczas zmiany zasob\u00f3w Ingress.<\/p>\n<p>Oferowany jest r\u00f3wnie\u017c rozszerzony zestaw metod balansowania (w tym mirrorowanie \u017c\u0105da\u0144, automatyczne powt\u00f3rzenia, ograniczenia w zale\u017cno\u015bci od rate'u \u017c\u0105da\u0144 i wiele wi\u0119cej), szczeg\u00f3\u0142owe monitorowanie ruchu i awarii. Dla niekt\u00f3rych mo\u017ce by\u0107 istotnym minusem brak wsparcia dla sticky sessions (chocia\u017c prace <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/heptio\/contour\/issues\/361\">s\u0105 ju\u017c w toku<\/a><\/noindex>).<\/p>\n<h3>Istio Ingress<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/istio.io\/docs\/tasks\/traffic-management\/ingress\/\">istio.io\/docs\/tasks\/traffic-management\/ingress<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Kompleksowe rozwi\u0105zanie service mesh, kt\u00f3re jest nie tylko kontrolerem Ingress zarz\u0105dzaj\u0105cym przychodz\u0105cym ruchem zewn\u0119trznym, ale tak\u017ce kontroluje ca\u0142y ruch w ramach klastra. \u2018Pod mask\u0105\u2019, jako proxy sidecar dla ka\u017cdej us\u0142ugi, u\u017cywany jest Envoy. W istocie to du\u017cy kombajn, kt\u00f3ry \u2018mo\u017ce wszystko\u2019, a jego g\u0142\u00f3wn\u0105 ide\u0105 jest maksymalna kontrolowalno\u015b\u0107, rozszerzalno\u015b\u0107, bezpiecze\u0144stwo i przezroczysto\u015b\u0107. Dzi\u0119ki niemu mo\u017cesz szczeg\u00f3\u0142owo konfigurowa\u0107 trasowanie ruchu, autoryzacj\u0119 dost\u0119pu mi\u0119dzy us\u0142ugami, r\u00f3wnowa\u017cenie obci\u0105\u017cenia, monitoring, releasy kanaryjne i wiele wi\u0119cej. Szczeg\u00f3\u0142y o Istio znajdziesz w serii artyku\u0142\u00f3w \u2018<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">Powr\u00f3t do mikrous\u0142ug z Istio<\/a><\/noindex>\u00bb.<\/p>\n<h3>Ambassador<\/h3>\n<p>\n<i>Strona: <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/datawire\/ambassador\">github.com\/datawire\/ambassador<\/a><\/noindex><\/i><br \/>\n<i>Licencja: Apache 2.0<\/i><\/p>\n<p>Kolejne rozwi\u0105zanie oparte na Envoy. Posiada wersje darmowe i komercyjne. Pozycjonuje si\u0119 jako \u2018w pe\u0142ni natywne dla Kubernetes\u2019, co przynosi odpowiednie korzy\u015bci (\u015bcis\u0142a integracja z metodami i encjami klastra K8s).<\/p>\n<h2>Tabela por\u00f3wnawcza<\/h2>\n<p>\nZatem kulminacj\u0105 artyku\u0142u jest ta ogromna tabela:<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/habrastorage.org\/webt\/ss\/wh\/lj\/sswhljo-rjkms7nadtyewqkxrdi.png\"><img decoding=\"async\" alt=\"Przegl\u0105d i por\u00f3wnanie kontroler\u00f3w Ingress dla Kubernetes\" src=\"\/wp-content\/uploads\/2019\/04\/3a6c552df6b8b7b6a88517046fa7a275.png\" style=\"display:block;margin: 0 auto;\" \/><\/a><\/noindex><\/p>\n<p>Jest klikalna, aby umo\u017cliwi\u0107 bardziej szczeg\u00f3\u0142owy przegl\u0105d, a tak\u017ce dost\u0119pna w formacie <noindex><a rel=\"nofollow\" href=\"https:\/\/docs.google.com\/spreadsheets\/d\/1xjff2AMS6QXSdh8E8ay_uNMoUa2OLIanCallvkDvAy0\/edit#gid=0\">Google Sheets<\/a><\/noindex>.<\/p>\n<h2>Podsumujmy<\/h2>\n<p>\nCelem artyku\u0142u jest dostarczenie pe\u0142niejszego zrozumienia (cho\u0107 zupe\u0142nie nie wyczerpuj\u0105cego!) tego, jaki wyb\u00f3r nale\u017cy dokona\u0107 w Twoim konkretnym przypadku. Jak to zwykle bywa, ka\u017cdy kontroler ma swoje zalety i wady...<\/p>\n<p>Klasyczny Ingress od Kubernetes jest ceniony za swoj\u0105 dost\u0119pno\u015b\u0107 i niezawodno\u015b\u0107 oraz bogate mo\u017cliwo\u015bci \u2014 og\u00f3lnie rzecz bior\u0105c, powinien wystarczy\u0107 w wi\u0119kszo\u015bci przypadk\u00f3w. Je\u015bli jednak Twoje wymagania co do stabilno\u015bci, funkcji i rozwoju s\u0105 wy\u017csze, warto zwr\u00f3ci\u0107 uwag\u0119 na Ingress z NGINX Plus i p\u0142atn\u0105 subskrypcj\u0105. Kong oferuje bogaty zestaw wtyczek (i zwi\u0105zanych z nimi mo\u017cliwo\u015bci), a w wersji p\u0142atnej jest ich jeszcze wi\u0119cej. Posiada szerokie mo\u017cliwo\u015bci pracy jako API Gateway oraz dynamicznej konfiguracji na podstawie zasob\u00f3w CRD, a tak\u017ce podstawowych us\u0142ug Kubernetes.<\/p>\n<p>Przy zwi\u0119kszonych wymaganiach dotycz\u0105cych r\u00f3wnowa\u017cenia obci\u0105\u017cenia i metod autoryzacji warto przyjrze\u0107 si\u0119 Traefik oraz HAProxy. To projekty Open Source, kt\u00f3re zosta\u0142y sprawdzone przez lata, s\u0105 bardzo stabilne i aktywnie rozwijane. Contour istnieje od kilku lat, ale nadal wygl\u0105da na stosunkowo m\u0142ody i ma jedynie podstawowe mo\u017cliwo\u015bci, dodane na podstawie Envoy. Je\u015bli masz wymogi dotycz\u0105ce posiadania\/wbudowania WAF przed aplikacj\u0105, warto zwr\u00f3ci\u0107 uwag\u0119 na ten sam Ingress od Kubernetes lub HAProxy.<\/p>\n<p>Najbardziej funkcjonalne s\u0105 produkty zbudowane na bazie Envoy, szczeg\u00f3lnie Istio. Uznawany jest za kompleksowe rozwi\u0105zanie, kt\u00f3re \"mo\u017ce wszystko\", co jednak oznacza znacznie wy\u017cszy pr\u00f3g wej\u015bcia w zakresie konfiguracji\/uruchomienia\/administrowania w por\u00f3wnaniu do innych rozwi\u0105za\u0144.<\/p>\n<p>Jako standardowy kontroler wybrali\u015bmy i nadal u\u017cywamy Ingress od Kubernetes, kt\u00f3ry pokrywa 80\u201390% potrzeb. Jest ca\u0142kiem niezawodny, \u0142atwy do konfiguracji i rozszerzania. Z regu\u0142y, przy braku specyficznych wymaga\u0144, powinien pasowa\u0107 do wi\u0119kszo\u015bci klastr\u00f3w\/aplikacji. Z podobnych uniwersalnych i stosunkowo prostych produkt\u00f3w mo\u017cna poleci\u0107 Traefik i HAProxy.<\/p>\n<h2>P.S.<\/h2>\n<p>\nPrzeczytaj tak\u017ce na naszym blogu:<\/p>\n<ul>\n<li> \u201ePowr\u00f3t do mikroserwis\u00f3w z Istio\u201d: <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/438426\/\">cz\u0119\u015b\u0107 1 (wprowadzenie do podstawowych mo\u017cliwo\u015bci)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/440378\/\">cz\u0119\u015b\u0107 2 (routing, zarz\u0105dzanie ruchem)<\/a><\/noindex>, <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/443668\/\">cz\u0119\u015b\u0107 3 (uwierzytelnianie i autoryzacja)<\/a><\/noindex>;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/445596\/\">Kubernetes wskaz\u00f3wki i triki: spersonalizowane strony b\u0142\u0119d\u00f3w w NGINX Ingress<\/a><\/noindex>\u00bb;<\/li>\n<li> \u00ab<noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/427745\/\">Porady i triki Kubernetes: dost\u0119p do \u015brodowisk deweloperskich<\/a><\/noindex>\u00bb.<\/li>\n<\/ul>\n<p>\u0179r\u00f3d\u0142o: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/flant\/blog\/447180\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u043f\u043e\u043d\u0438\u043c\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043a \u044d\u0442\u043e\u043c\u0443 \u0440\u0435\u0441\u0443\u0440\u0441\u0443 \u0441\u0430\u043c\u043e \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435, \u0431\u0438\u0437\u043d\u0435\u0441 \u0438 \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a\u0438. \u041f\u0440\u0438 \u043d\u0430\u043b\u0438\u0447\u0438\u0438 \u044d\u0442\u043e\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0441\u0442\u0443\u043f\u0430\u0442\u044c \u043a \u043f\u0440\u0438\u043d\u044f\u0442\u0438\u044e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0438, \u0432 \u0447\u0430\u0441\u0442\u043d\u043e\u0441\u0442\u0438, \u043a \u0432\u044b\u0431\u043e\u0440\u0443 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e Ingress-\u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u0430, \u043a\u043e\u0438\u0445 \u043d\u0430 \u0441\u0435\u0433\u043e\u0434\u043d\u044f\u0448\u043d\u0438\u0439 \u0434\u0435\u043d\u044c \u0443\u0436\u0435 \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0431\u0430\u0437\u043e\u0432\u043e\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043e\u0431 \u0438\u043c\u0435\u044e\u0449\u0438\u0445\u0441\u044f \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430\u0445 \u0431\u0435\u0437 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u043e [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":23140,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-31173","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.1.1 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.1.1\" \/>\n\t\t<meta property=\"og:locale\" content=\"pl_PL\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Ingress \u0434\u043b\u044f Kubernetes | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T18:39:53+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T18:39:53+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Przegl\u0105d i por\u00f3wnanie kontroler\u00f3w Ingress dla Kubernetes | ProHoster","description":"Podczas uruchamiania klastra Kubernetes dla.","canonical_url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pl_PL","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u041e\u0431\u0437\u043e\u0440 \u0438 \u0441\u0440\u0430\u0432\u043d\u0435\u043d\u0438\u0435 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u043b\u0435\u0440\u043e\u0432 Ingress \u0434\u043b\u044f Kubernetes | ProHoster","og:description":"\u041f\u0440\u0438 \u0437\u0430\u043f\u0443\u0441\u043a\u0435 \u043a\u043b\u0430\u0441\u0442\u0435\u0440\u0430 Kubernetes \u0434\u043b\u044f.","og:url":"https:\/\/prohoster.info\/pl\/blog\/administrirovanie\/obzor-i-sravnenie-kontrollerov-ingress-dlya-kubernetes","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T18:39:53+00:00","article:modified_time":"2019-10-31T18:39:53+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"31173","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-21 04:53:04","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 03:21:32","updated":"2026-01-21 04:53:04","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/comments?post=31173"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/posts\/31173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media\/23140"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/media?parent=31173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/categories?post=31173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pl\/wp-json\/wp\/v2\/tags?post=31173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}