Kubernetes үшін Ingress контроллерлеріне шолу және салыстыру

Kubernetes үшін Ingress контроллерлеріне шолу және салыстыру

Арнайы қолданба үшін Kubernetes кластерін іске қосқан кезде қолданбаның өзі, бизнес және әзірлеушілер бұл ресурсқа не беретінін түсінуіңіз керек. Осы ақпаратпен сіз архитектуралық шешім қабылдауға және, атап айтқанда, бүгінде үлкен саны бар нақты Ingress контроллерін таңдауға болады. Көптеген мақалаларды / құжаттаманы және т.

Бұл әріптестерге архитектуралық шешімді таңдауға көмектеседі деп үміттенеміз - кем дегенде, бұл егжей-тегжейлі ақпарат пен практикалық эксперименттер алудың бастапқы нүктесі болады. Бұрын біз желіде басқа ұқсас материалдарды зерттедік және бір қызығы, бірде-бір толық немесе аз толық, ең бастысы - құрылымдық шолуды таппадық. Ендеше сол олқылықтың орнын толтырайық!

критерийлері

Негізінде, салыстыру және кез келген пайдалы нәтиже алу үшін сіз тек пәндік аймақты ғана емес, сонымен қатар зерттеу векторын белгілейтін критерийлердің нақты тізіміне ие болуыңыз керек. Ingress / Kubernetes пайдаланудың барлық ықтимал жағдайларын талдамай-ақ, біз контроллерлерге қойылатын ең жалпы талаптарды бөліп көрсетуге тырыстық - кез келген жағдайда сіз өзіңіздің барлық ерекшеліктеріңіз бен ерекшеліктеріңізді бөлек зерттеуге тура келетініне дайын болыңыз.

Бірақ мен таныс болған сипаттамалардан бастайын, олар барлық шешімдерде жүзеге асырылады және қарастырылмайды:

  • қызметтерді динамикалық табу (сервис табу);
  • SSL тоқтату;
  • веб-сокеттермен жұмыс істеу.

Енді салыстыру нүктелері үшін:

Қолдау көрсетілетін протоколдар

Негізгі таңдау критерийлерінің бірі. Бағдарламалық құрал стандартты HTTP протоколында жұмыс істемеуі мүмкін немесе бір уақытта бірнеше протоколдармен жұмыс істеуді қажет етуі мүмкін. Егер сіздің жағдайыңыз стандартты емес болса, кластерді кейінірек қайта конфигурациялаудың қажеті болмас үшін осы факторды ескеріңіз. Барлық контроллерлер үшін қолдау көрсетілетін протоколдар тізімі өзгереді.

негізінде бағдарламалық қамтамасыз ету

Контроллер негізделген қолданбалардың бірнеше нұсқалары бар. Танымалдары - nginx, traefik, haproxy, envoy. Жалпы жағдайда, ол трафиктің қалай қабылданатынына және тасымалданатынына көп әсер етпеуі мүмкін, бірақ «қақпақтың астында» болатын нәрсенің ықтимал нюанстары мен ерекшеліктерін білу әрқашан пайдалы.

Трафикті маршруттау

Ненің негізінде белгілі бір қызметке трафик бағыты туралы шешім қабылдауға болады? Әдетте бұл хост және жол, бірақ қосымша мүмкіндіктер бар.

Кластер ішіндегі аттар кеңістігі

Атау кеңістігі (аттар кеңістігі) - Kubernetes-тегі ресурстарды логикалық түрде бөлу мүмкіндігі (мысалы, сахнада, өндірісте және т.б.). Әрбір аттар кеңістігінде бөлек орнатылатын кіру контроллері бар (содан кейін ол трафикті бағыттай алады тек осы кеңістіктің бұршақтарына). Бүкіл кластер үшін жаһандық деңгейде жұмыс істейтіндер (және олардың айқын көпшілігі) бар - оларда трафик атау кеңістігіне қарамастан кластердің кез келген подкағына бағытталған.

Жоғары ағындарға арналған үлгілер

Қолданбаның, қызметтердің сау даналарына трафик қалай бағытталады? Белсенді және пассивті тексерулер, қайталау, автоматты ажыратқыштар бар опциялар бар (Толығырақ, мысалы, қараңыз. Истио туралы мақала), арнайы денсаулық тексерулері және т.б. Өте маңызды параметр, егер сізде қол жетімділікке және сәтсіз қызметтерді теңгерімдеуден уақтылы жоюға жоғары талаптар болса.

Теңдестіру алгоритмдері

Көптеген нұсқалар бар: дәстүрліден айналма робин экзотикаға rdp-cookie, сондай-ақ жеке ерекшеліктері сияқты жабысқақ сеанстар.

Түпнұсқалық растама

Контроллер қандай авторизация схемаларын қолдайды? Basic, дайджест, oauth, external-auth - бұл опциялар таныс болуы керек деп ойлаймын. Бұл Ingress арқылы кіруге болатын көптеген әзірлеуші ​​(және/немесе жай ғана жеке) циклдар болса, маңызды критерий.

Трафикті бөлу

Контроллер жиі қолданылатын трафикті тарату механизмдерін қолдайды ма? Бұл өнімді тестілеу, өнім қателерін желіден тыс күйде (немесе ең аз жоғалтумен), трафикті талдау және т.б. үшін дәл және дәл трафикті басқаруды қажет ететін қолданбалар үшін өте ауыр тақырып.

Ақылы жазылым

Жетілдірілген функционалдығы және/немесе техникалық қолдауы бар контроллер үшін ақылы опция бар ма?

Графикалық пайдаланушы интерфейсі (веб UI)

Контроллер конфигурациясын басқаруға арналған GUI бар ма? Негізінен «қолданбалылық» үшін және/немесе Ingress'a конфигурациясына кейбір өзгертулер енгізуді қажет ететіндер үшін, бірақ «шикі» үлгілермен жұмыс істеу ыңғайсыз. Әзірлеушілер трафикпен кейбір эксперименттер жасағысы келсе, бұл пайдалы болуы мүмкін.

JWT валидациясы

Пайдаланушыны соңғы қолданбаға авторизациялау және валидациялау үшін JSON веб-токендерінің кірістірілген тексеруінің болуы.

Конфигурацияны теңшеу мүмкіндіктері

Үлгіні кеңейту мүмкіндігі стандартты конфигурация үлгілеріне жеке директиваларыңызды, жалаушаларыңызды және т.б. қосуға мүмкіндік беретін механизмдерге ие болу мағынасында.

DDOS қорғаудың негізгі механизмдері

Қарапайым жылдамдықты шектеу алгоритмдері немесе мекенжайларға, ақ тізімдерге, елдерге және т.б. негізделген трафикті сүзудің күрделірек опциялары.

Сұрау ізі

Кірулерден белгілі бір қызметтерге/подтарға және ең дұрысы қызметтер/подтар арасындағы сұрауларды бақылау, қадағалау және жөндеу мүмкіндігі.

WAF

қолдау қолданбаның брандмауэрі.

Контроллерлер

негізінде бақылаушылар тізімі қалыптастырылды ресми Kubernetes құжаттамасы и бұл кесте. Біз олардың кейбіреулерін спецификасына немесе төмен таралуына (дамудың ерте кезеңі) байланысты шолудан шығардық. Қалғандары төменде талқыланады. Шешімдердің жалпы сипаттамасынан бастайық және жиынтық кестемен жалғастырайық.

Кубернетестен кіру

Веб-сайт: github.com/kubernetes/ingress-nginx
Лицензия: Apache 2.0

Бұл Kubernetes үшін ресми контроллер және оны қауымдастық әзірлеуде. Атауынан анық, ол nginx негізінде жасалған және қосымша мүмкіндіктерді іске асыру үшін пайдаланылатын Lua плагиндерінің басқа жиынтығымен толықтырылған. Nginx-тің танымалдылығына және контроллер ретінде пайдаланылған кезде оған ең аз өзгертулерге байланысты бұл опция қарапайым инженер үшін (веб тәжірибесі бар) конфигурациялаудың ең оңай және оңай болуы мүмкін.

NGINX Inc.

Веб-сайт: github.com/nginxinc/kubernetes-ingress
Лицензия: Apache 2.0

Nginx әзірлеушілерінің ресми өнімі. негізделген ақылы нұсқасы бар NGINX Plus. Негізгі идея - тұрақтылықтың жоғары деңгейі, тұрақты кері үйлесімділік, ешқандай бөгде модульдердің болмауы және Луаның қабылданбауына байланысты қол жеткізілген жоғары жылдамдық (ресми контроллермен салыстырғанда).

Тегін нұсқа айтарлықтай азаяды, оның ішінде ресми контроллермен салыстырғанда да (бірдей Lua модульдерінің болмауына байланысты). Сонымен қатар, ақылы қосымшаның жеткілікті кең мүмкіндіктері бар: нақты уақыттағы көрсеткіштер, JWT валидациясы, белсенді денсаулық тексерулері және т.б. NGINX Ingress-тен маңызды артықшылығы - TCP / UDP трафигіне толық қолдау көрсету (және қауымдастық нұсқасында да!). Минус - болмауы трафикті тарату мүмкіндігі, дегенмен, «әзірлеушілер үшін ең жоғары басымдыққа ие», бірақ іске асыру үшін уақыт қажет.

Конг кірісі

Веб-сайт: github.com/Kong/kubernetes-ingress-controller
Лицензия: Apache 2.0

Kong Inc әзірлеген өнім. екі нұсқада: коммерциялық және тегін. Lua модульдерінің көп санымен кеңейтілген nginx негізінде.

Бастапқыда ол API сұрауларын өңдеуге және бағыттауға бағытталған, яғни. API шлюзі ретінде, бірақ қазіргі уақытта ол толыққанды Ingress контроллеріне айналды. Негізгі артықшылықтары: орнату және конфигурациялау оңай және олардың көмегімен қосымша мүмкіндіктердің кең ауқымы жүзеге асырылатын көптеген қосымша модульдер (соның ішінде үшінші тарап әзірлеушілерінің модульдері). Дегенмен, кірістірілген функциялар қазірдің өзінде көптеген мүмкіндіктерді ұсынады. Тапсырма конфигурациясы CRD ресурстары арқылы орындалады.

Өнімнің маңызды ерекшелігі - бір контурда жұмыс істеу (айқас аттар кеңістігінің орнына) даулы тақырып: кейбіреулер үшін бұл кемшілік болып көрінеді (әр контур үшін нысандарды шығару керек), ал біреу үшін бұл мүмкіндік ( боОқшауланудың жоғары деңгейі, сияқты егер бір контроллер бұзылса, мәселе тек схемамен шектеледі).

Траефик

Веб-сайт: github.com/containous/traefik
Лицензия: MIT

Микросервистерге және олардың динамикалық ортасына арналған сұрау маршруттауымен жұмыс істеу үшін бастапқыда жасалған прокси. Осылайша, көптеген пайдалы мүмкіндіктер: мүлде қайта жүктеусіз конфигурацияны жаңарту, теңдестіру әдістерінің үлкен санын қолдау, веб-интерфейс, көрсеткіштерді қайта жіберу, әртүрлі протоколдарға қолдау көрсету, REST API, канариялық шығарылымдар және т.б. Тағы бір жақсы мүмкіндік - бұл қораптан шыққан Let's Encrypt сертификаттарын қолдау. Кемшілігі - жоғары қолжетімділікті (ХА) ұйымдастыру үшін контроллерге өзінің КВ қоймасын орнату және қосу қажет болады.

HAProxy

Веб-сайт: github.com/jcmoraisjr/haproxy-ingress
Лицензия: Apache 2.0

HAProxy прокси және трафикті теңестіруші ретінде бұрыннан белгілі. Kubernetes кластерінің бөлігі ретінде ол «жұмсақ» конфигурация жаңартуын (трафикті жоғалтпай), DNS негізінде қызметті табуды, API көмегімен динамикалық конфигурацияны ұсынады. CM ауыстыру арқылы конфигурация үлгісін толығымен теңшеу тартымды болуы мүмкін, сонымен қатар ондағы Sprig кітапханасының функцияларын пайдалану мүмкіндігі. Тұтастай алғанда, шешімнің негізгі екпіні жоғары жылдамдыққа, оны оңтайландыруға және тұтынылатын ресурстардағы тиімділікке бағытталған. Контроллердің артықшылығы - әртүрлі теңдестіру әдістерінің рекордтық санын қолдау.

Voyager

Веб-сайт: github.com/appscode/voyager
Лицензия: Apache 2.0

Көптеген провайдерлердегі мүмкіндіктердің кең ауқымын қолдайтын әмбебап шешім ретінде орналасқан HAproxy контроллеріне негізделген. L7 және L4 бойынша трафикті теңестіру мүмкіндігі ұсынылады, ал TCP L4 трафигін тұтастай теңдестіру шешімнің негізгі мүмкіндіктерінің бірі деп атауға болады.

Контур

Веб-сайт: github.com/heptio/contour
Лицензия: Apache 2.0

Бұл шешім Envoy негізінде ғана емес: оны әзірлеген бірге осы танымал прокси авторларымен. Маңызды мүмкіндік - IngressRoute CRD ресурстарын пайдаланып Ingress ресурстарын басқаруды бөлу мүмкіндігі. Бір кластерді пайдаланатын көптеген әзірлеу топтары бар ұйымдар үшін бұл көрші циклдардағы трафикпен жұмыс істеу қауіпсіздігін барынша арттыруға және оларды кіріс ресурстарын өзгерту кезінде қателерден қорғауға көмектеседі.

Ол сондай-ақ теңдестіру әдістерінің кеңейтілген жинағын ұсынады (сұраныстарды көшіру, автоқайталау, сұраулар жылдамдығын шектеу және т.б.), трафик ағыны мен сәтсіздіктерді егжей-тегжейлі бақылау. Мүмкін біреу үшін бұл жабысқақ сеанстарды қолдаудың жоқтығы айтарлықтай кемшілік болады (жұмыс дегенмен қазірдің өзінде жүріп жатыр).

Istio Ingress

Веб-сайт: istio.io/docs/tasks/traffic-management/ingress
Лицензия: Apache 2.0

Сырттан келетін кіріс трафигін басқаратын Ingress контроллері ғана емес, сонымен қатар кластер ішіндегі барлық трафикті басқаратын кешенді сервистік тор шешімі. Сорғыштың астында Envoy әр қызмет үшін қосалқы прокси ретінде пайдаланылады. Негізінде, бұл «бәрін жасай алатын» үлкен комбайн, оның негізгі идеясы - максималды басқару, кеңейту, қауіпсіздік және ашықтық. Оның көмегімен сіз трафик маршрутын дәл баптай аласыз, қызметтер арасындағы авторизацияға қол жеткізе аласыз, теңгерімдеуге, бақылауға, канарлар шығарылымдарына және т.б. болады. Истио туралы толығырақ мақалалар сериясынан оқыңыз »Istio көмегімен микросервистерге оралу«.

елші

Веб-сайт: github.com/datawire/ambassador
Лицензия: Apache 2.0

Елшіге негізделген басқа шешім. Оның тегін және коммерциялық нұсқалары бар. Ол сәйкес артықшылықтарды (K8s кластерінің әдістерімен және нысандарымен тығыз интеграция) әкелетін «Кубернетеске толықтай туған» ретінде орналастырылған.

салыстырмалы кесте

Сонымен, мақаланың шарықтау шегі мына үлкен кесте болып табылады:

Kubernetes үшін Ingress контроллерлеріне шолу және салыстыру

Оны жақынырақ көру үшін басуға болады және пішімде де қол жетімді Google парақтары.

Жинақтау

Бұл мақаланың мақсаты - нақты жағдайда қандай таңдау жасау керектігін толық түсінуді қамтамасыз ету (бірақ толық емес!). Әдеттегідей, әр контроллердің өз артықшылықтары мен кемшіліктері бар ...

Kubernetes классикалық Ingress оның қол жетімділігі мен дәлелденуі, жеткілікті мүмкіндіктері үшін жақсы - жалпы жағдайда ол «көзге жеткілікті» болуы керек. Дегенмен, тұрақтылыққа, мүмкіндіктер мен даму деңгейіне жоғары талаптар болса, NGINX Plus және ақылы жазылыммен кіруге назар аудару керек. Конгта плагиндердің ең бай жиынтығы (және сәйкесінше олар беретін мүмкіндіктер) бар, ал ақылы нұсқада олардың саны одан да көп. Оның API шлюзі, CRD ресурстарына негізделген динамикалық конфигурация, сондай-ақ негізгі Kubernetes қызметтері ретінде жұмыс істеуге кең мүмкіндіктер бар.

Теңдестіру және авторизация әдістеріне қойылатын талаптардың жоғарылауымен Traefik және HAProxy бағдарламаларын қараңыз. Бұл көптеген жылдар бойы дәлелденген, өте тұрақты және белсенді дамып келе жатқан ашық бастапқы жобалар. Контурдың шыққанына бірнеше жыл болды, бірақ ол әлі тым жас көрінеді және Envoy қолданбасының үстіне тек негізгі мүмкіндіктер қосылған. Қолданбаның алдында WAF болуы/енгізу талаптары болса, Kubernetes немесе HAProxy-дан бірдей кіріске назар аудару керек.

Ал мүмкіндіктері жағынан ең байы - Envoy үстіне салынған өнімдер, әсіресе Istio. Бұл «бәрін істей алатын» кешенді шешім болып көрінеді, бірақ бұл басқа шешімдерге қарағанда конфигурациялау/іске қосу/басқару үшін айтарлықтай жоғары кіру шегін білдіреді.

Біз Kubernetes-тен Ingress-ті стандартты контроллер ретінде таңдадық және әлі де пайдаланамыз, ол қажеттіліктердің 80-90% қамтиды. Бұл жеткілікті сенімді, конфигурациялау және кеңейту оңай. Тұтастай алғанда, нақты талаптар болмаған жағдайда, ол көптеген кластерлерге/қосымшаларға сәйкес болуы керек. Бірдей әмбебап және салыстырмалы түрде қарапайым өнімдердің ішінен Traefik және HAProxy ұсынылуы мүмкін.

PS

Біздің блогта да оқыңыз:

Ақпарат көзі: www.habr.com

пікір қалдыру