„Kubernetes Networking“ - išsamus „Kubernetes“ tinklo koncepcijų vadovas



Šis „Kubernetes Networking“ tinklaraštis gilinsis į „Kubernetes“ susijusias sąvokas, tokias kaip bendravimas su tinklais, paslaugomis ir patekimo tinklais.

Ankstesniame tinklaraštyje , jūs turite suprasti Kubernetes. Šiame tinklaraštyje apie „Kubernetes“ tinklą daugiausia dėmesio skirsiu „Kubernetes“ tinklo koncepcijoms.

Šiame „Kubernetes Networking“ tinklaraštyje suprasite šias temas:





Kas yra Kubernetes?

Galite apibrėžti „Kubernetes“ kaip atvirojo kodo sudėtinių rodinių tvarkymo įrankį, kuris suteikia nešiojamąją platformą, skirtą automatizuoti konteinerių programų diegimą.

Dabar visi, dirbantys su „Kubernetes“, turi aiškiai suprasti Kubernetes klasterį, nes tai padės suprasti Kubernetes tinklą.



„Kubernetes“ klasteris

„Kubernetes“ platforma siūlo pageidaujamą būsenos valdymą, kuris leidžia vykdyti klasterio paslaugas, valdomą konfigūraciją infrastruktūroje. Leiskite man paaiškinti pavyzdžiu.

Apsvarstykite YAML failą, kuriame yra visa konfigūracijos informacija, kurią reikia pateikti į klasterio paslaugas. Taigi, šis failas perduodamas į klasterių paslaugų API, o tada klasterio tarnyboms teks išsiaiškinti, kaip suplanuoti podus aplinkoje. Taigi, tarkime, kad yra 1 konteinerio vaizdai su trimis kopijomis ir vienas konteinerio vaizdas su 2 kopijomis su dviem kopijomis, tai grupių tarnybos turės paskirstyti šias pod-replica poras darbuotojams.

kas yra abstrakcija java su pavyzdžiu

„Kubernetes Cluster“ - „Kubernetes Networking“ - „Edureka“



Žr. Pirmiau pateiktą diagramą. Dabar, kai matote, kad klasterio tarnybos paskyrė pirmąjį darbuotoją su dviem porų kopijų poromis, antrąjį - su viena pod-replica pora ir trečiąjį darbuotoją su dviem pod-replica poromis. Dabar „Kubelet“ procesas yra atsakingas už ryšius su darbuotojais.

Taigi visa ši grupių paslaugų sąranka ir patys darbuotojai tai sudaro „Kubernetes“ klasteris !!

Kaip manote, kaip šios individualiai paskirtos ankštys bendrauja tarpusavyje?

Atsakymas slypi „Kubernetes Networking“!

Norėdami gauti naujienų, užsiprenumeruokite mūsų „YouTube“ kanalą!

Daugiausia reikia išspręsti 4 tinklo problemas.

  • Konteinerių ir konteinerių ryšys
  • „Pod to pod“ bendravimas
  • „Pod to service“ ryšys
  • Išorinis paslaugų ryšys

Leiskite man papasakoti, kaip minėtos problemos išsprendžiamos naudojant „Kubernetes Networking“.

„Kubernetes Networking“

Ryšys tarp podų, paslaugų ir išorinių paslaugų su grupėje esančiomis įmonėmis atneša „Kubernetes“ tinklo koncepciją.

Taigi, kad geriau suprastumėte, leiskite man suskirstyti sąvokas taip.

  • Ankštys ir konteinerių bendravimas
  • Paslaugos
  • Išorės prijungimas prie paslaugų per patekimo tinklą

Ankštys ir konteinerių bendravimas

Prieš pasakodamas, kaip ankštys bendrauja, leiskite jums pristatyti, kas yra ankštys?

Ankštys

Pods yra pagrindiniai „Kubernetes“ programų vienetai, kuriuos sudaro vienas ar keli konteineriai, skirti tam pačiam pagrindiniam kompiuteriui, kad būtų galima bendrai naudoti tinklo kaminą ir kitus išteklius. Taigi, tai reiškia, kad visi konteineriai dėžutėje gali pasiekti kitus vietiniame šeimininke.

Leiskite man trumpai papasakoti, kaip šios ankštys bendrauja?

Yra 2 bendravimo tipai. The tarp mazgų komunikacija ir vidinis mazgas.

Taigi, pradėkime nuo vidinio mazgo ryšio, bet prieš tai leiskite jums pristatyti pod tinklo komponentus.

Vidinis mazgas tinkle

Vidinis mazgų tinklų tinklas iš esmės yra ryšys tarp dviejų skirtingų mazgų toje pačioje dėžutėje. Leiskite man paaiškinti jus pavyzdžiu.

Tarkime, kad paketas eina nuo pod1 iki pod2.

  • Paketas palieka Pod 1 tinklą ties eth0 ir patenka į šakninį tinklą ties veth0
  • Tada paketas pereina ant „Linux“ tilto (cbr0), kuris atranda tikslą naudodamas ARP užklausą
  • Taigi, jei „veth1“ turi IP, tiltas dabar žino, kur persiųsti paketą.

Dabar, panašiai, leiskite man papasakoti apie tarpmazginių tinklų ryšį.

Domina mokymasis „Kubernetes“?
Tarpinis mazgas po tinklu

Apsvarstykite du mazgus, turinčius įvairias tinklo vardų sritis, tinklo sąsajas ir „Linux“ tiltą.

Tarkime, kad paketas keliauja iš pod1 į pod4, kuris yra kitame mazge.

  • Paketas palieka 1 pod tinklą ir patenka į šakninį tinklą ties veth0
  • Tada paketas pereina į „Linux“ tiltą (cbr0), kurio pareiga yra pateikti ARP užklausą, kad surastų paskirties vietą.
  • Kai tiltas supranta, kad šis paketas neturi paskirties adreso, paketas grįžta į pagrindinę tinklo sąsają eth0.
  • Dabar paketas palieka mazgą 1, kad rastų paskirties vietą kitame mazge, ir įveda maršruto lentelę, kuri nukreipia paketą į mazgą, kurio CIDR bloke yra pod4.
  • Taigi, dabar paketas pasiekia mazgą2, o tada tiltas paima paketą, kuris pateikia ARP užklausą, kad sužinotų, ar IP priklauso veth0.
  • Galiausiai paketas kerta vamzdžių porą ir pasiekia pod4.

Taigi, taip ankštys bendrauja tarpusavyje. Dabar eikime toliau ir sužinokime, kaip paslaugos padeda bendrauti su ankštimis.

Taigi, kaip manote, kokios yra paslaugos?

Paslaugos

Iš esmės, paslaugos yra išteklių tipas, kuris sukonfigūruoja tarpinį serverį persiųsti užklausas į grupių rinkinį, kuris priims srautą ir kurį nustato pasirinkiklis. Sukūrus paslaugą, ji turi priskirtą IP adresą, kuris priims užklausas uoste.

Dabar yra įvairių tipų paslaugų, kurios suteikia galimybę atskleisti paslaugą už jūsų klasterio IP adreso ribų.

Paslaugų rūšys

Daugiausia yra 4 rūšių paslaugos.

ClusterIP: Tai yra numatytasis paslaugos tipas, kuris atskleidžia paslaugą sankaupos vidiniame IP, padarydamas paslaugą pasiekiamą tik grupėje.

„NodePort“: Tai atskleidžia paslaugą kiekvieno mazgo IP statiniame prievade. Kadangi, a ClusterIP paslauga, į kurią nukreipia „NodePort“ paslauga, yra automatiškai sukurta. Mes galime susisiekti su „NodePort“ tarnyba už klasterio ribų.

„LoadBalancer“: Tai yra paslaugos tipas, kuris išoriškai atskleidžia paslaugą naudodamas debesies teikėjo apkrovos balansavimo priemonę. Taigi, „NodePort“ ir „ClusterIP“ paslaugos, į kurias nukreips išorinis apkrovos balanseris, bus automatiškai sukurtos.

ExternalName : Šis paslaugos tipas susieja paslaugą su externalName lauką grąžinant a CNAME įrašas su jo verte.

Taigi, vaikinai, viskas buvo apie paslaugas. Dabar jums gali būti įdomu, kaip išorinės tarnybos prisijungia prie šių tinklų?

Na, tai ne kas kitas, o „Ingress Network“ .

„Ingress Network“

Na, „Ingress“ tinklas yra galingiausias paslaugų atskleidimo būdas, nes tai yra taisyklių rinkinys, leidžiantis įeinančius ryšius, kuriuos galima sukonfigūruoti teikiant paslaugas išoriškai per pasiekiamus URL. Taigi, jis iš esmės veikia kaip įvesties taškas į „Kubernetes“ klasterį, valdantį išorinę prieigą prie klasterio paslaugų.

Leiskite man paaiškinti jums pavyzdį, kaip veikia „Ingress Network“.

Mes turime 2 mazgus, turinčius „pod“ ir „root“ tinklo vardų sritis su „Linux“ tiltu. Be to, mes taip pat turime naują virtualaus tinklo įrenginį, vadinamą „flannel0“ (tinklo papildinys), pridėtą prie šakninio tinklo.

Dabar mes norime, kad paketas tekėtų nuo 1 iki 4.

  • Taigi, paketas palieka pod1 tinklą ties eth0 ir patenka į šakninį tinklą ties veth0.
  • Tada jis perduodamas „cbr0“, kuris pateikia ARP užklausą rasti tikslą, o vėliau sužino, kad niekas šiame mazge neturi paskirties IP adreso.
  • Taigi, tiltas siunčia paketą į „flannel0“, nes mazgo maršruto lentelė sukonfigūruota su „flannel0“.
  • Dabar „flanel“ deemonas tariasi su „Kubernetes“ API serveriu, kad žinotų visus „IP“ IP ir jų atitinkamus mazgus, kad sukurtų „IP“ susiejimus su mazgų IP.
  • Tinklo papildinys suvynioja šį paketą į UDP paketą su papildomomis antraštėmis, pakeisdamas šaltinio ir paskirties IP į savo atitinkamus mazgus, ir išsiunčia šį paketą per eth0.
  • Kadangi maršruto lentelė jau žino, kaip nukreipti srautą tarp mazgų, ji siunčia paketą į paskirties mazgą2.
  • Paketas patenka į 2 mazgo eth0 ir grįžta į flanelį0, kad išjungtų kapsulę, ir išmeta jį atgal į šakninio tinklo vardų sritį.
  • Vėlgi, paketas persiunčiamas į „Linux“ tiltą, kad būtų pateiktas ARP prašymas sužinoti veth1 priklausantį IP.
  • Paketas galiausiai kerta šaknų tinklą ir pasiekia paskirties Pod4.

Taigi, išorinės paslaugos yra sujungtos patekusio tinklo pagalba. Dabar, kai kalbėjau apie tinklo papildinius, leiskite jums pristatyti jums prieinamų populiarių tinklo papildinių sąrašą.

Dabar, kai aš jums tiek daug pasakojau apie „Kubernetes Networking“, leiskite jums parodyti realaus gyvenimo pavyzdį.

Atvejo analizė: Turto vedlys, naudojant „Kubernetes“ tinklą

„Wealth Wizards“ yra internetinė finansinio planavimo platforma, apjungianti finansų planavimą ir išmanią programinės įrangos technologiją, kad ekspertų patarimai būtų prieinami už prieinamą kainą.

Iššūkiai

Dabar įmonei buvo nepaprastai svarbu greitai atrasti ir pašalinti kodo pažeidžiamumą, visiškai matant debesies aplinką, tačiau norėjo kontroliuoti srautą taikant prieigos apribojimus.

Taigi, jie naudojo „Kubernetes“ infrastruktūrą, kad valdytų grupių parengimą ir paleidimą, naudodamiesi įrankiais, kurie valdytų mikropaslaugų diegimą ir konfigūravimą visuose „Kube“ klasteriuose.

Jie taip pat naudojo „Kubernetes“ tinklo politikos funkciją, kad leistų valdyti srautą taikant prieigos apribojimus.

Dabar kilo problema, kad ši politika yra orientuota į taikomąją programą ir gali vystytis tik kartu su programomis, tačiau nebuvo jokio komponento, užtikrinančio šios politikos vykdymą.

Taigi vienintelis sprendimas, kurį bendrovė galėjo rasti, buvo naudoti tinklo papildinį, todėl jie pradėjo naudoti „Weave Net“.

Sprendimas

Šis tinklo papildinys sukuria virtualų tinklą, kuriame yra tinklo strategijos valdiklis, skirtas valdyti ir vykdyti „Kubernetes“ taisykles. Negana to, jis taip pat sujungia „Docker“ konteinerius keliuose kompiuteriuose ir leidžia juos automatiškai surasti.

Taigi, tarkime, kad turite darbo krūvį klasteryje ir norite sustabdyti bet kokį kitą klasterio krūvį kalbėdami su juo. Tai galite pasiekti sukūrę tinklo politiką, kuri riboja prieigą ir leidžia ją patekti tik per įėjimo valdiklį konkrečiame prievade.

Dabar, kai jis įdiegiamas kiekviename „Kubernetes“ mazge, papildinys valdo „inter-pod“ maršrutą ir gali manipuliuoti „IPtables“ taisyklėmis. Paprastai tariant, kiekviena politika yra konvertuojama į „IPtables“ taisyklių rinkinį, suderintą ir sukonfigūruotą kiekvienoje mašinoje, kad būtų galima išversti „Kubernetes“ žymas.

Gerai, dabar, kai perėjai tiek daug teorijos apie „Kubernetes Networking“, leisk man parodyti, kaip tai daroma praktiškai.

Rankos

Taigi, darant prielaidą, kad visi jūs įdiegėte „Kubernetes“ savo sistemose, turiu parodyti scenarijų.

Tarkime, kad norite išsaugoti produkto pavadinimą ir produkto ID, tam jums reikės žiniatinklio programos. Iš esmės jums reikia vieno konteinerio žiniatinklio programoms ir dar vieno konteinerio kaip „MySQL“ programinei įrangai, ir tas „MySQL“ konteineris turėtų būti susietas su žiniatinklio programų konteineriu.

Kaip aš praktiškai įgyvendinu aukščiau pateiktą pavyzdį.

Pradėkime!

1 žingsnis: Sukurkite aplanką norimame kataloge ir pakeiskite darbo aplanko kelią į tą aplanką.

mkdir HandsOn cd HandsOn /

2 žingsnis: Dabar sukurkite žiniatinklio programos ir „MySQL“ duomenų bazės diegimo YAML failus.

3 žingsnis: Sukūrę diegimo failus, įdiekite abi programas.

kubectl taikyti -f webapp.yml kubectl taikyti -f mysql.yml

3.1 žingsnis: Patikrinkite abu diegimus.

gauti dislokavimą

4 žingsnis: Dabar turite sukurti abiejų programų paslaugas.

kubectl taikyti -f žiniatinklio tarnyba.yml kubectl taikyti -f sqlservice.yml

4.1 žingsnis: Kai paslaugos bus sukurtos, įdiekite jas.

4.2 žingsnis: Patikrinkite, ar paslaugos buvo sukurtos, ar ne.

kubectl gauti paslaugą

5 žingsnis: Dabar patikrinkite veikiančių ankščių konfigūraciją.

kubectl gauti ankštys

6 žingsnis: Eikite į talpyklą, esančią žiniatinklio programos ankštyje.

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

6.1 žingsnis : Dabar pakeiskite $ serverio vardas nuo localhost iki SQL paslaugos pavadinimo, kuris yra „ „webapp-sql1“ “Šiuo atveju ir $ slaptažodis iš į ' edureka “. Taip pat užpildykite visą reikalingą duomenų bazės informaciją ir išsaugokite savo index.php failą naudodami sparčiuosius klavišus „Ctrl“ + x o po to spaudos Y išsaugoti ir paspausti įveskite .

7 žingsnis: Dabar eikite į „MySQL“ konteinerį, esantį pakuotėje.

kubectl exec it container_id bash

7.1 žingsnis: Gaukite prieigą prie „MySQL“ konteinerio naudojimo.

mysql -u šaknis -p edureka

Kur -u reiškia vartotoją, o -p yra jūsų mašinos slaptažodis.

7.2 žingsnis: Sukurkite „MySQL“ duomenų bazę, kuri bus naudojama norint gauti duomenis iš žiniatinklio programos.

SUKURTI DUOMENŲ BAZE Produkto duomenys

7.3 žingsnis: Naudokite sukurtą duomenų bazę.

NAUDOTI produkto informaciją

7.4 žingsnis: Sukurkite lentelę šioje „MySQL“ duomenų bazėje, kuri bus naudojama duomenims gauti iš „webapp“.

CREATE TABLE produktai (produkto_pavadinimas VARCHAR (10), product_id VARCHAR (11))

7.5 žingsnis: Dabar taip pat išeikite iš „MySQL“ konteinerio naudodami komandą išėjimas .

8 žingsnis: Patikrinkite prievado numerį, kuriame veikia jūsų žiniatinklio programa.

kubectl gauti paslaugas

8.1 žingsnis: Dabar atidarykite žiniatinklio programą jai paskirtu prievado numeriu.

9 žingsnis: Kai spustelėsite Pateikti užklausą , eikite į mazgą, kuriame veikia jūsų „MySQL“ paslauga, tada eikite į konteinerio vidų.

Tai parodys visų sąrašo produktų, kuriuos užpildėte, išsamią informaciją.

Domina mokymasis „Kubernetes“?

Jei radote šį „Kubernetes Networking“ tinklaraštį aktualų, patikrinkite sukūrė patikima internetinė mokymosi įmonė „Edureka“, turinti daugiau nei 250 000 patenkintų besimokančiųjų tinklą visame pasaulyje.