Кубернети

Kubernetes Ingress

Kubernetes Ingress
Kubernetes има много движещи се части. Това се очаква от всеки модел, предназначен за разпределени изчисления. За да проучим какво ни помага Kubernetes Ingress, нека да обобщим първо няколко подходящи подробности за типичен клъстер Kubernetes:

  1. Приложение, разположено в клъстер Kubernetes, се изпълнява като подсистеми за събиране.
  2. Подовете са по същество контейнери, които са планирани през множество възли.
  3. Възлите могат да бъдат физически сървъри или виртуални машини, предлагани от вашия доставчик на хостинг услуги. Очевидно е, че можете да Kubernetes и на локален сървър, ако желаете.
  4. Всеки Pod има уникален IP адрес.
  5. Вашето приложение е разделено на много подкомпоненти, често наричани микроуслуги.
  6. За всяка микроуслуга на вашето приложение има съответна услуга в Kubernetes.
  7. В контекста на Kubernetes, a Обслужване излага колекция от шушулки на останалата част от клъстера като единична абстракция. Един виртуален IP.
  8. Това помага на една услуга на вашето приложение да комуникира с друга услуга. Това е абстракция, която ви позволява да адресирате колекция от шушулки, вместо да посочвате IP адреса на шушулка, всеки път, когато искате да говорите с нея.
  9. Услугата Kubernetes също действа като балансиращо натоварване за всички шушулки, които представлява. Трафикът се разпределя равномерно по всички възли.

Дотук добре. Всяка услуга може да говори с друга услуга. Тази комуникация е възможна в целия клъстер Kubernetes

Излагане на услуги

Ако дърво падне в гора и никой не е наоколо, за да го чуе, издава ли звук?

По подобна бележка, ако вашето приложение не служи за цел извън клъстера Kubernetes, наистина ли е важно дали вашият клъстер е добре изграден или не? Вероятно не.

За да ви дадем конкретен пример, да речем, че имаме класическо уеб приложение, съставено от интерфейс, написан на Nodejs и бекенд, написан на Python, който използва MySQL база данни. Разполагате две съответни услуги на вашия клъстер Kubernetes.

Вие правите Dockerfile, указващ как да пакетирате интерфейсния софтуер в контейнер, и по същия начин пакетирате вашия бекенд. След това във вашия клъстер Kubernetes ще разположите две услуги, всяка от които изпълнява набор от шушулки зад нея. Уеб услугата може да говори с клъстера на базата данни и обратно.

Kubernetes обаче не излага нито една от тези услуги (които са съществени крайни точки на HTTP) на останалия свят. Както е посочено в официалните документи:

Предполага се, че услугите имат виртуални IP адреси, които могат да се рутират само в клъстерната мрежа

Това е напълно разумно от гледна точка на сигурността, вашите услуги могат да говорят помежду си, но клъстерът няма да позволи на външни обекти да говорят директно с услугите. Например, само вашият уеб интерфейс може да говори с услугата на базата данни и никой друг не може дори да изпраща заявки до услугата на базата данни.

Проблемът възниква, когато разгледаме случая на използване на фронтенд услуга. Той трябва да бъде изложен на останалата част от обществеността, за да могат крайните потребители да използват приложението ви. Излагаме такива Услуги, използвайки Kubernetes Ingress.

Kubernetes Ingress

Ingress излага HTTP и HTTPS маршрути извън клъстера към услуги в рамките на клъстера. Можете да контролирате правилата за маршрутизиране, като дефинирате ресурса Kubernetes Ingress. Но прави много повече от това. Излагането на една услуга може да се постигне с помощта на различни други алтернативи като NodePort или Load Balancers, но тези съоръжения нямат функции, които са достатъчно сложни за модерно уеб приложение.

Функции като излагане на множество приложения на един IP, дефиниране на маршрути и др.

Така че нека разберем тези функции за останалата част от статията:

Влизане на единична услуга

Това е най-простата версия за излагане на една услуга като уеб интерфейс с IP (или име на домейн) и HTTP и HTTPS по подразбиране портове (i.д, 80 и 443).

Single Fanout

Това е настройка за вход, която ви позволява да разрешите входящия трафик към един IP и да го насочите към множество услуги.

Състои се от:

Single fanout е случаят, когато един IP се използва за множество услуги. Услугите могат да бъдат по различни пътища в URI като foo.лента.com / admin може да бъде услуга за администратори и foo.лента.com / home може да бъде услугата, която генерира начална страница на всеки потребител.

Входният порт винаги ще бъде 80 или 443, но портът, в който се изпълняват услугите (вътре в клъстера), може да се различава доста.

Този вид проникване ни помага да сведем до минимум броя на балансиращите натоварвания в клъстера, тъй като той по същество действа като един.

Виртуален хостинг, базиран на име

Публичните IP адреси са ограничени. Те също са доста скъпи. Идеята за базиран на име виртуален хостинг е по-стара от Kubernetes. Същността на това е, че насочвате DNS записите за различни уебсайтове като ww1.пример.com и ww2.пример.com на същия IP адрес. Сървърът, работещ на този IP адрес, ще види входящата заявка и ако името на хоста, посочено в заявката, е за ww1.пример.com, тогава той обслужва този уебсайт за вас и ако ww2.пример.com се иска, след което се връчва.

В контекста на Kubernetes можем да стартираме две услуги, работещи, да речем, на порт 80 и да ги изложим на един IP адрес, като използваме и вход на порт 80. В точката на влизане трафикът на ww1.пример.com ще се отдели от трафика за ww2.пример.com. Оттук и терминът базиран на име виртуален хостинг.

Заключение

Влизането в Kubernetes е доста сложно, за да бъде отразено в една публикация. Има разнообразни случаи на употреба за него и разнообразие от контролери на Ingress, които ще добавят функционалността Ingress към вашия клъстер. Бих препоръчал да започнете с Nginx Ingress Controller.

За допълнителни подробности и спецификации можете също да следвате официалната документация.

Топ 10 игри за игра на Ubuntu
Платформата на Windows е една от доминиращите платформи за игри поради огромния процент игри, които се развиват днес, за да поддържат Windows. Може ли...
5 най-добри аркадни игри за Linux
В днешно време компютрите са сериозни машини, използвани за игри. Ако не можете да получите новия висок резултат, ще разберете какво имам предвид. В т...
Битка за Уеснот 1.13.6 Разработка освободена
Битка за Уеснот 1.13.6, издаден миналия месец, е шестата версия за разработка в 1.13.x серия и предоставя редица подобрения, най-вече на потребителски...