Kubernetes Networking - komplexní průvodce koncepcemi sítí v Kubernetes



Tento blog o Kubernetes Networking se hluboce ponoří do konceptů zapojených do Kubernetes, jako je komunikace s lusky, službami a příchozími sítěmi.

V předchozím blogu na , musíte mít pochopení pro Kubernetes. V tomto blogu o Kubernetes networking se zaměřím především na síťové koncepty zahrnuté v Kubernetes.

V tomto blogu o Kubernetes Networking pochopíte následující témata:





Co je Kubernetes?

Kubernetes můžete definovat jako nástroj pro orchestraci kontejnerů s otevřeným zdrojovým kódem, který poskytuje přenosnou platformu pro automatizaci nasazení kontejnerových aplikací.

Kdokoli, kdo pracuje s Kubernetes, musí mít jasnou představu o Kubernetes Clusteru, protože vám pomůže porozumět Kubernetes Networking.



Klastr Kubernetes

Platforma Kubernetes nabízí požadovanou správu stavu, která umožňuje spouštění klastrových služeb, přiváděnou konfiguraci v infrastruktuře. Vysvětlím to na příkladu.

Zvažte soubor YAML, který obsahuje všechny konfigurační informace, které je třeba přenést do služeb clusteru. Tento soubor se tedy přivádí do rozhraní API klastrových služeb a pak bude na klastrových službách, aby zjistily, jak naplánovat pody v prostředí. Předpokládejme tedy, že existují dva obrázky kontejneru pro pod 1 se třemi replikami a jeden image kontejneru pro pod 2 se dvěma replikami, bude na clusterových službách, aby tyto páry pod-replik přidělily pracovníkům.

služba nyní trénuje systém prodeje jízdenek

Kubernetes Cluster - Kubernetes Networking - Edureka



Viz výše uvedený diagram. Nyní, jak vidíte, služby klastru přidělily prvního pracovníka se dvěma páry replik pod, druhého pracovníka s jedním párem repliky pod a třetího pracovníka se dvěma páry replik pod. Nyní je to proces Kubelet, který je zodpovědný za komunikaci služeb klastru s pracovníky.

Celé toto nastavení klastrových služeb a samotní pracovníci to tedy tvoří Klastr Kubernetes !!

Jak si myslíte, že tyto individuálně přidělené lusky spolu komunikují?

Odpověď spočívá v Kubernetes Networking!

Přihlaste se k odběru našeho kanálu na YouTube a získejte nové aktualizace ..!

S koncepty sítí je třeba vyřešit hlavně 4 problémy.

  • Komunikace kontejneru s kontejnerem
  • Komunikace mezi zařízeními
  • Komunikace pod službou
  • Externí ke komunikaci služby

Nyní vám řeknu, jak se výše uvedené problémy řeší s Kubernetes Networking.

Síť Kubernetes

Komunikace mezi lusky, službami a externími službami s těmi v klastru přináší koncept Kubernetes networking.

Pro vaše lepší pochopení mi dovolte rozdělit pojmy do následujících.

  • Komunikace lusků a kontejnerů
  • Služby
  • Externí připojení ke službám prostřednictvím sítě Ingress

Komunikace lusků a kontejnerů

Než vám řeknu, jak komunikují lusky, představím vám, co jsou lusky?

Pods

Pods jsou základní jednotky aplikací Kubernetes, které se skládají z jednoho nebo více kontejnerů přidělených na stejném hostiteli ke sdílení síťového zásobníku a dalších prostředků. To tedy znamená, že všechny kontejnery v modulu se mohou na místním hostiteli dostat k ostatním.

Dovolte mi, abych vás stručně informoval o tom, jak tyto lusky komunikují?

Existují 2 typy komunikace. The komunikace mezi uzly a komunikace uvnitř uzlu.

Pojďme tedy začít s komunikací uvnitř uzlu, ale ještě předtím vám představím komponenty sítě pod.

V rámci uzlu v rámci sítě

Síť uvnitř uzlu je v podstatě komunikace mezi dvěma různými uzly ve stejném modulu. Vysvětlím vám to na příkladu.

Předpokládejme, že paket přechází z pod1 do pod2.

  • Paket opouští síť Pod 1 v ether0 a do kořenové sítě veth0
  • Pak paket předá linuxový most (cbr0), který pomocí požadavku ARP zjistí cíl
  • Pokud tedy veth1 má IP, most nyní ví, kam má přeposlat paket.

Podobně vám nyní povím o komunikaci mezi uzly pod.

Zajímá vás učení Kubernetes?
Uzel mezi uzly v síti

Zvažte dva uzly, které mají různé síťové jmenné prostory, síťová rozhraní a linuxový most.

Nyní předpokládejme, že paket cestuje z pod1 do pod4, který je na jiném uzlu.

  • Paket opouští síť pod 1 a vstupuje do kořenové sítě v veth0
  • Pak paket předá linuxovému mostu (cbr0), jehož odpovědností je učinit požadavek ARP k nalezení cíle.
  • Poté, co si most uvědomí, že tento modul nemá cílovou adresu, vrátí se paket zpět do hlavního síťového rozhraní eth0.
  • Paket nyní opouští uzel 1, aby našel cíl na druhém uzlu, a vstoupí do směrovací tabulky, která směruje paket do uzlu, jehož blok CIDR obsahuje pod4.
  • Takže nyní paket dosáhne node2 a pak most vezme paket, který provede požadavek ARP, aby zjistil, že IP patřící do veth0.
  • Nakonec paket protne dvojici potrubí a dosáhne pod4.

Takto tedy lusky mezi sebou komunikují. Pojďme nyní a podívejme se, jak služby pomáhají při komunikaci modulů.

Co si tedy myslíte, že služby jsou?

Služby

V zásadě jsou služby typem prostředku, který konfiguruje proxy, aby předával požadavky na sadu lusků, které budou přijímat přenosy & je určen selektorem. Jakmile je služba vytvořena, má přidělenou IP adresu, která bude přijímat požadavky na portu.

Nyní existují různé typy služeb, které vám dávají možnost vystavení služby mimo vaši IP adresu clusteru.

Druhy služeb

Existují hlavně 4 typy služeb.

ClusterIP: Toto je výchozí typ služby, který zpřístupňuje službu na interní IP clusteru tak, že je služba dostupná pouze v rámci clusteru.

NodePort: Tím se vystaví služba na každé IP uzlu na statickém portu. Protože, a ClusterIP služba, na kterou bude služba NodePort směrována, je automaticky vytvořena. Můžeme kontaktovat službu NodePort mimo cluster.

LoadBalancer: Toto je typ služby, který externě vystavuje službu pomocí nástroje pro vyrovnávání zatížení poskytovatele cloudu. Takže služby NodePort a ClusterIP, ke kterým bude směrován externí nástroj pro vyrovnávání zatížení, jsou vytvářeny automaticky.

ExternalName : Tento typ služby mapuje službu na obsah externí název pole vrácením a CNAME záznam s jeho hodnotou.

Takže, lidi, to bylo všechno o službách. Možná vás zajímá, jak se k těmto sítím připojují externí služby, ne?

To není nikdo jiný než Síť Ingress .

Síť Ingress

Síť Ingress je nejúčinnějším způsobem vystavování služeb, protože se jedná o soubor pravidel, která umožňují příchozí připojení a která lze konfigurovat tak, aby poskytovala služby externě prostřednictvím přístupných adres URL. V podstatě tedy funguje jako vstupní bod do klastru Kubernetes, který spravuje externí přístup ke službám v klastru.

Nyní vám na příkladu vysvětlím fungování Ingress Network.

Máme 2 uzly, které mají jmenné prostory pod a kořenové sítě s mostem Linux. Kromě toho máme do kořenové sítě přidáno také nové virtuální ethernetové zařízení s názvem flannel0 (síťový plugin).

Nyní chceme, aby paket proudil z pod1 do pod 4.

  • Paket tedy opouští síť pod1 v ether0 a do kořenové sítě veth0.
  • Poté je předán cbr0, což způsobí, že ARP požadavek na nalezení cíle a poté zjistí, že nikdo v tomto uzlu nemá cílovou IP adresu.
  • Most tedy odešle paket na flannel0, protože směrovací tabulka uzlu je nakonfigurována na flannel0.
  • Nyní démon flanelu hovoří se serverem API Kubernetes, aby poznal všechny IP pody a jejich příslušné uzly, aby vytvořil mapování pro IP pody na IP uzlů.
  • Síťový modul zabalí tento paket do paketu UDP s dalšími záhlavími, která změní zdrojovou a cílovou adresu IP na příslušné uzly, a odešle tento paket prostřednictvím ether0.
  • Nyní, protože směrovací tabulka již ví, jak směrovat provoz mezi uzly, odešle paket do cílového uzlu2.
  • Paket dorazí na eth0 uzlu2 a vrátí se zpět na flannel0, aby se zbavil kapitalizace a odešle jej zpět do jmenného prostoru kořenové sítě.
  • Paket je opět předán linuxovému mostu, aby provedl požadavek ARP na zjištění IP, které patří do veth1.
  • Paket nakonec překročí kořenovou síť a dosáhne cíle Pod4.

Takto jsou tedy externí služby propojeny pomocí příchozí sítě. Nyní, když jsem mluvil o síťových pluginech, dovolte mi, abych vám představil seznam populárních dostupných síťových pluginů.

Nyní, když jsem vám toho o Kubernetes Networking řekl už hodně, dovolte mi ukázat vám případovou studii z reálného života.

Případová studie: Wealth Wizard using Kubernetes Networking

Wealth Wizards je online platforma pro finanční plánování, která kombinuje finanční plánování a inteligentní softwarovou technologii a poskytuje odborné rady za dostupnou cenu.

Výzvy

Nyní bylo pro společnost nesmírně důležité rychle objevit a eliminovat chyby zabezpečení kódu s plnou viditelností jejich cloudového prostředí, ale chtěla řídit provoz prostřednictvím omezení přístupu.

Takže použili Kubernetes infrastrukturu ke správě zajišťování a zavádění klastrů pomocí nástrojů ke správě nasazení a konfigurace mikroslužeb napříč klastry Kube.

Také použili funkci síťové politiky Kubernetes, která jim umožnila řídit provoz prostřednictvím omezení přístupu.

Problém však byl v tom, že tyto zásady jsou aplikačně orientované a mohou se vyvíjet pouze s aplikacemi, ale neexistovala žádná součást k prosazování těchto zásad.

Jediným řešením, které pro to společnost mohla najít, bylo použití síťového pluginu, a proto začali používat Weave Net.

Řešení

Tento síťový plugin vytváří virtuální síť, která má řadič síťových zásad pro správu a vynucování pravidel v Kubernetes. Nejen to, ale také spojuje kontejnery Dockeru mezi více hostiteli a umožňuje jejich automatické zjišťování.

Předpokládejme tedy, že máte pracovní zátěž v klastru a chcete zastavit jakékoli další pracovní vytížení v klastru, které s ní bude mluvit. Toho lze dosáhnout vytvořením síťové zásady, která omezuje přístup a umožňuje pouze vnikání do ní prostřednictvím řadiče příchozího přenosu dat na konkrétním portu.

Nyní se svým nasazením na každém uzlu Kubernetes modul spravuje směrování mezipodů a má přístup k manipulaci s pravidly IPtables. Zjednodušeně řečeno, každá zásada je převedena na kolekci pravidel IPtables, koordinována a nakonfigurována napříč každým strojem tak, aby překládala značky Kubernetes.

Dobře, teď, když jste prošli tolik teorií o Kubernetes Networking, dovolte mi ukázat vám, jak se to dělá prakticky.

Hands-On

Takže s předpokladem, že jste si všichni nainstalovali Kubernetes do svých systémů, musím předvést scénář.

Předpokládejme, že chcete uložit název produktu a ID produktu, k tomu budete potřebovat webovou aplikaci. V zásadě potřebujete jeden kontejner pro webovou aplikaci a potřebujete ještě jeden kontejner jako MySQL pro backend a tento kontejner MySQL by měl být propojen s kontejnerem webové aplikace.

Co kdybych provedl výše uvedený příklad prakticky.

Začněme!

Krok 1: Vytvořte složku v požadovaném adresáři a změňte cestu pracovního adresáře k této složce.

mkdir HandsOn cd HandsOn /

Krok 2: Nyní vytvořte nasazení souborů YAML pro webovou aplikaci a databázi MySQL.

Krok 3: Jakmile vytvoříte soubory nasazení, nasaďte obě aplikace.

kubectl použít -f webapp.yml kubectl použít -f mysql.yml

Krok 3.1: Zkontrolujte obě nasazení.

kubectl získat nasazení

Krok 4: Nyní musíte vytvořit služby pro obě aplikace.

kubectl použít -f webová služba.yml kubectl použít -f sqlservice.yml

Krok 4.1: Jakmile jsou služby vytvořeny, nasaďte je.

Krok 4.2: Zkontrolujte, zda byly služby vytvořeny nebo ne.

kubectl získat službu

Krok 5: Nyní zkontrolujte konfiguraci běžících lusků.

kubectl dostat lusky

Krok 6: Přejít do kontejneru uvnitř pod webapp.

kubectl exec -it container_id bash nano var / www / html / index.php

Krok 6.1 : Nyní změňte $ název serveru z localhost na název služby SQL, který je „ webapp-sql1 „V tomto případě a $ heslo od Pro ' edureka “. Vyplňte také všechny požadované podrobnosti databáze a uložte soubor index.php pomocí klávesové zkratky Ctrl + x a po tomto tisku Y uložte a stiskněte vstoupit .

Krok 7: Nyní přejděte do kontejneru MySQL v podu.

kubectl exec to container_id bash

Krok 7.1: Získejte přístup k používání kontejneru MySQL.

mysql -u root -p edureka

Kde -u představuje uživatele a -p je heslo vašeho zařízení.

Krok 7.2: Vytvořte databázi v MySQL, která bude použita k získávání dat z webapp.

VYTVOŘIT DATABÁZE ProductDetails

Krok 7.3: Použijte vytvořenou databázi.

POUŽÍVEJTE podrobnosti o produktu

Krok 7.4: Vytvořte v této databázi tabulku v MySQL, která bude použita k získávání dat z webapp.

CREATE TABLE products (product_name VARCHAR (10), product_id VARCHAR (11))

Krok 7.5: Nyní také pomocí příkazu ukončete kontejner MySQL výstup .

Krok 8: Zkontrolujte číslo portu, na kterém vaše webová aplikace pracuje.

kubectl získat služby

Krok 8.1: Nyní otevřete webovou aplikaci na přiděleném čísle portu.

Krok 9: Jakmile kliknete na Odeslat dotaz , přejděte do uzlu, ve kterém je spuštěna vaše služba MySQL, a poté přejděte dovnitř kontejneru.

Zobrazí se výstup všech produktů seznamu, o kterých jste vyplnili podrobnosti.

Zajímá vás učení Kubernetes?

Pokud shledáte tento blog Kubernetes Networking relevantní, podívejte se na Edureka, důvěryhodná online vzdělávací společnost se sítí více než 250 000 spokojených studentů po celém světě.