Load balancer z Kubernetesem

Kubernetes

Load balancer z Kubernetesem

 
Zanim przyjrzymy się tej funkcjonalności, przypomnijmy, jakie korzyści dla Twojej działalności niesie ze sobą zastosowanie Kubernetesa. Otóż Kubernetes to wiodąca na rynku platforma do orkiestracji kontenerów. Umożliwia automatyczne wdrażanie aplikacji w klastrze, niezależnie od tego, czy serwery są fizyczne czy wirtualne.
 
 
 
 
 
 
 
 
 

Dzięki Kubernetesowi firmy mogą się skoncentrować na rozwoju oprogramowania. Kubernetes pozwala również na uproszczenie niektórych zadań.

 

Icons/concept/Lines/Line Communicating Created with Sketch.

Automatyzacja cyklu życia skonteneryzowanych aplikacji

Jeśli chcesz optymalizować wykorzystanie zasobów pod kątem bieżących potrzeb, usługi te muszą być skalowane. Kubernetes umożliwia automatyzację tego etapu. Zapewnia to ciągłe wdrażanie (CI/CD) nowych wersji (i zdecydowanie ogranicza koszty utrzymania.

Icons/concept/Container Created with Sketch.

Wdrażanie aplikacji wielokontenerowych (multi-containers)

Niektóre programy mogą używać jednocześnie kilku kontenerów (baz danych, front-endu, back-endu, cache...). Wymaga to czasem posiadania kilku instancji. Kubernetes zapewnia podczas wdrażania synchronizację między różnymi kontenerami i połączonymi komponentami.

Icons/concept/Component/Component Square Created with Sketch.

Uruchomienie w dowolnym środowisku

Chmura publiczna, prywatna, serwer fizyczny lub wirtualny: Kubernetes jest prosty do wdrożenia w każdym z tych środowisk, nawet w architekturze hybrydowej. Zyskujesz dzięki temu większą swobodę realizacji projektów.

Co to jest load balancer?

Celem load balancera jest rozdzielenie obciążenia między różne serwery lub aplikacje. Można go zainstalować zarówno na infrastrukturze fizycznej, jak i wirtualnej. Oprogramowanie load balancera ma postać kontrolera dostarczania aplikacji (application delivery controller lub ADC). Pozwala użytkownikom na automatyczne równoważenie obciążenia, w zależności od przewidywań ruchu.

Kontroler ADC identyfikuje w czasie rzeczywistym serwer, który jest w stanie najlepiej odpowiedzieć na żądanie, dzięki czemu klaster zachowuje stabilny poziom wydajności. W przypadku awarii będzie on również odpowiedzialny za przekierowanie ruchu do zasobu zdolnego do jego obsługi. Możliwe są wówczas różne rodzaje konfiguracji.

Load balancer włącza się między użytkownikiem a serwerem. Następnie analizuje, która maszyna najlepiej odpowie na to żądanie, po czym przesyła je do niej. Może również dodawać lub usuwać serwery w zależności od obciążenia i bieżących potrzeb.

Równoważenie obciążenia, jak widzieliśmy wcześniej, jest tylko jednym z możliwych zastosowań load balancera. Jest on szczególnie przydatny w przypadku potrzeby odblokowania certyfikatu SSL lub aktualizacji grup aplikacji. Możesz również używać go do przekierowywania domen.

Istnieją dwa rodzaje load balancerów:

  • „Load balancer L4” lub „network load balancer”

Load balancery te przetwarzają dane warstwy 4 (layer 4), które są obecne na poziomie sieci i transmisji danych (TCP/UDP). Nie skupiają się na danych warstwy aplikacyjnej, czyli na rodzaju treści, plikach cookie, lokalizacji nagłówków, etc. Przekierowują ruch tylko na podstawie danych z warstwy sieciowej.

  • „Load balancer L7” lub „application load balancers”

Load balancery L7, w przeciwieństwie do load balancerów L4, przekierowują ruch na podstawie parametrów warstwy aplikacyjnej. Przetwarzają większą ilość danych i opierają się na większej ilości informacji. Dotyczy to na przykład protokołów HTTP, HTTPS i SSL.

Load Balancer OVHcloud

Jak działa load balancer z Kubernetesem?

Gdy zaczynasz używać Kubernetesa do obsługi Twoich aplikacji, pamiętaj o tym, że bardzo duże znaczenie ma ruch z zewnątrz. Temat ten jest krótko omówiony na oficjalnej stronie WWW Kubernetesa. Poniżej przypomnimy kilka kluczowych informacji.

Aby skierować ruch z zewnątrz do klastra, możesz zastosować jedną z możliwych metod:

  • użyć ClusterIP za pośrednictwem proxy
  • zdefiniować usługę jako NodePort
  • zadeklarować usługę jako load balancer i tym samym otworzyć ją na ruch z zewnątrz. Jest to najczęściej stosowana metoda.

Użycie ClusterIP za pośrednictwem proxy

Metoda ta jest zwykle używana do wdrożeń deweloperskich i jest dostępna w Kubernetesie jako metoda domyślna. Włączenie proxy między zewnętrznym źródłem a Twoim ClusterIP pozwala na odpowiednie kierowanie ruchu. Aby utworzyć proxy, możesz użyć polecenia "kubectl". Kiedy proxy zacznie działać, zostaniesz bezpośrednio połączony z adresem IP klastra dla tej konkretnej usługi.

Uruchomienie usługi jako NodePort

W ten sposób wystawiasz adresy Twoich węzłów na wybranych portach (stały port usługi od 30000 do 32767). Pozwala to, w przypadku każdego węzła, na dostęp do usługi z zewnątrz z portu. W tym celu użyj polecenia <NodeIp>:<NodePort>

Należy pamiętać, że metoda ta jest stosunkowo trudna do zrealizowania w środowisku produkcyjnym. Ponieważ stosujesz „niestandardowe” porty, często zdarza się, że musisz skonfigurować zewnętrzny load balancer. Obsługuje on standardowe porty i przekierowuje ruch do żądania « <NodeIp>:<NodePort> ».

Wybór load balancera

Wybór ten polega na zadeklarowaniu usługi jako load balancer dla Twojego klastra. Tym samym usługa zostaje otwarta na ruch z zewnętrz. Ta metoda wymaga użycia rozwiązania do równoważenia obciążenia, takiego jak Load Balancer od OVHcloud. Dostarczy on usługę do klastra i automatycznie przydzieli jej NodePort.

Jeśli dysponujesz środowiskiem produkcyjnym, load balancer jest jak najbardziej zalecanym rozwiązaniem. Pamiętaj jednak o dwóch istotnych elementach:

  • każda usługa, którą definiujesz i wdrażasz jako load balancer posiada własny adres IP
  • korzystanie z Load Balancera od OVHcloud jest zarezerwowane dla użytkowników Managed Kubernetes Service.

Load balancer działa jako filtr między zewnętrznym ruchem przychodzącym a klastrem Kubernetes. Możesz wdrożyć do 16 load balancerów na klaster. Zarządzasz nimi bezpośrednio w interfejsie K8s. W konfiguracji load balancera pomogą Ci nasze przewodniki.

Dodanie Ingressu do load balancera

Ingress to obiekt Kubernetesa zarządzający dostępem do usług klastra z zewnątrz (jak protokół HTTP). Czym zatem różni się od load balancera?

Ingress, jako jedyny punkt wejścia do Twojego klastra, działa jak odwrotne proxy. Kieruje przechodzące przez niego żądania do różnych usług, zgodnie ze skonfigurowanymi regułami. Jest otwarty na ruch z zewnątrz przez ClusterIP, NodePort lub load balancer. Najbardziej znanym Ingressem jest NGINX Ingress Controller.

Dlaczego warto używać Ingressa wraz z load balancerem? Przede wszystkim ze względu na możliwość obniżenia kosztów. Płatności za load balancer naliczane są na podstawie liczby usług, którymi zarządza. Dzięki Ingressowi możesz przypisać większą liczbę usług do tego samego load balancera i poczynić znaczne oszczędności.

Jaką konfigurację najlepiej wybrać?

Aby odpowiedzieć na to pytanie, najpierw należy określić sposób korzystania z Kubernetesa.

Load balancer sprawdza się w przypadku zdecydowanej większości zastosowań. Możesz go spersonalizować dla każdej z Twoich usług Kubernetes, bez potrzeby konfiguracji. Metoda ta nie będzie jednak najlepszym rozwiązaniem, jeśli dysponujesz ograniczonym budżetem. Wymaga ona bowiem skomplikowanego zarządzania dużą liczbą adresów IP.

Istnieje na szczęście prostsze rozwiązanie: możesz użyć load balancera oraz rozwiązania Ingress. Wszystkie Twoje usługi będą wówczas umieszczone pod tym samym adresem IP i będziesz płacił tylko za jeden load balancer.

Należy jednak upewnić się, że usługi orkiestrowane przez ten model mają ze sobą logiczne powiązanie. W przeciwnym razie może to spowodować nieprawidłowe działanie lub awarie.

 

Optymalną konfiguracją może być load balancer połączony z Ingressem dla każdej „rodziny usług” lub mikrousług. Organizacja będzie zależała od stopnia złożoności Twojej architektury.