Kubernetes uchun Ingress kontrollerlarini ko'rib chiqish va taqqoslash

Kubernetes uchun Ingress kontrollerlarini ko'rib chiqish va taqqoslash

Muayyan dastur uchun Kubernetes klasterini ishga tushirganda, dasturning o'zi, biznes va ishlab chiquvchilar ushbu resursga nimani taqdim etishini tushunishingiz kerak. Ushbu ma'lumotlar bilan siz arxitektura qarorini qabul qilishni va xususan, bugungi kunda juda ko'p bo'lgan ma'lum bir Ingress boshqaruvchisini tanlashni boshlashingiz mumkin. Ko'p maqolalar / hujjatlar va hokazolarni ko'rib chiqmasdan mavjud variantlar haqida asosiy g'oyaga ega bo'lish uchun biz ushbu sharhni, shu jumladan asosiy (ishlab chiqarishga tayyor) kirish kontrollerlarini tayyorladik.

Umid qilamizki, bu hamkasblarga arxitektura yechimini tanlashda yordam beradi - hech bo'lmaganda batafsilroq ma'lumot olish va amaliy tajribalar uchun boshlang'ich nuqtaga aylanadi. Ilgari biz tarmoqdagi shunga o'xshash boshqa materiallarni o'rganib chiqdik va g'alati, bitta ko'proq yoki kamroq to'liq va eng muhimi - tuzilgan - sharhni topa olmadik. Shunday qilib, keling, bu bo'shliqni to'ldiraylik!

mezonlari

Asos sifatida, taqqoslash va har qanday foydali natijaga erishish uchun siz nafaqat mavzuni tushunishingiz kerak, balki tadqiqot vektorini belgilaydigan mezonlar ro'yxatiga ham ega bo'lishingiz kerak. Ingress / Kubernetes-dan foydalanishning barcha mumkin bo'lgan holatlarini tahlil qilishga da'vo qilmasdan, biz kontrollerlarga qo'yiladigan eng umumiy talablarni ta'kidlashga harakat qildik - har qanday holatda ham siz o'zingizning barcha xususiyatlaringiz va ma'lumotlaringizni alohida o'rganishingiz kerakligiga tayyor bo'ling.

Ammo men shu qadar tanish bo'lgan xususiyatlardan boshlaymanki, ular barcha echimlarda qo'llaniladi va hisobga olinmaydi:

  • xizmatlarning dinamik kashfiyoti (xizmat kashfiyoti);
  • SSLni tugatish;
  • websockets bilan ishlash.

Endi taqqoslash nuqtalari uchun:

Qo'llab-quvvatlanadigan protokollar

Asosiy tanlov mezonlaridan biri. Sizning dasturiy ta'minotingiz standart HTTP da ishlamasligi mumkin yoki bir vaqtning o'zida bir nechta protokollarda ishlashni talab qilishi mumkin. Agar sizning holatingiz nostandart bo'lsa, keyinroq klasterni qayta sozlashingiz shart bo'lmasligi uchun ushbu omilni hisobga olishni unutmang. Barcha kontrollerlar uchun qo'llab-quvvatlanadigan protokollar ro'yxati farq qiladi.

asosiy dasturiy ta'minot

Tekshirish moslamasi asoslangan ilovalarning bir nechta varianti mavjud. Ommaboplari nginx, traefik, haproxy, envoy. Umumiy holatda, u trafikni qanday qabul qilish va uzatishga katta ta'sir ko'rsatmasligi mumkin, ammo "kaput ostida" bo'lgan narsalarning potentsial nuanslari va xususiyatlarini bilish har doim foydalidir.

Trafik marshruti

Nimaga asoslanib, ma'lum bir xizmatga transport yo'nalishi to'g'risida qaror qabul qilish mumkin? Odatda bular xost va yo'ldir, ammo qo'shimcha imkoniyatlar mavjud.

Klaster ichidagi nomlar maydoni

Nomlar maydoni (nomlar maydoni) - Kubernetes-da resurslarni mantiqiy ravishda ajratish qobiliyati (masalan, sahnada, ishlab chiqarishda va hokazo). Har bir nom maydonida alohida o'rnatilishi kerak bo'lgan kirish kontrollerlari mavjud (va keyin u trafikni yo'naltirishi mumkin faqatgina bu bo'shliqning po'stlog'iga). Va shunday (va ularning aniq ko'pchiligi) butun klaster uchun global miqyosda ishlaydi - ularda trafik nomlar maydonidan qat'i nazar, klasterning istalgan podasiga yo'naltiriladi.

Yuqori oqim uchun namunalar

Qanday qilib trafik ilovaning, xizmatlarning sog'lom nusxalariga yo'naltiriladi? Faol va passiv tekshiruvlar, qayta urinishlar, elektron to'xtatuvchilari bilan variantlar mavjud (Batafsil ma'lumot uchun qarang, masalan, Istio haqida maqola), shaxsiy salomatlik tekshiruvlari va boshqalar. Muvaffaqiyatsiz xizmatlarning mavjudligi va balansdan o'z vaqtida olib tashlanishi uchun yuqori talablarga ega bo'lsangiz, juda muhim parametr.

Balanslash algoritmlari

Ko'p variantlar mavjud: an'anaviydan dumaloq robin ekzotikaga rdp-cookie, shuningdek, kabi individual xususiyatlar yopishqoq seanslar.

Autentifikatsiya

Tekshiruvchi qanday avtorizatsiya sxemalarini qo'llab-quvvatlaydi? Asosiy, dayjest, oauth, tashqi auth - menimcha, bu variantlar tanish bo'lishi kerak. Ingress orqali kirish mumkin bo'lgan ko'plab ishlab chiquvchi (va/yoki faqat shaxsiy) tsikllar mavjud bo'lsa, bu muhim mezondir.

Trafik taqsimoti

Nazoratchi kanareykalar (kanareykalar), A / B testi, trafikni aks ettirish (ko'zgu / soya) kabi tez-tez ishlatiladigan trafikni taqsimlash mexanizmlarini qo'llab-quvvatlaydimi? Bu samarali sinovlar, mahsulotdagi xatolarni oflayn rejimda (yoki minimal yo'qotish bilan) tuzatish, trafik tahlili va hokazolar uchun aniq va aniq trafikni boshqarishni talab qiladigan ilovalar uchun juda og'ir mavzu.

Pulli obuna

Kengaytirilgan funksionallik va/yoki texnik yordamga ega boshqaruvchi uchun pullik variant bormi?

Grafik foydalanuvchi interfeysi (Web UI)

Kontroller konfiguratsiyasini boshqarish uchun GUI bormi? Asosan "qo'llik" uchun va / yoki Ingress'a konfiguratsiyasiga ba'zi o'zgarishlar kiritish kerak bo'lganlar uchun, ammo "xom" shablonlar bilan ishlash noqulay. Agar ishlab chiquvchilar tez orada trafik bilan ba'zi tajribalar o'tkazmoqchi bo'lsa, bu foydali bo'lishi mumkin.

JWT tekshiruvi

Avtorizatsiya qilish va foydalanuvchini oxirgi dasturgacha tekshirish uchun JSON veb-tokenlarining o'rnatilgan tekshiruvi mavjudligi.

Konfiguratsiyani sozlash imkoniyatlari

Shablonning kengaytirilishi standart konfiguratsiya shablonlariga o'z ko'rsatmalaringizni, bayroqlaringizni va boshqalarni qo'shish imkonini beruvchi mexanizmlarga ega bo'lish ma'nosida.

Asosiy DDOS himoya mexanizmlari

Manzillar, oq ro'yxatlar, mamlakatlar va boshqalarga asoslangan oddiy tarif cheklovi algoritmlari yoki murakkabroq trafik filtrlash imkoniyatlari.

Izlanishni so'rash

Muayyan xizmatlarga/podkalarga va ideal holda xizmatlar/podkalarga kirish so'rovlarini kuzatish, kuzatish va disk raskadrovka qilish imkoniyati.

WAF

qo'llab-quvvatlash dastur xavfsizlik devori.

Kontrollerlar

Nazoratchilar ro'yxati asosida shakllantirildi rasmiy Kubernetes hujjatlari и bu jadval. Biz ulardan ba'zilarini o'ziga xoslik yoki kam tarqalganlik (rivojlanishning dastlabki bosqichi) tufayli ko'rib chiqishdan chiqarib tashladik. Qolganlari quyida muhokama qilinadi. Keling, yechimlarning umumiy tavsifidan boshlaylik va xulosa jadvali bilan davom etamiz.

Kubernetesdan kirish

Veb-sayt: github.com/kubernetes/ingress-nginx
Litsenziya: Apache 2.0

Bu Kubernetes uchun rasmiy boshqaruvchi va jamiyat tomonidan ishlab chiqilmoqda. Nomidan ko'rinib turibdiki, u nginx-ga asoslangan va qo'shimcha funktsiyalarni amalga oshirish uchun ishlatiladigan boshqa Lua plaginlari to'plami bilan to'ldirilgan. Nginx-ning o'zi mashhurligi va boshqaruvchi sifatida foydalanilganda unga minimal o'zgartirishlar kiritilganligi sababli, bu parametr oddiy muhandis uchun (veb tajribasi bilan) eng oson va eng oson sozlash bo'lishi mumkin.

NGINX Inc tomonidan kirish.

Veb-sayt: github.com/nginxinc/kubernetes-ingress
Litsenziya: Apache 2.0

Nginx ishlab chiquvchilarining rasmiy mahsuloti. ga asoslangan pullik versiyasi mavjud NGINX Plus. Asosiy g'oya - yuqori darajadagi barqarorlik, doimiy orqaga qarab muvofiqlik, hech qanday begona modullarning yo'qligi va e'lon qilingan yuqori tezlik (rasmiy boshqaruvchiga nisbatan), Lua rad etilishi tufayli erishilgan.

Bepul versiya sezilarli darajada kamayadi, hatto rasmiy kontroller bilan solishtirganda ham (bir xil Lua modullari yo'qligi sababli). Shu bilan birga, pullik juda keng qo'shimcha funktsiyalarga ega: real vaqtda ko'rsatkichlar, JWT tekshiruvi, faol sog'liqni tekshirish va boshqalar. NGINX Ingressga nisbatan muhim afzallik bu TCP / UDP trafigini to'liq qo'llab-quvvatlashdir (va hamjamiyat versiyasida ham!). Minus - etishmasligi trafikni taqsimlash xususiyati, ammo bu "ishlab chiquvchilar uchun eng yuqori ustuvorlikka ega", ammo amalga oshirish uchun vaqt talab etiladi.

Kongga kirish

Veb-sayt: github.com/Kong/kubernetes-ingress-controller
Litsenziya: Apache 2.0

Kong Inc tomonidan ishlab chiqilgan mahsulot. ikki versiyada: tijorat va bepul. Ko'p sonli Lua modullari bilan kengaytirilgan nginx-ga asoslangan.

Dastlab, u API so'rovlarini qayta ishlash va yo'naltirishga qaratilgan edi, ya'ni. API Gateway sifatida, lekin hozirda u to'liq huquqli Ingress boshqaruvchisiga aylandi. Asosiy afzalliklari: o'rnatish va sozlash oson bo'lgan ko'plab qo'shimcha modullar (jumladan, uchinchi tomon ishlab chiqaruvchilari) va ular yordamida keng ko'lamli qo'shimcha funktsiyalar amalga oshiriladi. Biroq, o'rnatilgan funktsiyalar allaqachon ko'p imkoniyatlarni taqdim etadi. Ish konfiguratsiyasi CRD resurslari yordamida amalga oshiriladi.

Mahsulotning muhim xususiyati - bir xil konturda ishlash (o'zaro nomlar o'rniga) munozarali mavzu: kimdir uchun bu kamchilik kabi ko'rinadi (har bir kontur uchun ob'ektlarni ishlab chiqarish kerak), kimdir uchun esa bu xususiyat ( bоIzolyatsiyaning yuqori darajasi, kabi agar bitta kontroller buzilgan bo'lsa, muammo faqat kontaktlarning zanglashiga olib keladi).

Trafik

Veb-sayt: github.com/containous/traefik
Litsenziya: MIT

Mikroservislar va ularning dinamik muhiti uchun so'rov marshruti bilan ishlash uchun dastlab yaratilgan proksi-server. Shunday qilib, juda ko'p foydali xususiyatlar: umuman qayta yuklamasdan konfiguratsiyani yangilash, ko'plab muvozanatlash usullarini qo'llab-quvvatlash, veb-interfeys, o'lchovlarni yo'naltirish, turli protokollarni qo'llab-quvvatlash, REST API, kanareykalar va boshqalar. Yana bir yoqimli xususiyat - bu "Let's Encrypt" sertifikatlarini qo'llab-quvvatlash. Kamchilik shundaki, yuqori mavjudlikni (HA) tashkil qilish uchun kontroller o'zining KV xotirasini o'rnatishi va ulashi kerak bo'ladi.

HAProksi

Veb-sayt: github.com/jcmoraisjr/haproxy-ingress
Litsenziya: Apache 2.0

HAProxy uzoq vaqtdan beri proksi-server va trafik balansi sifatida tanilgan. Kubernetes klasterining bir qismi sifatida u "yumshoq" konfiguratsiya yangilanishini (trafikni yo'qotmasdan), DNS-ga asoslangan xizmatlarni topishni, API yordamida dinamik konfiguratsiyani taklif qiladi. CM ni almashtirish orqali konfiguratsiya shablonini to'liq sozlash jozibador bo'lishi mumkin, shuningdek, undagi Sprig kutubxonasi funksiyalaridan foydalanish imkoniyati. Umuman olganda, yechimning asosiy e'tibori yuqori tezlik, uni optimallashtirish va iste'mol qilinadigan resurslarda samaradorlikka qaratilgan. Tekshirish moslamasining afzalligi rekord miqdordagi turli xil muvozanatlash usullarini qo'llab-quvvatlashdir.

Voyager

Veb-sayt: github.com/appscode/voyager
Litsenziya: Apache 2.0

Ko'p sonli provayderlarda keng imkoniyatlarni qo'llab-quvvatlaydigan universal yechim sifatida joylashtirilgan HAproxy kontrolleriga asoslangan. L7 va L4 dagi trafikni muvozanatlash imkoniyati taklif etiladi va umuman olganda TCP L4 trafigini muvozanatlash yechimning asosiy xususiyatlaridan biri deb atash mumkin.

Kontur

Veb-sayt: github.com/heptio/contour
Litsenziya: Apache 2.0

Bu yechim faqat Elchiga asoslangan emas: u tomonidan ishlab chiqilgan birgalikda ushbu mashhur proksi-server mualliflari bilan. Muhim xususiyat - IngressRoute CRD resurslaridan foydalangan holda Ingress resurslarini boshqarishni ajratish qobiliyati. Bir xil klasterdan foydalanadigan ko'plab ishlab chiqish guruhlari bo'lgan tashkilotlar uchun bu qo'shni tsikllarda trafik bilan ishlash xavfsizligini maksimal darajada oshirishga yordam beradi va ularni kirish manbalarini o'zgartirishda xatolardan himoya qiladi.

Shuningdek, u kengaytirilgan muvozanatlash usullari to'plamini taklif qiladi (so'rovni aks ettirish, avtomatik takrorlash, so'rov tezligini cheklash va boshqalar), trafik oqimi va nosozliklarni batafsil kuzatish. Ehtimol, kimdir uchun bu yopishqoq seanslarni qo'llab-quvvatlamaslik muhim kamchilik bo'lishi mumkin (garchi ish allaqachon boshlangan).

Istio Ingress

Veb-sayt: istio.io/docs/tasks/traffic-management/ingress
Litsenziya: Apache 2.0

Keng qamrovli xizmat ko'rsatish tarmog'i yechimi, bu nafaqat tashqaridan kiruvchi trafikni boshqaradigan, balki klaster ichidagi barcha trafikni boshqaradigan Ingress boshqaruvchisi. Kaput ostida Envoy har bir xizmat uchun proksi-server sifatida ishlatiladi. Aslini olganda, bu "hamma narsani qila oladigan" katta kombinat bo'lib, uning asosiy g'oyasi maksimal darajada boshqarish, kengayish, xavfsizlik va shaffoflikdir. Uning yordamida siz trafik marshrutini nozik sozlashingiz, xizmatlar o'rtasida avtorizatsiyadan foydalanish, balanslash, monitoring, kanareykalarni chiqarish va boshqa ko'p narsalarni amalga oshirishingiz mumkin. Istio haqida ko'proq maqolalar seriyasida o'qing "Istio bilan mikroservislarga qaytish".

elchi

Veb-sayt: github.com/datawire/ambassador
Litsenziya: Apache 2.0

Elchiga asoslangan yana bir yechim. Uning bepul va tijorat versiyalari mavjud. U "Kubernetes uchun to'liq mahalliy" sifatida joylashgan bo'lib, bu tegishli afzalliklarga ega (K8s klasterining usullari va ob'ektlari bilan qattiq integratsiya).

Taqqoslash jadvali

Shunday qilib, maqolaning kulminatsion nuqtasi - bu ulkan jadval:

Kubernetes uchun Ingress kontrollerlarini ko'rib chiqish va taqqoslash

Uni yaqinroq ko'rish uchun bosish mumkin va formatda ham mavjud Google Sheets.

Keling, yakunlaylik

Ushbu maqolaning maqsadi sizning alohida holatingizda qanday tanlov qilish kerakligi haqida to'liqroq tushuncha berishdir (ammo to'liq emas!). Odatdagidek, har bir boshqaruvchining o'ziga xos afzalliklari va kamchiliklari bor ...

Kubernetes-dan klassik Ingress o'zining mavjudligi va isbotlanganligi, etarlicha boy xususiyatlari bilan yaxshi - umumiy holda, u "ko'zlar uchun etarli" bo'lishi kerak. Biroq, agar barqarorlik, xususiyatlar va rivojlanish darajasiga talablar oshirilsa, siz NGINX Plus va pullik obuna bilan kirishga e'tibor berishingiz kerak. Kongda eng boy plaginlar to'plami (va shunga mos ravishda ular taqdim etadigan imkoniyatlar) mavjud va pullik versiyada ulardan ko'pi bor. U API shlyuzi, CRD resurslariga asoslangan dinamik konfiguratsiya, shuningdek, asosiy Kubernetes xizmatlari sifatida ishlash uchun keng imkoniyatlarga ega.

Balanslash va avtorizatsiya usullariga talablar ortib, Traefik va HAProxy-ga qarang. Bu yillar davomida isbotlangan, juda barqaror va faol rivojlanayotgan Ochiq kodli loyihalardir. Kontur bir necha yildan beri chiqmagan, lekin u hali ham juda yosh ko'rinadi va Envoy ustiga faqat asosiy funksiyalar qo'shilgan. Agar dastur oldida WAF mavjudligi / o'rnatilishi uchun talablar mavjud bo'lsa, siz Kubernetes yoki HAProxy-dan bir xil kirishga e'tibor berishingiz kerak.

Xususiyatlari bo'yicha eng boylari esa Envoy ustiga qurilgan mahsulotlar, ayniqsa Istio. Bu "hamma narsani qila oladigan" keng qamrovli yechim bo'lib ko'rinadi, ammo bu boshqa echimlarga qaraganda konfiguratsiya / ishga tushirish / boshqarish uchun sezilarli darajada yuqori kirish chegarasini anglatadi.

Biz standart kontroller sifatida Kubernetes-dan Ingress-ni tanladik va hozir ham foydalanamiz, bu ehtiyojlarning 80-90 foizini qoplaydi. Bu juda ishonchli, sozlash va kengaytirish oson. Umuman olganda, maxsus talablar bo'lmasa, u ko'pchilik klasterlar/ilovalarga mos kelishi kerak. Xuddi shu universal va nisbatan oddiy mahsulotlardan Traefik va HAProxy tavsiya etilishi mumkin.

PS

Shuningdek, bizning blogimizda o'qing:

Manba: www.habr.com

a Izoh qo'shish