Kubernetes үчүн Ingress контроллерлорун карап чыгуу жана салыштыруу

Kubernetes үчүн Ingress контроллерлорун карап чыгуу жана салыштыруу

Белгилүү бир тиркеме үчүн Kubernetes кластерин ишке киргизүүдө, сиз тиркеме, бизнес жана иштеп чыгуучулар ал ресурска кандай талаптарды коюшарын түшүнүшүңүз керек. Эгер сизде бул маалымат бар болсо, сиз архитектуралык чечим кабыл ала баштай аласыз жана, атап айтканда, бүгүнкү күндө көп сандагы белгилүү бир Ingress контроллерин тандоого болот. Көптөгөн макалаларды/документтерди ж.б. изилдеп отурбастан, жеткиликтүү варианттар жөнүндө негизги түшүнүк алуу үчүн, биз бул серепти, анын ичинде негизги (өндүрүшкө даяр) Ingress контроллерлорун даярдадык.

Бул кесиптештерге архитектуралык чечимди тандоодо жардам берет деп үмүттөнөбүз - жок эле дегенде, ал кеңири маалыматты жана практикалык эксперименттерди алуу үчүн баштапкы чекит болуп калат. Биз буга чейин Интернетте башка ушул сыяктуу материалдарды изилдеп көрдүк жана, таң калыштуусу, аздыр-көптүр толук, эң негизгиси, структураланган карап чыгууну таба алган жокпуз. Андыктан бул боштукту толтуралы!

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

Принципиалдуу түрдө салыштыруу жана кандайдыр бир пайдалуу натыйжаны алуу үчүн, сиз жөн гана предметтик аймакты түшүнбөстөн, изилдөөнүн векторун белгилей турган критерийлердин конкреттүү тизмесине ээ болушуңуз керек. Ingress/Kubernetes-ти колдонуунун бардык мүмкүн болгон учурларын талдап жаткандай түр көрсөтпөстөн, биз контроллерлор үчүн эң жалпы талаптарды бөлүп көрсөтүүгө аракет кылдык - бардык өзгөчөлүктөрдү жана майда-чүйдөлөрдү кандай болгон күндө да өзүнчө изилдеп чыгууга даяр болуңуз.

Бирок мен ушунчалык тааныш болуп калган мүнөздөмөлөрдөн баштайм, алар бардык чечимдерде ишке ашырылат жана каралбайт:

  • динамикалык кызмат табуу;
  • SSL токтотуу;
  • websockets менен иштөө.

Эми салыштыруу пункттары жөнүндө:

Колдоого алынган протоколдор

тандоо үчүн негизги критерийлердин бири. Программаңыз стандарттык HTTP менен иштебеши мүмкүн же бир эле учурда бир нече протоколдор менен иштөөнү талап кылышы мүмкүн. Эгер сиздин ишиңиз стандарттуу эмес болсо, кластерди кийинчерээк конфигурациялоонун кереги жок болушу үчүн бул факторду эске алыңыз. Колдоого алынган протоколдордун тизмеси бардык контроллерлор үчүн өзгөрөт.

Негизги программалык камсыздоо

Контроллер негизделген бир нече колдонмо параметрлери бар. Популярдуулары nginx, traefik, haproxy, envoy. Жалпысынан алганда, бул трафиктин кандайча кабыл алынышына жана берилишине анчалык деле таасирин тийгизбеши мүмкүн, бирок капчыктын астындагы нерселердин потенциалдуу нюанстарын жана өзгөчөлүгүн билүү дайыма жакшы.

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

Кандай негизде трафикти белгилүү бир кызматка багыттоо жөнүндө чечим кабыл ала аласыз? Адатта, бул хост жана жол, бирок кошумча мүмкүнчүлүктөр бар.

Кластердин ичиндеги аттар мейкиндиги

Ат мейкиндиги - бул Kubernetesтеги ресурстарды логикалык жактан бөлүү мүмкүнчүлүгү (мисалы, сахнага, өндүрүшкө ж.б.). Ар бир ат мейкиндигинде өзүнчө орнотулушу керек болгон Ingress контроллерлору бар (андан кийин ал трафикти багыттай алат гана бул мейкиндиктин кабыктарына). Бүткүл кластер үчүн глобалдык деңгээлде иштегендер (жана алардын так көпчүлүгү) бар - аларда трафик аттар мейкиндигине карабастан кластердин каалаган подъездине жөнөтүлөт.

Жогорку агым үчүн үлгүлөр

Колдонмонун жана кызматтардын дени сак инстанцияларына трафик кантип камсыз кылынат? Активдүү жана пассивдүү текшерүүлөр, кайра аракет кылуулар, автоматтык өчүргүчтөр бар (көбүрөөк маалымат алуу үчүн, караңыз, мисалы, Istio жөнүндө макала), ден соолук текшерүүлөрүнүн өз алдынча ишке ашырылышы (салыштырмалуу медициналык текшерүүлөр) ж.б. Өтө маанилүү параметр, эгерде сизде жеткиликтүүлүгүнө жогорку талаптар коюлса жана иштебей калган кызматтарды баланстан өз убагында алып салуу.

Теңдештирүүчү алгоритмдер

Көптөгөн варианттар бар: салттуу тегерек робин экзотикалык rdp-cookie, ошондой эле жеке өзгөчөлүктөрү сыяктуу жабышчаак сессиялар.

тастыктоо

Контроллер кандай авторизация схемаларын колдойт? Негизги, дайджест, oauth, тышкы аут - менимче, бул варианттар тааныш болушу керек. Ingress аркылуу кирүүчү көптөгөн иштеп чыгуучулардын (жана/же жеке) циклдери бар болсо, бул маанилүү критерий.

Трафик бөлүштүрүү

Контроллер трафикти бөлүштүрүү үчүн кеңири колдонулган механизмдерди колдойбу? Бул жемиштүү тестирлөө үчүн трафикти кылдат жана так башкарууну, өнүм каталарын күрөшсүз (же минималдуу жоготуулар менен) оңдоону, трафикти талдоо ж.

Акы төлөнүүчү жазылуу

Жакшыртылган функционалдуулугу жана/же техникалык колдоосу менен контроллер үчүн акы төлөнүүчү вариант барбы?

Графикалык интерфейс (Web UI)

Контроллердин конфигурациясын башкаруу үчүн GUI барбы? Негизинен ыңгайлуулук үчүн жана/же Ingress конфигурациясына кандайдыр бир өзгөртүүлөрдү киргизүү керек болгондор үчүн, бирок “чийки” калыптар менен иштөө ыңгайсыз. Бул иштеп чыгуучулар учуп трафик менен кандайдыр бир эксперименттерди жүргүзүү үчүн келсе, пайдалуу болушу мүмкүн.

JWT текшерүү

Авторизациялоо жана акыркы тиркеме үчүн колдонуучунун валидациясы үчүн JSON веб-токендерин камтылган текшерүүнүн болушу.

Конфигурацияны ыңгайлаштыруу мүмкүнчүлүктөрү

Стандарттык конфигурация шаблондоруна өзүңүздүн директиваларыңызды, желектериңизди ж.б. кошууга мүмкүндүк берүүчү механизмдердин болушу маанисинде калыптардын кеңейиши.

Негизги DDOS коргоо механизмдери

Жөнөкөй ылдамдыкты чектөө алгоритмдери же даректерге, ак тизмелерге, өлкөлөргө ж.б. негизинде трафикти чыпкалоо үчүн татаал варианттар.

Издөө сурам

Ingress'тен конкреттүү кызматтарга/поддорго, ошондой эле кызматтар/поддор арасында да суроо-талаптарды көзөмөлдөө, көзөмөлдөө жана мүчүлүштүктөрдү оңдоо мүмкүнчүлүгү.

ЧЗА

Колдоо колдонмонун брандмауэри.

Ingress Controllers

Анын негизинде контролерлордун тизмеси түзүлдү расмий 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

Конг Inc тарабынан иштелип чыккан продукт. эки версияда: коммерциялык жана акысыз. Nginxтин негизинде, анын мүмкүнчүлүктөрү көп сандагы Lua модулдары менен кеңейтилген.

Башында ал API суроо-талаптарын иштетүүгө жана багыттоого багытталган, б.а. API Gateway катары, бирок азыр толук кандуу Ingress контроллери болуп калды. Негизги артыкчылыктары: орнотуу жана конфигурациялоо оңой жана алардын жардамы менен кошумча мүмкүнчүлүктөрдүн кеңири спектри ишке ашырылган көптөгөн кошумча модулдар (анын ичинде үчүнчү тараптын иштеп чыгуучулары). Бирок, орнотулган функциялар буга чейин көптөгөн мүмкүнчүлүктөрдү сунуш кылат. Жумуш конфигурациясы CRD ресурстарын колдонуу менен жүргүзүлөт.

Продукттун маанилүү өзгөчөлүгү - бир схеманын ичинде иштөө (кайчылаш аттар мейкиндигинин ордуна) талаштуу тема: кээ бирөөлөр үчүн бул кемчиликтей сезилет (ар бир схема үчүн объекттерди түзүш керек), бирок башкалар үчүн бул өзгөчөлүк болот. (божылуулоонун жогорку деңгээли, анткени бир контроллер бузулган болсо, анда маселе бир гана схема менен чектелет).

Traefik

каршы сайтынын дареги: github.com/containous/traefik
Лицензия: MIT

Башында микросервистерге жана алардын динамикалык чөйрөсүнө суроо-талап багыттоосу менен иштөө үчүн түзүлгөн прокси. Демек, көптөгөн пайдалуу функциялар: конфигурацияны такыр кайра жүктөөсүз жаңыртуу, көп сандагы тең салмактуулук ыкмаларын колдоо, веб-интерфейс, багыттоо көрсөткүчтөрү, ар кандай протоколдорду колдоо, REST API, канариялык релиздерди жана башкалар. Жакшы өзгөчөлүк - бул кутудан чыккан Let's Encrypt сертификаттарын колдоо. Кемчилиги - жогорку жеткиликтүүлүктү (HA) уюштуруу үчүн контроллер өзүнүн KV сактагычын орнотуу жана туташтыруу керек болот.

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

Бул чечим Элчиге гана негизделген эмес: ал иштелип чыккан биргелешип бул популярдуу прокси авторлору менен. Маанилүү өзгөчөлүк - IngressRoute CRD ресурстарын колдонуу менен Ingress ресурстарын башкарууну бөлүү мүмкүнчүлүгү. Бир кластерди колдонгон бир нече иштеп чыгуу топтору бар уюмдар үчүн бул коңшу циклдердеги трафикти башкаруунун коопсуздугун максималдуу жогорулатууга жардам берет жана аларды Ingress ресурстарын өзгөртүүдө каталардан коргойт.

Ал ошондой эле балансташтыруу ыкмаларынын кеңейтилген топтомун сунуштайт (суроолорду чагылдыруу, авто-кайталоо, суроо-талаптын ылдамдыгын чектөө жана башка көп нерселер), трафиктин агымын жана мүчүлүштүктөрдү деталдуу көзөмөлдөө. Балким, кээ бирөөлөр үчүн жабышчаак сессияларды колдоонун жоктугу олуттуу кемчилик болот (иш азыртадан эле жүрүп жатат).

Istio Ingress

каршы сайтынын дареги: istio.io/docs/tasks/traffic-management/ingress
Лицензия: Apache 2.0

Сырттан келген трафикти башкарган Ingress контроллери гана эмес, ошондой эле кластердин ичиндеги бардык трафикти көзөмөлдөгөн комплекстүү сервистик тор чечими. "Капутун астында" Элчи ар бир кызмат үчүн каптал прокси катары колдонулат. Чындыгында, бул "баарын кыла ала турган" чоң комбайн жана анын негизги идеясы - максималдуу башкаруу, кеңейтүү, коопсуздук жана айкындуулук. Анын жардамы менен сиз трафиктин маршрутун тактай аласыз, кызматтардын ортосунда авторизацияга кирүү, балансташтыруу, мониторинг, канарларды чыгаруу жана башкалар. Истио жөнүндө кененирээк макалалар сериясынан окуңуз "Istio менен Микросервистерге кайтуу«.

элчи

каршы сайтынын дареги: github.com/datawire/ambassador
Лицензия: Apache 2.0

Элчиге негизделген дагы бир чечим. Анын акысыз жана коммерциялык версиялары бар. Тиешелүү артыкчылыктарды (K8s кластердик методдору жана субъекттери менен тыгыз интеграция) алып келе турган "Кубернетеске толугу менен жергиликтүү" катары жайгаштырылган.

салыштыруу жадыбал

Ошентип, макаланын кульминациясы бул чоң үстөл болуп саналат:

Kubernetes үчүн Ingress контроллерлорун карап чыгуу жана салыштыруу

Бул кененирээк көрүү үчүн чыкылдатса болот жана форматта да бар Google Барактар.

Кыскасы

Макаланын максаты - сиздин конкреттүү жагдайыңызда кандай тандоо жасоо керектиги жөнүндө толукраак түшүнүк берүү (бирок, толук эмес!). Адаттагыдай эле, ар бир контроллердин өзүнүн артыкчылыктары жана кемчиликтери бар ...

Kubernetesтин классикалык кириши анын жеткиликтүүлүгү жана ишенимдүүлүгү, кыйла бай мүмкүнчүлүктөрү үчүн жакшы - жалпы учурда, ал "көзгө жетиштүү" болушу керек. Бирок, эгер сизде туруктуулук, функциялардын деңгээли жана өнүгүү талаптары жогорулаган болсо, анда NGINX Plus менен Ingress жана акы төлөнүүчү жазылууга көңүл бурушуңуз керек. Конг плагиндердин бай топтомуна ээ (жана, ошого жараша, алар берген мүмкүнчүлүктөр) жана алардын акы төлөнүүчү версиясында дагы көптөрү бар. Анын API шлюзу, CRD ресурстарына негизделген динамикалык конфигурация, ошондой эле негизги Kubernetes кызматтары катары иштөө үчүн кеңири мүмкүнчүлүктөр бар.

Эгер сизде тең салмактуулук жана авторизациялоо ыкмаларына талаптар жогорулаган болсо, Traefik жана HAProxy менен жакындан таанышыңыз. Бул көп жылдар бою далилденген, абдан туруктуу жана жигердүү өнүгүп жаткан Open Source долбоорлору. Контур бир нече жылдан бери иштеп келе жатат, бирок ал дагы эле жаш көрүнөт жана Элчинин үстүнө негизги функциялар гана кошулган. Эгерде тиркеменин алдында WAFтин болушу/киргизилиши боюнча талаптар бар болсо, сиз Kubernetes же HAProxyден ошол эле киришке көңүл бурушуңуз керек.

Ал эми өзгөчөлүктөргө эң бай - бул Envoy, айрыкча Istio боюнча курулган өнүмдөр. Бул "баарын кыла ала турган" комплекстүү чечим окшойт, бирок бул башка чечимдерге караганда конфигурация/ишке киргизүү/башкаруу үчүн кирүү үчүн кыйла жогору тоскоолдукту билдирет.

Биз Ingress'ти Kubernetes'тен стандарттык контроллер катары тандап алганбыз жана азыр да колдонобуз, ал биздин муктаждыктарыбыздын 80-90% камтыйт. Бул абдан ишенимдүү, конфигурациялоо оңой жана кеңейтилүүчү. Жалпысынан алганда, конкреттүү талаптар болбосо, ал көпчүлүк кластерлерге/колдонмолорго ылайыктуу болушу керек. Ошол эле универсалдуу жана салыштырмалуу жөнөкөй өнүмдөрдүн ичинен Traefik жана HAProxy сунуштай алабыз.

PS

Биздин блогдон дагы окуңуз:

Source: www.habr.com

DDoS коргоосу, VPS VDS серверлери бар сайттар үчүн ишенимдүү хостинг сатып алыңыз 🔥 DDoS коргоосу, VPS VDS серверлери бар ишенимдүү веб-сайт хостингин сатып алыңыз | ProHoster