Kubernetes-д зориулсан Ingress контроллеруудын тойм ба харьцуулалт

Kubernetes-д зориулсан Ingress контроллеруудын тойм ба харьцуулалт

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

Энэ нь хамт олондоо архитектурын шийдлийг сонгоход тусална гэж найдаж байна - наад зах нь энэ нь илүү нарийвчилсан мэдээлэл, практик туршилтуудыг олж авах эхлэл болно. Өмнө нь бид сүлжээнд ижил төстэй бусад материалыг судалж үзсэн бөгөөд хачирхалтай нь, нэг ч илүү эсвэл бага бүрэн гүйцэд, хамгийн чухал нь бүтэцтэй тоймыг олж чадаагүй юм. Тиймээс энэ орон зайг нөхцгөөе!

Шалгуур

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

Гэхдээ би бүх шийдэлд хэрэгждэг, анхааралдаа авдаггүй маш сайн танил болсон шинж чанаруудаас эхэлье.

  • үйлчилгээний динамик нээлт (үйлчилгээний нээлт);
  • SSL цуцлалт;
  • вэбсокетуудтай ажиллах.

Одоо харьцуулах цэгүүдийн хувьд:

Дэмжигдсэн протоколууд

Сонгон шалгаруулалтын үндсэн шалгууруудын нэг. Таны програм хангамж стандарт HTTP дээр ажиллахгүй байж магадгүй, эсвэл нэг дор олон протокол дээр ажиллах шаардлагатай байж магадгүй. Хэрэв таны хэрэг стандарт бус бол дараа нь кластерыг дахин тохируулах шаардлагагүй тул энэ хүчин зүйлийг анхаарч үзээрэй. Бүх хянагчийн хувьд дэмжигдсэн протоколуудын жагсаалт өөр өөр байдаг.

програм хангамжийн гол цөм

Хянагч дээр суурилсан хэд хэдэн төрлийн програмууд байдаг. Хамгийн алдартай нь nginx, traefik, haproxy, envoy юм. Ерөнхийдөө энэ нь урсгалыг хэрхэн хүлээж авах, дамжуулахад төдийлөн нөлөө үзүүлэхгүй байж болох ч "бүрээсний доор" байгаа зүйлийн боломжит нюанс, онцлог шинж чанарыг мэдэх нь үргэлж хэрэгтэй байдаг.

Замын хөдөлгөөний чиглүүлэлт

Тодорхой үйлчилгээ рүү чиглэсэн хөдөлгөөний чиглэлийг юунд үндэслэн шийдвэр гаргах боломжтой вэ? Ихэвчлэн эдгээр нь хост ба зам боловч нэмэлт боломжууд байдаг.

Кластер доторх нэрийн орон зай

Нэрийн орон зай (нэрийн орон зай) - Kubernetes дахь нөөцийг логикоор хуваах чадвар (жишээлбэл, тайзан дээр, үйлдвэрлэл гэх мэт). Нэрийн талбар бүрт тусад нь суулгасан байх ёстой Ingress хянагч байдаг (дараа нь траффикийг чиглүүлэх боломжтой). зөвхөн энэ орон зайн хонхорцог руу). Дэлхий даяар бүхэл бүтэн кластерт ажилладаг эдгээр (мөн тэдгээрийн тодорхой дийлэнх хэсэг) байдаг - тэдгээрийн урсгал нь нэрийн зайнаас үл хамааран кластерын аль ч хэсэгт чиглэгддэг.

Дээд урсгалд зориулсан дээж

Аппликейшн, үйлчилгээний эрүүл тохиолдол руу замын хөдөлгөөн хэрхэн чиглэгддэг вэ? Идэвхтэй болон идэвхгүй шалгалт, дахин оролдлого, таслуур бүхий сонголтууд байдаг (Дэлгэрэнгүй мэдээллийг, жишээ нь: Истиогийн тухай нийтлэл), захиалгат эрүүл мэндийн үзлэг гэх мэт. Хэрэв та бүтэлгүйтсэн үйлчилгээг тэнцвэржүүлэхээс цаг тухайд нь арилгах, бэлэн байдалд өндөр шаардлага тавьдаг бол маш чухал параметр юм.

Тэнцвэржүүлэх алгоритмууд

Олон сонголт байдаг: уламжлалтаас Тойрон Эргэх чамин зүйл рүү rdp-жигнэмэг, түүнчлэн хувь хүний ​​онцлог гэх мэт наалттай сессүүд.

Гэрчлэлт

Хянагч ямар зөвшөөрлийн схемийг дэмждэг вэ? Basic, digest, oauth, external-auth - Эдгээр сонголтууд нь танил байх ёстой гэж би бодож байна. Хэрэв Ingress-ээр дамжуулан ханддаг олон хөгжүүлэгч (ба/эсвэл зүгээр л хувийн) гогцоо байгаа бол энэ нь чухал шалгуур юм.

Замын хөдөлгөөний хуваарилалт

Удирдагч нь канарын өнхрөлт (канар), A / B тест, замын хөдөлгөөний толин тусгал (толин тусгал / сүүдэрлэх) гэх мэт түгээмэл хэрэглэгддэг хөдөлгөөний хуваарилалтын механизмыг дэмждэг үү? Энэ нь бүтээмжтэй туршилт хийх, бүтээгдэхүүний алдааг офлайнаар (эсвэл хамгийн бага алдагдалтай) дибаг хийх, замын хөдөлгөөний дүн шинжилгээ хийх гэх мэт замын хөдөлгөөний үнэн зөв, нарийн зохицуулалт шаарддаг програмуудын хувьд үнэхээр эмзэг сэдэв юм.

Төлбөртэй захиалга

Дэвшилтэт функц ба / эсвэл техникийн дэмжлэг бүхий хянагчдад төлбөртэй сонголт бий юу?

График хэрэглэгчийн интерфэйс (Вэб UI)

Хянагчийн тохиргоог удирдах GUI байна уу? Голчлон "ашигтай" болон / эсвэл Ingress'a тохиргоонд зарим өөрчлөлт хийх шаардлагатай хүмүүст зориулагдсан боловч "түүхий" загвартай ажиллах нь тохиромжгүй байдаг. Хөгжүүлэгчид хөл хөдөлгөөнтэй холбоотой туршилт хийхийг хүсч байвал энэ нь ашигтай байх болно.

JWT баталгаажуулалт

Хэрэглэгчийн эцсийн програмыг баталгаажуулах, баталгаажуулах зорилгоор JSON вэб жетонуудын суурилуулсан баталгаажуулалт байгаа эсэх.

Тохиргоог өөрчлөх боломжууд

Загварын өргөтгөл нь стандарт тохиргооны загварт өөрийн заавар, туг гэх мэтийг нэмэх боломжийг олгодог механизмтай гэсэн утгаараа.

DDOS хамгаалах үндсэн механизмууд

Энгийн хурдны хязгаарын алгоритмууд эсвэл хаяг, зөвшөөрөгдсөн жагсаалт, улс орон гэх мэт дээр суурилсан замын хөдөлгөөний шүүлтүүрийн илүү төвөгтэй сонголтууд.

ул мөр хүсэх

Ingresses-аас тодорхой үйлчилгээ/под болон үйлчилгээ/под хоорондын хүсэлтийг хянах, хянах, дибаг хийх чадвар.

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

Конг Inc-ийн боловсруулсан бүтээгдэхүүн. арилжааны болон үнэгүй гэсэн хоёр хувилбартай. Олон тооны Lua модулиудаар өргөтгөсөн nginx дээр суурилсан.

Эхэндээ энэ нь API хүсэлтийг боловсруулах, чиглүүлэхэд чиглэсэн байсан, i.e. API гарцын хувьд, гэхдээ одоогоор энэ нь бүрэн хэмжээний Ingress хянагч болсон. Үндсэн давуу талууд: суулгах, тохируулахад хялбар олон нэмэлт модулиуд (гуравдагч талын хөгжүүлэгчдийг оруулаад), тэдгээрийн тусламжтайгаар өргөн хүрээний нэмэлт функцуудыг хэрэгжүүлдэг. Гэсэн хэдий ч суулгасан функцууд нь олон боломжийг аль хэдийн санал болгодог. Ажлын тохиргоог CRD нөөц ашиглан хийдэг.

Бүтээгдэхүүний чухал шинж чанар - ижил контурын дотор ажиллах (нэр хоорондын зайны оронд) нь маргаантай сэдэв юм: зарим хүмүүсийн хувьд энэ нь сул тал мэт санагдах болно (та контур бүрийн хувьд нэгж үйлдвэрлэх хэрэгтэй), хэн нэгэнд энэ нь онцлог шинж юм ( боИлүү их тусгаарлах түвшин, гэх мэт Хэрэв нэг хянагч эвдэрсэн бол асуудал зөвхөн хэлхээнд л хязгаарлагдана).

Трефик

вэб хуудас: github.com/containous/traefik
Лиценз: MIT

Микро үйлчилгээ болон тэдгээрийн динамик орчинд зориулсан хүсэлтийн чиглүүлэлттэй ажиллахаар анх үүсгэгдсэн прокси. Тиймээс олон ашигтай функцууд: тохиргоог дахин ачаалахгүйгээр шинэчлэх, олон тооны тэнцвэржүүлэх аргуудыг дэмжих, вэб интерфэйс, хэмжүүр дамжуулах, янз бүрийн протоколуудыг дэмжих, REST API, канарын хувилбарууд гэх мэт. Өөр нэг сайхан боломж бол Let's Encrypt сертификатуудыг хайрцагнаас нь гаргах дэмжлэг юм. Сул тал нь өндөр хүртээмжтэй (HA) зохион байгуулахын тулд хянагч өөрийн КВ хадгалах байгууламжийг суулгаж, холбох шаардлагатай болно.

HAProxy

вэб хуудас: github.com/jcmoraisjr/haproxy-ingress
Лиценз: Apache 2.0

HAProxy нь прокси болон траффик тэнцвэржүүлэгч гэдгээрээ эртнээс алдартай. Kubernetes кластерын нэг хэсэг болохын хувьд энэ нь "зөөлөн" тохиргооны шинэчлэлт (трафик алдалгүйгээр), DNS дээр суурилсан үйлчилгээний нээлт, API ашиглан динамик тохиргоог санал болгодог. CM-г солих замаар тохиргооны загварыг бүрэн өөрчлөх, мөн түүн доторх Sprig номын сангийн функцуудыг ашиглах нь сонирхол татахуйц байж болох юм. Ерөнхийдөө уг шийдлийн гол онцлох зүйл бол өндөр хурд, түүнийг оновчтой болгох, зарцуулсан нөөцөд үр ашигтай байх явдал юм. Хянагчийн давуу тал нь олон тооны тэнцвэржүүлэх аргуудын дэмжлэг юм.

Вояжер

вэб хуудас: 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 хянагч төдийгүй кластер доторх бүх урсгалыг хянадаг үйлчилгээний цогц шийдэл юм. Бүрээсний доор Envoy-ийг үйлчилгээ бүрийн хажуугийн прокси болгон ашигладаг. Нэг ёсондоо энэ бол "юуг ч хийж чадах" том комбайн бөгөөд түүний гол санаа нь дээд зэргийн удирдлага, өргөтгөл, аюулгүй байдал, ил тод байдал юм. Үүний тусламжтайгаар та замын хөдөлгөөний чиглүүлэлт, үйлчилгээнүүдийн хооронд зөвшөөрөл олгох, тэнцвэржүүлэх, хянах, канарын хувилбарууд болон бусад олон зүйлийг тохируулах боломжтой. Истиогийн талаар дэлгэрэнгүйг цуврал нийтлэлээс уншина уу "Istio ашиглан микро үйлчилгээ рүү буцах".

Элчин сайд

вэб хуудас: github.com/datawire/ambassador
Лиценз: Apache 2.0

Элч дээр суурилсан өөр нэг шийдэл. Энэ нь үнэгүй болон арилжааны хувилбаруудтай. Энэ нь "Kubernetes-д бүрэн нийцсэн" байр суурь эзэлдэг бөгөөд энэ нь зохих давуу талыг авчирдаг (K8s кластерийн арга, нэгжүүдтэй нягт уялдаа холбоотой).

Харьцуулах хүснэгт

Тиймээс, өгүүллийн оргил нь энэ том хүснэгт юм.

Kubernetes-д зориулсан Ingress контроллеруудын тойм ба харьцуулалт

Үүнийг илүү ойроос харахын тулд товших боломжтой, мөн форматаар авах боломжтой Google Шийт.

Нэмж хэлье

Энэ нийтлэлийн зорилго нь таны тодорхой тохиолдолд ямар сонголт хийх талаар илүү бүрэн ойлголт өгөх явдал юм (гэхдээ бүрэн гүйцэд биш!). Ердийнх шиг, хянагч бүр өөрийн гэсэн давуу болон сул талуудтай байдаг ...

Kubernetes-ийн сонгодог Ingress нь хүртээмжтэй, баталгаатай, хангалттай баялаг шинж чанараараа сайн байдаг - ерөнхий тохиолдолд энэ нь "нүдэнд хангалттай" байх ёстой. Гэсэн хэдий ч, хэрэв тогтвортой байдал, функцүүдийн түвшин, хөгжүүлэлтийн шаардлага нэмэгдэж байгаа бол та NGINX Plus болон төлбөртэй захиалгатай Ingress-д анхаарлаа хандуулах хэрэгтэй. Конг нь хамгийн баялаг залгаасуудтай (мөн үүний дагуу тэдгээрийн олгодог боломжууд) бөгөөд төлбөртэй хувилбарт үүнээс ч олон байдаг. Энэ нь API гарц, CRD нөөцөд суурилсан динамик тохиргоо, мөн Kubernetes-ийн үндсэн үйлчилгээ зэрэг ажиллах өргөн боломжуудтай.

Тэнцвэржүүлэх болон зөвшөөрлийн аргуудад тавигдах шаардлага нэмэгдэж байгаа тул Traefik болон HAProxy-г харна уу. Эдгээр нь олон жилийн турш батлагдсан, маш тогтвортой, идэвхтэй хөгжиж буй Нээлттэй эхийн төслүүд юм. Contour гараад хэдэн жил болж байгаа ч хэтэрхий залуу харагдаж байгаа бөгөөд Envoy дээр зөвхөн үндсэн функцуудыг нэмсэн. Хэрэв програмын өмнө WAF байх / оруулах шаардлага байгаа бол та Kubernetes эсвэл HAProxy-ийн ижил Ingress-д анхаарлаа хандуулах хэрэгтэй.

Мөн онцлог шинж чанаруудын хувьд хамгийн баян нь Envoy, ялангуяа Istio дээр бүтээгдсэн бүтээгдэхүүн юм. Энэ нь "юуг ч хийж чадах" цогц шийдэл юм шиг санагддаг, гэхдээ бусад шийдлүүдийг бодвол тохиргоо хийх / эхлүүлэх / удирдахад нэвтрэх босго хамаагүй өндөр гэсэн үг юм.

Бид Kubernetes-ийн Ingress-ийг хэрэгцээний 80-90%-ийг хангадаг стандарт хянагч болгон сонгосон бөгөөд одоо ч ашиглаж байна. Энэ нь нэлээд найдвартай, тохируулах, өргөжүүлэхэд хялбар юм. Ерөнхийдөө, тодорхой шаардлага байхгүй тохиолдолд энэ нь ихэнх кластер / програмуудад тохирсон байх ёстой. Бүх нийтийн, харьцангуй энгийн бүтээгдэхүүнээс Traefik болон HAProxy-ийг санал болгож болно.

PS

Мөн манай блог дээрээс уншина уу:

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх