Kubernetes

Kubernetes Ingress

Kubernetes Ingress
Kubernetes má spoustu pohyblivých částí. To lze očekávat od jakéhokoli modelu určeného pro distribuované výpočty. Abychom prozkoumali, co nám Kubernetes Ingress pomáhá dosáhnout, nejprve si připomeňme několik relevantních podrobností o typickém klastru Kubernetes:

  1. Aplikace nasazená v clusteru Kubernetes běží jako kolekce podů.
  2. Pody jsou v podstatě kontejnery, které jsou naplánovány napříč více uzly.
  3. Uzly mohou být fyzické servery nebo virtuální počítače nabízené vaším poskytovatelem hostingu. Je zřejmé, že můžete také Kubernetes na místním serveru, pokud si přejete.
  4. Každý modul má jedinečnou adresu IP.
  5. Vaše aplikace je rozdělena do mnoha dílčích komponent, často označovaných jako mikroslužby.
  6. Pro každou mikroslužbu vaší aplikace má odpovídající službu v Kubernetes.
  7. V kontextu Kubernetes, a Servis vystavuje kolekci lusků zbytku clusteru jako jednu abstrakci. Jedna virtuální IP.
  8. To pomáhá jedné službě vaší aplikace komunikovat s jinou službou. Jedná se o abstrakci, která vám umožňuje oslovit sbírku lusků, místo abyste zadali IP adresu lusku, kdykoli s ní chcete mluvit.
  9. Služba Kubernetes funguje také jako nástroj pro vyrovnávání zatížení pro všechny pody, které představuje. Provoz se rovnoměrně rozdělí mezi všechny uzly.

Zatím je vše dobré. Každá služba může mluvit s jinou službou. Tato komunikace je možná napříč celým klastrem Kubernetes

Vystavující služby

"Pokud strom spadne do lesa a nikdo ho nebude slyšet, vydá zvuk?

Podobně platí, že pokud vaše aplikace neslouží účelu mimo klastr Kubernetes, záleží na tom, zda je váš klastr dobře sestavený nebo ne? Asi ne.

Abychom vám poskytli konkrétní příklad, řekněme, že máme klasickou webovou aplikaci složenou z frontendu napsaného v Nodejs a backendu napsaného v Pythonu, který používá databázi MySQL. Na cluster Kubernetes nasazujete dvě odpovídající služby.

Vytvoříte Dockerfile se specifikací, jak zabalit software frontendu do kontejneru, a podobně zabalíte svůj backend. Dále ve vašem klastru Kubernetes nasadíte dvě služby, z nichž každá bude mít za sebou sadu podů. Webová služba může mluvit s databázovým klastrem a naopak.

Kubernetes však nevystavuje žádnou z těchto služeb (které jsou základním koncovým bodem protokolu HTTP) zbytku světa. Jak je uvedeno v oficiálních dokumentech:

"U služeb se předpokládá, že mají virtuální IP adresy směrovatelné pouze v rámci sítě clusteru

To je z hlediska zabezpečení naprosto rozumné, vaše služby mohou mezi sebou mluvit, ale cluster nedovolí externím entitám mluvit přímo se službami. Například pouze váš webový frontend může mluvit s databázovou službou a nikdo jiný nemůže odesílat požadavky do databázové služby.

Problém nastává, když se podíváme na případ použití frontendové služby. Musí být vystaven zbytku Veřejnosti, aby koncoví uživatelé mohli vaši aplikaci používat. Tyto služby vystavujeme pomocí Kubernetes Ingress.

Kubernetes Ingress

Ingress zpřístupňuje trasy HTTP a HTTPS z vně clusteru do služeb v rámci clusteru. Pravidla směrování můžete ovládat definováním prostředku Kubernetes Ingress. Ale dělá toho mnohem víc. Vystavení jedné služby lze dosáhnout pomocí různých jiných alternativ, jako je NodePort nebo Load Balancers, ale tato zařízení nemají funkce, které jsou dostatečně sofistikované pro moderní webovou aplikaci.

Funkce jako vystavení více aplikací na jedné IP, definování tras atd.

Pochopme tedy tyto funkce ve zbývající části článku:

Single Service Ingress

Toto je nejjednodušší verze vystavení jedné služby, jako je webový frontend s IP (nebo názvem domény) a výchozími porty HTTP a HTTPS (i.e, 80 a 443).

Single Fanout

Toto je příchozí nastavení, které vám umožňuje povolit příchozí provoz na jednu IP a směrovat jej na více služeb.

Skládá se z:

Single fanout je případ, kdy se pro více služeb používá jedna IP. Služby mohou být na různých cestách v URI jako foo.bar.com / admin může být služba pro správce a foo.bar.com / home může být služba, která generuje domovskou stránku každého uživatele.

Vstupní port bude vždy 80 nebo 443, ale port, na kterém jsou spuštěny služby (uvnitř clusteru), se může trochu lišit.

Tento druh vniknutí nám pomáhá minimalizovat počet balancerů zatížení v klastru, protože v podstatě funguje jako jeden.

Název založený na virtuálním hostingu

Veřejné IP adresy jsou konečné. Jsou také docela drahé. Myšlenka virtuálního hostování na základě názvu je starší než Kubernetes. Podstatou je to, že nasměrujete záznamy DNS pro různé weby, jako je ww1.příklad.com a 2. světové války.příklad.com na stejnou IP adresu. Server běžící na této IP adrese uvidí příchozí požadavek a pokud je název hostitele uvedený v požadavku pro ww1.příklad.com, pak slouží dané webové stránky pro vás, a pokud ww2.příklad.com je požadováno, pak je doručeno.

V kontextu Kubernetes můžeme spustit dvě služby běžící na, řekněme, na portu 80 a vystavit je obě na jedné IP adrese pomocí vstupu také na portu 80. V bodě vniknutí je provoz ww1.příklad.com se oddělí od provozu pro 2. světovou válku.příklad.com. Odtud pochází virtuální hostování založené na názvu.

Závěr

Ingress v Kubernetes je docela sofistikovaný, aby byl zahrnut v jednom příspěvku. Existuje celá řada případů použití a řada řadičů Ingress, které přidají funkci Ingress do vašeho clusteru. Doporučil bych začít s Nginx Ingress Controller.

Další podrobnosti a technické údaje najdete také v oficiální dokumentaci.

Hry Vulkan pro uživatele Linuxu
Vulkan pro uživatele Linuxu
S každou novou generací grafických karet vidíme, že vývojáři her posouvají hranice grafické věrnosti a přibližují se k fotorealismu. Ale navzdory vešk...
Hry OpenTTD vs Simutrans
OpenTTD vs Simutrans
Vytvoření vlastní simulace dopravy může být zábavné, uvolňující a mimořádně lákavé. Proto se musíte ujistit, že vyzkoušíte co nejvíce her, abyste našl...
Hry Výukový program OpenTTD
Výukový program OpenTTD
OpenTTD je jednou z nejpopulárnějších her pro obchodní simulaci. V této hře musíte vytvořit skvělé dopravní podnikání. Začnete však na začátku kolem r...