A felhőalapú számítástechnika egyre mélyebbre hatol az életünkbe, és valószínűleg nincs olyan ember, aki ne használt volna legalább egyszer semmilyen felhőszolgáltatást. Azt azonban, hogy mi is pontosan a felhő, és hogyan működik, kevesen tudják, még ötlet szintjén is. Az 5G már valósággá válik, és a távközlési infrastruktúra a pole-megoldásoktól a felhőmegoldások felé kezd elmozdulni, akárcsak akkor, amikor a teljesen hardveres megoldásokról a virtualizált „pillérek” felé mozdult el.
Ma a felhő infrastruktúra belső világáról fogunk beszélni, különös tekintettel a hálózati rész alapjaira.
Mi az a felhő? Ugyanaz a virtualizáció - profilnézet?
Több mint logikus kérdés. Nem – ez nem virtualizáció, bár enélkül nem is lehetne. Nézzünk két definíciót:
Cloud computing (a továbbiakban: felhő) egy olyan modell, amely felhasználóbarát hozzáférést biztosít az elosztott számítási erőforrásokhoz, amelyeket igény szerint kell telepíteni és elindítani a lehető legalacsonyabb késleltetéssel és minimális költséggel a szolgáltató számára.
Virtualizáció - ez az a lehetőség, hogy egy fizikai entitást (például egy szervert) több virtuálisra osztunk, ezzel növeljük az erőforrások kihasználtságát (például 3 szerverünk volt 25-30 százalékos terheléssel, virtualizáció után 1 szerver töltődik be 80-90 százalékon). Természetesen a virtualizáció felemészti az erőforrások egy részét - meg kell táplálnia a hipervizort, de a gyakorlat szerint a játék megéri a gyertyát. Ideális példa a virtualizációra a virtuális gépeket tökéletesen előkészítő VMWare, vagy például a KVM, amit én preferálok, de ez ízlés dolga.
A virtualizációt anélkül használjuk, hogy észrevennénk, és már a vas útválasztók is használják a virtualizációt – például a JunOS legújabb verziójában az operációs rendszer virtuális gépként van telepítve egy valós idejű Linux disztribúció (Wind River 9) tetejére. De a virtualizáció nem a felhő, hanem a felhő nem létezhet virtualizáció nélkül.
A virtualizáció az egyik építőelem, amelyre a felhő épül.
Felhő létrehozása egyszerűen több hypervisor összegyűjtésével egy L2 tartományba, néhány yaml-játékkönyv hozzáadásával a vlan-ek automatikus regisztrálásához valamilyen lehetséges eszközön keresztül, és valami hangszerelési rendszert belezavarva az egészbe a virtuális gépek automatikus létrehozása érdekében. Pontosabb lesz, de az eredményül kapott Frankenstein nem az a felhő, amelyre szükségünk van, bár lehet, hogy mások számára ez a végső álom. Sőt, ha ugyanazt az Openstacket vesszük, akkor az lényegében még mindig Frankenstein, de na jó, erről most ne beszéljünk.
De megértem, hogy a fent bemutatott definícióból nem teljesen világos, mit nevezhetünk valójában felhőnek.
Ezért a NIST (Nemzeti Szabványügyi és Technológiai Intézet) dokumentuma 5 fő jellemzőt tartalmaz, amelyekkel egy felhő infrastruktúrának rendelkeznie kell:
Igény szerint szolgáltatást nyújtunk. A felhasználó számára ingyenes hozzáférést kell biztosítani a számára kiosztott számítógépes erőforrásokhoz (például hálózatokhoz, virtuális lemezekhez, memóriához, processzormagokhoz stb.), és ezeket az erőforrásokat automatikusan – vagyis a szolgáltató beavatkozása nélkül – kell biztosítani.
A szolgáltatás széles körű elérhetősége. Az erőforrásokhoz való hozzáférést szabványos mechanizmusokkal kell biztosítani, amelyek lehetővé teszik mind a szabványos PC-k, mind a vékonykliensek és mobileszközök használatát.
Erőforrások egyesítése poolokba. Az erőforráskészleteknek képesnek kell lenniük arra, hogy egyidejűleg több ügyfél számára is biztosítsanak erőforrásokat, biztosítva, hogy az ügyfelek elszigeteltek legyenek, és mentesek legyenek az erőforrásokért folytatott kölcsönös befolyástól és versenytől. Hálózatok is szerepelnek a poolokban, ami jelzi az átfedő címzés alkalmazásának lehetőségét. A medencéknek igény szerint méretezhetőnek kell lenniük. A poolok használata lehetővé teszi a szükséges szintű erőforrás-hibatűrést, valamint a fizikai és virtuális erőforrások absztrakcióját - a szolgáltatás igénybevevője egyszerűen megkapja az általa kért erőforráskészletet (az erőforrások fizikailag hol találhatók, hányan szerverek és kapcsolók – ez a kliens számára nem számít). Figyelembe kell azonban venni azt a tényt, hogy a szolgáltatónak biztosítania kell ezen erőforrások átlátható lefoglalását.
Gyors alkalmazkodás a különböző körülményekhez. A szolgáltatásoknak rugalmasnak kell lenniük - az erőforrások gyors biztosítása, újraelosztása, erőforrások hozzáadása vagy csökkentése az ügyfél kérésére, és az ügyfél részéről érezni kell, hogy a felhő erőforrások végtelenek. A könnyebb érthetőség kedvéért például nem lát figyelmeztetést arra vonatkozóan, hogy az Apple iCloudban lévő lemezterület egy része eltűnt, mert a kiszolgáló merevlemeze meghibásodott, és a meghajtók meghibásodnak. Ráadásul az Ön részéről ennek a szolgáltatásnak a lehetőségei szinte korlátlanok - 2 TB kell - nem probléma, kifizette és megkapta. Hasonló példa a Google.Drive vagy a Yandex.Disk.
Lehetőség a nyújtott szolgáltatás mérésére. A felhőrendszereknek automatikusan ellenőrizniük és optimalizálniuk kell a felhasznált erőforrásokat, és ezeknek a mechanizmusoknak átláthatóknak kell lenniük mind a felhasználó, mind a szolgáltató számára. Vagyis mindig ellenőrizheti, hogy Ön és ügyfelei mennyi erőforrást fogyasztanak.
Érdemes megfontolni azt a tényt, hogy ezek a követelmények többnyire egy nyilvános felhőre vonatkoznak, így egy privát felhő (vagyis a vállalat belső igényeire indított felhő) esetében ezek a követelmények némileg módosíthatók. Ezeket azonban még meg kell tenni, különben nem fogjuk kihasználni a számítási felhő minden előnyét.
Miért van szükségünk felhőre?
Azonban minden új vagy meglévő technológia, bármilyen új protokoll létrejön valamire (na persze, kivéve a RIP-ng-t). Senkinek sem kell protokoll a protokoll kedvéért (na persze, kivéve a RIP-ng-t). Logikus, hogy a felhő azért jön létre, hogy valamilyen szolgáltatást nyújtson a felhasználónak/ügyfélnek. Mindannyian ismerünk legalább néhány felhőszolgáltatást, például a Dropboxot vagy a Google.Docs-t, és úgy gondolom, hogy a legtöbben sikeresen használják őket – például ez a cikk a Google.Docs felhőszolgáltatás használatával készült. De az általunk ismert felhőszolgáltatások csak egy részét képezik a felhő képességeinek – pontosabban csak egy SaaS-típusú szolgáltatás. Háromféleképpen tudunk felhőszolgáltatást nyújtani: SaaS, PaaS vagy IaaS formájában. Az, hogy milyen szolgáltatásra van szüksége, az Ön vágyaitól és képességeitől függ.
Nézzük meg mindegyiket sorrendben:
Szoftver mint szolgáltatás (SaaS) egy olyan modell, amely teljes körű szolgáltatást nyújt az ügyfélnek, például egy e-mail szolgáltatást, mint a Yandex.Mail vagy a Gmail. Ebben a szolgáltatásnyújtási modellben Ön, mint ügyfél, tulajdonképpen nem tesz mást, csak használja a szolgáltatásokat – vagyis nem kell a szolgáltatás beállításán, hibatűrésén, redundanciáján gondolkodnia. A legfontosabb dolog az, hogy ne veszélyeztesse jelszavát, a többit a szolgáltatás szolgáltatója elvégzi Ön helyett. A szolgáltató szemszögéből teljes mértékben ő felel a teljes szolgáltatásért - a szerver hardverétől és a host operációs rendszertől az adatbázis- és szoftverbeállításokig.
Platform mint szolgáltatás (PaaS) — ennek a modellnek a használatakor a szolgáltató a kliens számára munkadarabot biztosít a szolgáltatáshoz, például vegyünk egy webszervert. A szolgáltató biztosította a klienst egy virtuális szervert (valójában egy erőforráskészletet, pl. RAM/CPU/Storage/Nets stb.), sőt erre a szerverre telepítette az operációs rendszert és a szükséges szoftvereket is, azonban a mindezt az ügyfél maga végzi el, és a szolgáltatás teljesítéséhez az ügyfél válaszol. A szolgáltató az előző esethez hasonlóan felelős a fizikai berendezések, hipervizorok, magának a virtuális gépnek a teljesítményéért, hálózati elérhetőségéért stb., de maga a szolgáltatás már nem tartozik a felelősségi körébe.
Infrastruktúra mint szolgáltatás (IaaS) - ez a megközelítés már érdekesebb, sőt, a szolgáltató egy komplett virtualizált infrastruktúrát biztosít a kliensnek - vagyis valamilyen erőforráskészletet (készletet), például CPU magokat, RAM-ot, hálózatokat, stb. az ügyfél - hogy az ügyfél mit akar kezdeni ezekkel az erőforrásokkal a lefoglalt készleten (kvótán) belül - ez nem különösebben fontos a szállító számára. Függetlenül attól, hogy az ügyfél saját vEPC-t szeretne létrehozni, vagy akár egy mini operátort és kommunikációs szolgáltatásokat kíván nyújtani - nem kérdés - tegye meg. Ebben az esetben a szolgáltató felelős az erőforrások rendelkezésre bocsátásáért, hibatűréséért és rendelkezésre állásáért, valamint az operációs rendszerért, amely lehetővé teszi számukra az erőforrások összevonását és elérhetővé tételét az ügyfél számára, és bármikor növelheti vagy csökkentheti az erőforrásokat. az ügyfél kérésére. Az ügyfél maga konfigurálja az összes virtuális gépet és a többi elemet az önkiszolgáló portálon és a konzolon keresztül, beleértve a hálózatok beállítását (a külső hálózatok kivételével).
Mi az az OpenStack?
Mindhárom lehetőség esetén a szolgáltatónak olyan operációs rendszerre van szüksége, amely lehetővé teszi a felhő infrastruktúra létrehozását. Valójában a SaaS-nél több részleg felelős a technológia teljes kötegéért - van egy részleg, amely az infrastruktúráért felelős -, vagyis az IaaS-t egy másik részlegnek biztosítja, ez a részleg biztosítja a SaaS-t az ügyfélnek. Az OpenStack az egyik felhőalapú operációs rendszer, amely lehetővé teszi, hogy egy csomó kapcsolót, kiszolgálót és tárolórendszert egyetlen erőforráskészletbe gyűjtsön, ezt a közös készletet alkészletekre (bérlőkre) ossza fel, és ezeket az erőforrásokat a hálózaton keresztül biztosítsa az ügyfeleknek.
OpenStack egy felhőalapú operációs rendszer, amely lehetővé teszi a számítási erőforrások, adattárolás és hálózati erőforrások nagy készleteinek vezérlését, amelyeket API-n keresztül biztosítanak és kezelnek szabványos hitelesítési mechanizmusok segítségével.
Más szavakkal, ez egy ingyenes szoftverprojektek készlete, amelyet felhőszolgáltatások létrehozására terveztek (nyilvános és privát) - vagyis olyan eszközkészletet, amely lehetővé teszi a szerver és a kapcsolóberendezések egyetlen erőforráskészletbe történő kombinálását, kezelését. ezeket az erőforrásokat, biztosítva a szükséges hibatűrési szintet.
Az anyag írásakor az OpenStack szerkezete így nézett ki:
Az OpenStack minden egyes összetevője meghatározott funkciót lát el. Ez az elosztott architektúra lehetővé teszi, hogy a megoldásba belefoglalja a szükséges funkcionális összetevőket. Egyes összetevők azonban gyökérkomponensek, és eltávolításuk a megoldás egészének teljes vagy részleges működésképtelenségéhez vezet. Ezeket az összetevőket általában a következőképpen osztályozzák:
Műszerfal — Webalapú grafikus felhasználói felület az OpenStack szolgáltatások kezeléséhez
Zárókő egy központosított identitásszolgáltatás, amely hitelesítési és engedélyezési funkciókat biztosít más szolgáltatásokhoz, valamint kezeli a felhasználói hitelesítő adatokat és szerepköreiket.
Neutron - hálózati szolgáltatás, amely kapcsolatot biztosít a különböző OpenStack szolgáltatások interfészei között (beleértve a virtuális gépek közötti kapcsolatot és azok külvilághoz való hozzáférését)
salak — hozzáférést biztosít a virtuális gépek blokktárhelyéhez
Nova — virtuális gépek életciklus-kezelése
Pillantás — virtuális gép képeinek és pillanatképeinek tárháza
Gyors — hozzáférést biztosít a tárolóobjektumhoz
felhőalap-mérő berendezés — olyan szolgáltatás, amely lehetővé teszi a telemetria összegyűjtését és a rendelkezésre álló és felhasznált erőforrások mérését
Hőség — az erőforrások automatikus létrehozására és rendelkezésre bocsátására szolgáló sablonokon alapuló hangszerelés
Az összes projekt és céljuk teljes listája megtekinthető itt.
Minden OpenStack-összetevő egy adott funkciót végrehajtó szolgáltatás, és API-t biztosít a funkció kezeléséhez, valamint más felhőalapú operációs rendszer szolgáltatásaival való interakcióhoz, hogy egységes infrastruktúrát hozzon létre. Például a Nova számítási erőforrás-kezelést és API-t biztosít az erőforrások konfigurálásához, a Glance képkezelést és API-t biztosít ezek kezeléséhez, a Cinder blokktárolást és API-t biztosít ezek kezelésére stb. Minden funkció nagyon szorosan kapcsolódik egymáshoz.
Ha azonban megnézzük, az OpenStackben futó összes szolgáltatás végső soron valamilyen virtuális gép (vagy konténer), amely a hálózathoz kapcsolódik. Felmerül a kérdés – miért van szükségünk ennyi elemre?
Végezzük el a virtuális gép létrehozásának algoritmusát, majd az Openstackben a hálózathoz és a perzisztens tárolóhoz való csatlakoztatását.
Amikor kérelmet hoz létre egy gép létrehozására, legyen az egy kérés a Horizonon keresztül (irányítópulton) vagy egy kérés a CLI-n keresztül, az első dolog, ami történik, a kérés engedélyezése a Keystone-on – tud-e létrehozni egy gépet, rendelkezik-e a hálózat használati joga, a kvótatervezete stb.
A Keystone hitelesíti a kérést, és létrehoz egy hitelesítési tokent a válaszüzenetben, amelyet a továbbiakban felhasználunk. Miután megkapta a választ a Keystone-tól, a kérést elküldi a Nova (nova api) felé.
A Nova-api ellenőrzi kérésének érvényességét úgy, hogy kapcsolatba lép a Keystone-nal a korábban generált hitelesítési token használatával
A Keystone hitelesítést hajt végre, és ezen a hitelesítési jogkivonat alapján ad tájékoztatást az engedélyekről és korlátozásokról.
A Nova-api bejegyzést hoz létre az új virtuális géphez a nova-adatbázisban, és átadja a gép létrehozására vonatkozó kérést a nova-schedulernek.
A Nova-scheduler a megadott paraméterek, súlyok és zónák alapján kiválasztja azt a gazdagépet (számítógép-csomópontot), amelyen a virtuális gép üzembe kerül. Ennek rekordja és a virtuális gép azonosítója a nova-adatbázisba kerül.
Ezután a nova-scheduler felveszi a kapcsolatot a nova-compute-val egy példány telepítésére vonatkozó kéréssel. A Nova-compute felveszi a kapcsolatot a nova-conductorral, hogy információkat szerezzen a gép paramétereiről (a nova-conductor egy nova elem, amely proxyszerverként működik a nova-database és a nova-compute között, korlátozva a nova-adatbázisra irányuló kérések számát az adatbázissal kapcsolatos problémák elkerülése érdekében konzisztencia terhelés csökkentése).
A Nova-conductor megkapja a kért információkat a nova-adatbázisból és továbbítja a nova-compute-nak.
Ezután a nova-compute hívások egy pillantást vetve megkapják a képazonosítót. A Glace érvényesíti a kérést a Keystone-ban, és visszaküldi a kért információkat.
A Nova-compute kapcsolatba lép a neutronokkal, hogy információkat szerezzen a hálózati paraméterekről. Hasonlóan a pillantáshoz, a neutron a Keystone-ban érvényesíti a kérést, majd létrehoz egy bejegyzést az adatbázisban (portazonosító stb.), létrehoz egy port létrehozására vonatkozó kérést, és visszaküldi a kért információkat a nova-compute-nak.
A Nova-compute felveszi a kapcsolatot azzal a kéréssel, hogy rendeljen hozzá kötetet a virtuális géphez. A pillantáshoz hasonlóan a cider is érvényesíti a kérést a Keystone-ban, létrehoz egy kötetlétrehozási kérelmet, és visszaadja a kért információkat.
A Nova-compute felveszi a kapcsolatot a libvirttel egy virtuális gép üzembe helyezését kérve a megadott paraméterekkel.
Valójában egy egyszerű virtuális gép létrehozásának látszólag egyszerű művelete a felhőplatform elemei közötti API-hívások ilyen örvényévé válik. Sőt, amint látható, még a korábban kijelölt szolgáltatások is kisebb komponensekből állnak, amelyek között interakció jön létre. Egy gép létrehozása csak egy kis része annak, amit a felhőplatform lehetővé tesz – van egy szolgáltatás, amely felelős a forgalom kiegyenlítéséért, egy szolgáltatás, amely a blokktárolásért felelős, egy szolgáltatás, amely a DNS-ért felelős, egy szolgáltatás, amely a csupasz fém szerverek kiépítéséért felelős stb. A felhő lehetővé teszi, hogy virtuális gépeit birkacsordaként kezelje (a virtualizációval ellentétben). Ha valami történik a gépeddel virtuális környezetben - visszaállítod biztonsági mentésekből stb., de a felhőalkalmazások úgy vannak felépítve, hogy a virtuális gép ne töltsön olyan fontos szerepet - a virtuális gép „meghalt” - nem probléma - most készül egy új, a jármű a sablon alapján készült, és ahogy mondják, az osztag nem vette észre a harcos elvesztését. Természetesen ez biztosítja a hangszerelési mechanizmusok jelenlétét - a Heat sablonok segítségével könnyedén telepíthet egy több tucat hálózatból és virtuális gépből álló összetett funkciót.
Mindig érdemes szem előtt tartani, hogy nincs felhő infrastruktúra hálózat nélkül - minden elem így vagy úgy kölcsönhatásba lép a többi elemmel a hálózaton keresztül. Ezenkívül a felhőnek abszolút nem statikus hálózata van. Természetesen az alátámasztó hálózat többé-kevésbé statikus - nem minden nap adnak hozzá új csomópontokat és kapcsolókat, de az overlay komponens elkerülhetetlenül folyamatosan változhat és változni fog - új hálózatok kerülnek hozzáadásra vagy törlésre, új virtuális gépek jelennek meg és a régiek meghal. És ahogy a cikk legelején megadott felhő definícióból is emlékszik, az erőforrásokat automatikusan és a szolgáltató legkevesebb (vagy jobb esetben) beavatkozása nélkül kell a felhasználóhoz rendelni. Vagyis az a típusú hálózati erőforrás-szolgáltatás, amely jelenleg front-end formájában létezik, a http/https-n keresztül elérhető személyes fiók és az ügyeletes Vaszilij hálózati mérnök mint háttérrendszer formájában, nem felhő, ha Vaszilijnak nyolc keze van.
A Neutron hálózati szolgáltatásként API-t biztosít a felhő infrastruktúra hálózati részének kezeléséhez. A szolgáltatás egy Network-as-a-Service (NaaS) nevű absztrakciós réteg biztosításával hatalmazza fel és kezeli az Openstack hálózati részét. Vagyis a hálózat ugyanaz a virtuális mérhető egység, mint például a virtuális CPU magok vagy a RAM mennyisége.
Mielőtt azonban rátérnénk az OpenStack hálózati részének architektúrájára, nézzük meg, hogyan működik ez a hálózat az OpenStackben, és miért a hálózat fontos és szerves része a felhőnek.
Tehát két RED kliens virtuális gépünk és két GREEN kliens virtuális gépünk van. Tegyük fel, hogy ezek a gépek két hipervizoron helyezkednek el, így:
Jelenleg ez csak 4 szerver virtualizálása és semmi több, hiszen eddig csak 4 szervert virtualizáltunk, két fizikai szerverre helyezve. És eddig még csak nem is kapcsolódnak a hálózathoz.
Felhő létrehozásához több összetevőt kell hozzáadnunk. Először a hálózati részt virtualizáljuk – ezt a 4 gépet párban kell összekötnünk, és a kliensek L2 kapcsolatot akarnak. Használhat egy kapcsolót és konfigurálhat egy fővonalat az irányába, és mindent megoldhat egy linux híddal, vagy haladóbb felhasználók számára az openvswitch segítségével (erre később visszatérünk). De sok hálózat lehet, és nem a legjobb ötlet az L2-t folyamatosan nyomni egy switch-en keresztül - vannak különböző részlegek, szervizpult, hónapokig tartó várakozás az alkalmazás befejezésére, hetekig tartó hibaelhárítás - a modern világban ez megközelítés már nem működik. És minél előbb megérti ezt egy cég, annál könnyebben léphet előre. Ezért a hipervizorok között kiválasztunk egy L3 hálózatot, amelyen keresztül a virtuális gépeink kommunikálnak, és ezen az L3-as hálózaton virtuális L2 overlay hálózatokat építünk, ahol virtuális gépeink forgalma futni fog. Beágyazásként használhatja a GRE-t, a Geneve-t vagy a VxLAN-t. Most inkább az utóbbira koncentráljunk, bár ez nem különösebben fontos.
Valahol meg kell találnunk a VTEP-t (remélem mindenki ismeri a VxLAN terminológiát). Mivel egy L3-as hálózatunk közvetlenül a szerverekről érkezik, semmi sem akadályoz meg bennünket abban, hogy a VTEP-t magukon a szervereken helyezzük el, és az OVS (OpenvSwitch) kiválóan alkalmas erre. Ennek eredményeként ezt a tervet kaptuk:
Mivel a virtuális gépek közötti forgalmat fel kell osztani, a virtuális gépek felé irányuló portok eltérő VLAN-számmal rendelkeznek. A címkeszám csak egy virtuális kapcsolón belül játszik szerepet, hiszen VxLAN-ba tokozva könnyen eltávolíthatjuk, hiszen lesz VNI-nk.
Most már gond nélkül létrehozhatjuk számukra a gépeinket és a virtuális hálózatainkat.
De mi van akkor, ha a kliensnek van másik gépe, de más hálózaton van? Rootolásra van szükségünk a hálózatok között. Megvizsgálunk egy egyszerű lehetőséget, amikor központosított útválasztást használunk - vagyis a forgalmat speciális dedikált hálózati csomópontokon keresztül irányítják (jó, általában vezérlő csomópontokkal vannak kombinálva, így ugyanaz lesz).
Úgy tűnik, semmi bonyolult - a vezérlő csomóponton csinálunk egy híd interfészt, oda vezetjük a forgalmat, és onnan irányítjuk oda, ahol szükségünk van rá. De a probléma az, hogy a RED kliens a 10.0.0.0/24 hálózatot, a GREEN kliens pedig a 10.0.0.0/24 hálózatot szeretné használni. Azaz elkezdjük metszeni a címtereket. Ezen túlmenően az ügyfelek nem akarják, hogy más ügyfelek be tudjanak kapcsolódni belső hálózataikba, ami logikus. A hálózatok és a kliens adatforgalom szétválasztása érdekében mindegyikhez külön névteret rendelünk. A névtér valójában a Linux hálózati verem mása, vagyis a RED névtérben lévő kliensek teljesen el vannak szigetelve a GREEN névtérből származó kliensektől (jó, az ezen klienshálózatok közötti útválasztás az alapértelmezett névtéren keresztül vagy az upstream szállítóberendezéseken keresztül engedélyezett).
Vagyis a következő diagramot kapjuk:
Az L2 alagutak az összes számítási csomóponttól a vezérlőcsomóponthoz konvergálnak. csomópont, ahol ezeknek a hálózatoknak az L3 interfésze található, mindegyik külön külön névtérben.
A legfontosabbat azonban elfelejtettük. A virtuális gépnek szolgáltatást kell nyújtania a kliens számára, azaz rendelkeznie kell legalább egy külső interfésszel, amelyen keresztül elérhető. Vagyis ki kell mennünk a külvilágba. Itt különböző lehetőségek vannak. Tegyük a legegyszerűbb lehetőséget. Minden ügyfélhez egy hálózatot adunk, amely a szolgáltató hálózatában lesz érvényes, és nem fedi át más hálózatokat. A hálózatok keresztezhetik egymást, és különböző VRF-eket nézhetnek meg a szolgáltatói hálózat oldalán. A hálózati adatok az egyes kliensek névterében is élnek. Azonban továbbra is egyetlen fizikai (vagy kötés, ami logikusabb) interfészen keresztül jutnak ki a külvilágba. Az ügyfélforgalom elkülönítése érdekében a kifelé irányuló forgalmat a klienshez hozzárendelt VLAN-címkével látják el.
Ennek eredményeként a következő diagramot kaptuk:
Ésszerű kérdés, hogy miért nem készítenek átjárókat magukon a számítási csomópontokon? Ez nem nagy probléma, sőt, ha bekapcsolja az elosztott útválasztót (DVR), ez működni fog. Ebben a forgatókönyvben a legegyszerűbb lehetőséget fontolgatjuk egy központi átjáróval, amelyet alapértelmezés szerint használ az Openstack. A nagy terhelésű funkciókhoz elosztott útválasztót és gyorsítási technológiákat is fognak használni, mint például az SR-IOV és a Passthrough, de ahogy mondják, ez egy teljesen más történet. Először is foglalkozzunk az alap résszel, majd a részletekre térünk ki.
Valójában a rendszerünk már működőképes, de van néhány árnyalat:
Valahogy meg kell védenünk a gépeinket, vagyis szűrőt kell tenni a kapcsoló felületére a kliens felé.
Lehetővé teszi, hogy egy virtuális gép automatikusan megkapja az IP-címet, így nem kell minden alkalommal a konzolon keresztül bejelentkezni és regisztrálni a címet.
Kezdjük a gépvédelemmel. Ehhez használhatja a banális iptables-t, miért ne.
Vagyis most a topológiánk egy kicsit bonyolultabbá vált:
Menjünk tovább. Hozzá kell adnunk egy DHCP szervert. A legideálisabb hely az egyes kliensek DHCP-kiszolgálóinak megtalálásához a fent említett vezérlőcsomópont, ahol a névterek találhatók:
Van azonban egy kis probléma. Mi van, ha minden újraindul, és minden információ eltűnik a DHCP-n történő címbérlésről. Logikus, hogy a gépek új címeket kapnak, ami nem túl kényelmes. Itt két kiút van - vagy használj domain neveket, és minden klienshez adj hozzá egy DNS-kiszolgálót, akkor a cím nem lesz különösebben fontos számunkra (hasonlóan a k8s hálózati részéhez) - de a külső hálózatokkal van probléma, mivel címeket is ki lehet adni bennük DHCP-n keresztül - szinkronizálásra van szükség a felhőplatform DNS-szervereivel és egy külső DNS-szerverrel, ami véleményem szerint nem túl rugalmas, de teljesen lehetséges. Vagy a második lehetőség a metaadatok használata – vagyis a gépnek kiadott cím információinak mentése, hogy a DHCP szerver tudja, melyik címet adja ki a gépnek, ha a gép már kapott címet. A második lehetőség egyszerűbb és rugalmasabb, mivel lehetővé teszi további információk elmentését az autóról. Most adjuk hozzá az ügynök metaadatait a diagramhoz:
Egy másik kérdés, amelyet szintén érdemes megvitatni, az, hogy minden kliens egy külső hálózatot használhat, mivel a külső hálózatok, ha a teljes hálózaton érvényesnek kell lenniük, nehézkesek lesznek - folyamatosan ki kell osztani és ellenőrizni kell ezeknek a hálózatoknak a kiosztását. Nyilvános felhő létrehozásakor nagyon hasznos lesz az egyetlen külső előre konfigurált hálózat használatának lehetősége minden ügyfél számára. Ez megkönnyíti a gépek üzembe helyezését, mert nem kell címadatbázist keresnünk és egyedi címteret választanunk minden kliens külső hálózatához. Ezenkívül előzetesen regisztrálhatunk külső hálózatot, és a telepítéskor már csak külső címeket kell társítanunk a kliens gépekhez.
És itt a NAT segítségünkre van – csak lehetővé tesszük az ügyfelek számára, hogy az alapértelmezett névtéren keresztül hozzáférjenek a külvilághoz a NAT fordítással. Nos, itt van egy kis probléma. Ez akkor jó, ha a kliens szerver kliensként működik, és nem szerverként – vagyis inkább kezdeményez, mint fogadna kapcsolatokat. De nálunk ez fordítva lesz. Ebben az esetben meg kell csinálnunk a cél NAT-ot, hogy a forgalom fogadásakor a vezérlő csomópont megértse, hogy ez a forgalom az A kliens A virtuális gépére vonatkozik, ami azt jelenti, hogy NAT-fordítást kell végrehajtanunk egy külső címről, például 100.1.1.1-ről. .10.0.0.1, 100 belső címre. Ebben az esetben, bár minden kliens ugyanazt a hálózatot fogja használni, a belső elszigetelés teljesen megmarad. Vagyis dNAT-ot és sNAT-ot kell végrehajtanunk a vezérlőcsomóponton. Az, hogy egyetlen hálózatot használjon lebegő címekkel vagy külső hálózatokat, vagy mindkettőt egyszerre, attól függ, mit szeretne bevinni a felhőbe. Nem adunk hozzá lebegő címeket a diagramhoz, hanem elhagyjuk a korábban már hozzáadott külső hálózatokat - minden kliensnek saját külső hálózata van (a diagramon a külső interfészen vlan 200 és XNUMX-ként vannak feltüntetve).
Ennek eredményeként egy érdekes és egyben átgondolt megoldást kaptunk, amely bizonyos rugalmassággal rendelkezik, de még nincsenek hibatűrő mechanizmusai.
Először is, csak egy vezérlőcsomópontunk van - ennek meghibásodása az összes rendszer összeomlásához vezet. A probléma megoldásához legalább 3 csomópontból kell határozatképesnek lennie. Adjuk hozzá a diagramhoz:
Természetesen minden csomópont szinkronizálva van, és amikor egy aktív csomópont kilép, egy másik csomópont veszi át a feladatait.
A következő probléma a virtuális gép lemezei. Jelenleg ezeket maguk a hipervizorok tárolják, és a hipervizorral kapcsolatos problémák esetén az összes adatot elveszítjük - és a raid jelenléte itt nem segít, ha nem a lemezt, hanem az egész szervert veszítjük el. Ehhez létre kell hoznunk egy szolgáltatást, amely valamilyen tárhely kezelőfelületeként fog működni. Számunkra nem különösebben fontos, hogy milyen tároló lesz, de meg kell védenie adatainkat mind a lemez, mind a csomópont, esetleg az egész szekrény meghibásodásától. Itt több lehetőség is van - természetesen vannak SAN hálózatok Fibre Channel-lel, de legyünk őszinték - az FC már a múlt emléke - az E1 analógja a közlekedésben - igen, egyetértek, még mindig használják, de csak ott, ahol nélküle teljesen lehetetlen. Ezért 2020-ban nem telepítenék önként FC-hálózatot, tudván, hogy vannak más érdekesebb alternatívák. Bár mindenkinek a sajátja, lehetnek olyanok, akik úgy gondolják, hogy az FC a korlátaival együtt minden, amire szükségünk van – nem vitatkozom, mindenkinek megvan a maga véleménye. A legérdekesebb megoldás azonban véleményem szerint az SDS, például a Ceph használata.
A Ceph lehetővé teszi, hogy magas rendelkezésre állású adattárolási megoldást építsen fel egy csomó lehetséges biztonsági mentési lehetőséggel, kezdve a paritásellenőrzéssel rendelkező kódoktól (a raid 5-höz vagy a 6-hoz hasonlóan), a teljes adatreplikációig a különböző lemezekre, figyelembe véve a lemezek elhelyezkedését szerverek és szekrényekben lévő szerverek stb.
A Ceph felépítéséhez további 3 csomópontra van szükség. A tárolóval való interakció a hálózaton keresztül is megvalósul blokk-, objektum- és fájltárolási szolgáltatások segítségével. Adjunk hozzá tárhelyet a sémához:
Megjegyzés: létrehozhat hiperkonvergens számítási csomópontokat is – ez a koncepció több funkció egy csomóponton való kombinálásának koncepciója – például tárolás+számítás – anélkül, hogy speciális csomópontokat rendelnénk a ceph-tároláshoz. Ugyanazt a hibatűrő sémát kapjuk, mivel az SDS az általunk megadott foglalási szinttel fogja lefoglalni az adatokat. A hiperkonvergens csomópontok azonban mindig kompromisszumot jelentenek - mivel a tárolócsomópont nem csak melegíti a levegőt, ahogy első pillantásra tűnik (mivel nincsenek rajta virtuális gépek), hanem CPU erőforrásokat költ az SDS kiszolgálására (sőt, mindent csomópontok, lemezek stb. meghibásodása utáni replikáció és helyreállítás). Ez azt jelenti, hogy elveszíti a számítási csomópont teljesítményének egy részét, ha azt a tárolással kombinálja.
Ezeket a dolgokat valahogy kezelni kell – kell valami, amin keresztül gépet, hálózatot, virtuális útválasztót stb. hozhatunk létre. Ehhez adunk hozzá egy szolgáltatást a vezérlő csomóponthoz, amely műszerfalként fog működni – a kliens képes lesz csatlakozni ehhez a portálhoz a http/ https-en keresztül, és mindent megtehet, amire szüksége van (na jó, majdnem).
Ennek eredményeként ma már egy hibatűrő rendszerrel rendelkezünk. Ennek az infrastruktúrának minden elemét kezelni kell valahogy. Korábban már leírtuk, hogy az Openstack projektek halmaza, amelyek mindegyike sajátos funkciót lát el. Amint látjuk, több mint elég elem van, amelyeket konfigurálni és vezérelni kell. Ma a hálózati részről fogunk beszélni.
Neutron architektúra
Az OpenStackben a Neutron a felelős a virtuális gépek portjainak egy közös L2 hálózathoz való csatlakoztatásáért, a forgalomirányítás biztosításáért a különböző L2 hálózatokon található virtuális gépek között, valamint a kifelé irányításért, olyan szolgáltatásokat nyújtva, mint a NAT, Floating IP, DHCP stb.
Magas szinten a hálózati szolgáltatás (az alaprész) működése a következőképpen írható le.
A virtuális gép indításakor a hálózati szolgáltatás:
Létrehoz egy portot egy adott virtuális géphez (vagy portokhoz), és értesíti erről a DHCP szolgáltatást;
Új virtuális hálózati eszköz jön létre (a libvirt segítségével);
A virtuális gép csatlakozik az 1. lépésben létrehozott port(ok)hoz;
Furcsa módon a Neutron munkája olyan szabványos mechanizmusokon alapul, amelyeket mindenki ismer, aki valaha is belemerült a Linuxba – névterek, iptables, linux hidak, openvswitch, conntrack stb.
Azonnal tisztázni kell, hogy a Neutron nem SDN vezérlő.
A neutron több, egymással összefüggő komponensből áll:
Openstack-neutron-szerver egy démon, amely az API-n keresztül működik a felhasználói kérésekkel. Ez a démon nem vesz részt a hálózati kapcsolatok regisztrálásában, de az ehhez szükséges információkat megadja a pluginjainak, amelyek aztán beállítják a kívánt hálózati elemet. Az OpenStack csomópontokon lévő neutron ügynökök regisztrálnak a Neutron szerveren.
A Neutron-server valójában egy python nyelven írt alkalmazás, amely két részből áll:
REST szolgáltatás
Neutron beépülő modul (mag/szolgáltatás)
A REST szolgáltatást úgy tervezték, hogy más összetevőktől származó API-hívásokat fogadjon (például kérések bizonyos információk megadására stb.)
A beépülő modulok olyan beépülő szoftverösszetevők/modulok, amelyeket API kérések során hívnak meg – vagyis egy szolgáltatás hozzárendelése rajtuk keresztül történik. A beépülő modulok két típusra oszthatók - a szolgáltatásra és a root. Általános szabály, hogy a lóbővítmény főként a címtér és a virtuális gépek közötti L2-kapcsolatok kezeléséért felelős, a szolgáltatás-bővítmények pedig már további funkciókat is biztosítanak, például VPN vagy FW.
A ma elérhető bővítmények listája megtekinthető pl itt
Több szolgáltatási bővítmény is lehet, de csak egy lóbővítmény.
openstack-neutron-ml2 a szabványos Openstack root plugin. Ez a bővítmény moduláris felépítésű (az elődjétől eltérően), és a hálózati szolgáltatást a hozzá csatlakoztatott illesztőprogramokon keresztül konfigurálja. Magát a beépülő modult egy kicsit később fogjuk megnézni, mivel valójában az OpenStack hálózati részének rugalmasságát biztosítja. A root beépülő modul lecserélhető (például a Contrail Networking csinál ilyen cserét).
RPC szolgáltatás (rabbitmq-szerver) — olyan szolgáltatás, amely sorkezelést és interakciót biztosít más OpenStack-szolgáltatásokkal, valamint interakciót a hálózati szolgáltatás ügynökei között.
Hálózati ügynökök — az egyes csomópontokban található ügynökök, amelyeken keresztül a hálózati szolgáltatások konfigurálhatók.
Többféle ügynök létezik.
A fő ügynök az L2 ügynök. Ezek az ügynökök mindegyik hipervizoron futnak, beleértve a vezérlő csomópontokat (pontosabban minden olyan csomóponton, amely bármilyen szolgáltatást nyújt a bérlők számára), és fő funkciójuk a virtuális gépek közös L2 hálózathoz való csatlakoztatása, valamint riasztások generálása, ha bármilyen esemény történik ( például a port letiltása/engedélyezése).
A következő, nem kevésbé fontos ügynök az L3 ügynök. Alapértelmezés szerint ez az ügynök kizárólag egy hálózati csomóponton fut (gyakran a hálózati csomópontot egy vezérlőcsomóponttal kombinálják), és útválasztást biztosít a bérlői hálózatok között (a saját hálózatai és más bérlők hálózatai között is, valamint elérhető a külvilág számára, biztosítva NAT, valamint DHCP szolgáltatás). Azonban DVR (distributed router) használatakor a számítási csomópontokon megjelenik az L3 plugin szükségessége is.
Az L3-ügynök Linux névtereket használ, hogy minden bérlő számára biztosítsa a saját elszigetelt hálózatait és a virtuális útválasztók funkcióit, amelyek a forgalmat irányítják, és átjárószolgáltatásokat biztosítanak a 2. rétegbeli hálózatokhoz.
adatbázis — a hálózatok, alhálózatok, portok, készletek stb. azonosítóinak adatbázisa.
Valójában a Neutron elfogadja az API kéréseket bármilyen hálózati entitás létrehozásától, hitelesíti a kérést, és RPC-n (ha hozzáfér valamilyen bővítményhez vagy ügynökhöz) vagy REST API-n (ha SDN-ben kommunikál) továbbítja az ügynököknek (bővítményeken keresztül) az igényelt szolgáltatás megszervezéséhez szükséges utasításokat.
Most térjünk át a teszttelepítésre (hogyan van telepítve és mit tartalmaz, később a gyakorlati részben látni fogjuk), és nézzük meg, hol találhatók az egyes összetevők:
(overcloud) [stack@undercloud ~]$ openstack network agent list
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent | overcloud-controller-0.localdomain | nova | :-) | UP | neutron-l3-agent |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent | overcloud-controller-0.localdomain | nova | :-) | UP | neutron-dhcp-agent |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent | overcloud-controller-0.localdomain | None | :-) | UP | neutron-metadata-agent |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$
Valójában ez a neutron teljes szerkezete. Most érdemes egy kis időt szánni az ML2 bővítményre.
2. moduláris réteg
Ahogy fentebb említettük, a beépülő modul egy szabványos OpenStack gyökérbővítmény, és moduláris felépítésű.
Az ML2 plugin elődje monolitikus felépítésű volt, ami például nem tette lehetővé több technológia keverését egy telepítésben. Például nem használhatja egyszerre az openvswitchet és a linuxbridge-et – sem az elsőt, sem a másodikat. Emiatt jött létre az ML2 bővítmény és annak architektúrája.
Az ML2 két komponensből áll – kétféle illesztőprogramból: típus-illesztőprogramokból és mechanizmus-illesztőprogramokból.
Írja be az illesztőprogramokat meghatározza a hálózati kapcsolatok szervezéséhez használt technológiákat, például VxLAN, VLAN, GRE. Ugyanakkor a vezető lehetővé teszi a különböző technológiák használatát. A szabványos technológia a VxLAN tokozás az overlay hálózatokhoz és a külső vlan hálózatokhoz.
A típus-illesztőprogramok a következő hálózattípusokat tartalmazzák:
Lakás - címkézés nélküli hálózat VLAN - címkézett hálózat helyi — egy speciális típusú hálózat minden-az-egyben telepítésekhez (az ilyen telepítésekre akár fejlesztőknek, akár oktatáshoz van szükség) GRE — átfedő hálózat GRE alagutak segítségével VxLAN — átfedő hálózat VxLAN alagutak segítségével
Mechanizmus meghajtók definiáljon eszközöket, amelyek biztosítják a típusmeghajtóban meghatározott technológiák szervezését - például openvswitch, sr-iov, opendaylight, OVN stb.
Ennek az illesztőprogramnak a megvalósításától függően vagy a Neutron által vezérelt ügynökök kerülnek felhasználásra, vagy egy külső SDN-vezérlőhöz csatlakoznak, amely gondoskodik az L2 hálózatok szervezésével, útválasztással stb. kapcsolatos összes kérdésről.
Példa: ha az ML2-t az OVS-sel együtt használjuk, akkor minden OVS-t kezelő számítási csomópontra telepítve lesz egy L2-ügynök. Ha viszont például OVN-t vagy OpenDayLight-ot használunk, akkor az OVS irányítása az ő joghatóságuk alá tartozik - a Neutron a root pluginon keresztül parancsokat ad a vezérlőnek, és már azt csinálja, amit mondtak neki.
Frissítsük az Open vSwitch-et
Jelenleg az OpenStack egyik kulcsfontosságú összetevője az Open vSwitch.
Ha az OpenStack-et további szállítói SDN-ek, például a Juniper Contrail vagy a Nokia Nuage nélkül telepíti, az OVS a felhőhálózat fő hálózati összetevője, és az iptables-szal, a conntrack-kel és a névterekkel együtt lehetővé teszi teljes értékű többbérletes átfedő hálózatok szervezését. Természetesen ez az összetevő cserélhető, például harmadik fél által védett (szállítói) SDN-megoldások használatakor.
Az OVS egy nyílt forráskódú szoftverkapcsoló, amelyet virtualizált környezetekben való használatra terveztek virtuális forgalomirányítóként.
Jelenleg az OVS nagyon tisztességes funkcionalitással rendelkezik, amely olyan technológiákat tartalmaz, mint a QoS, LACP, VLAN, VxLAN, GENEVE, OpenFlow, DPDK stb.
Megjegyzés: Az OVS-t eredetileg nem a nagy terhelésű telekommunikációs funkciók soft switcheként tervezték, hanem inkább a kevésbé sávszélességet igénylő IT-funkciókhoz, például a WEB-szerverhez vagy a levelezőszerverhez tervezték. Az OVS-t azonban tovább fejlesztik, és az OVS jelenlegi implementációi nagymértékben javították a teljesítményét és képességeit, ami lehetővé teszi, hogy a telekommunikációs szolgáltatók is használják magasan terhelt funkciókkal, például létezik egy DPDK-gyorsítást támogató OVS-implementáció.
Az OVS-nek három fontos összetevője van, amellyel tisztában kell lennie:
Kernel modul — a kerneltérben található komponens, amely a vezérlőelemtől kapott szabályok alapján feldolgozza a forgalmat;
vKapcsoló A démon (ovs-vswitchd) egy felhasználói térben elindított folyamat, amely a kernel modul programozásáért felelős - vagyis közvetlenül reprezentálja a kapcsoló működésének logikáját
Adatbázis-kiszolgáló - minden OVS-t futtató gazdagépen egy helyi adatbázis, amelyben a konfiguráció tárolva van. Az SDN vezérlők ezen a modulon keresztül tudnak kommunikálni az OVSDB protokoll használatával.
Mindehhez egy sor diagnosztikai és felügyeleti segédprogram társul, mint például az ovs-vsctl, ovs-appctl, ovs-ofctl stb.
Jelenleg az Openstacket széles körben használják a távközlési szolgáltatók arra, hogy hálózati funkciókat, például EPC-t, SBC-t, HLR-t stb. migráljanak rá. Egyes funkciók az OVS-sel úgy működnek, ahogy van, de például az EPC feldolgozza az előfizetői forgalmat – majd áthalad hatalmas forgalom (most a forgalom eléri a több száz gigabitet másodpercenként). Természetesen az ilyen forgalom kernelterületen keresztül történő irányítása (mivel a továbbító alapértelmezés szerint ott található) nem a legjobb ötlet. Ezért az OVS-t gyakran teljes egészében a felhasználói térben telepítik a DPDK gyorsítási technológiával a forgalom továbbítására a hálózati kártyáról a felhasználói térbe, megkerülve a kernelt.
Megjegyzés: a távközlési funkciókhoz telepített felhő esetén lehetséges a forgalom az OVS-t megkerülő számítási csomópontból közvetlenül a kapcsolóberendezéshez továbbítani. Erre a célra SR-IOV és Passthrough mechanizmusokat használnak.
Hogyan működik ez egy valós elrendezésen?
Nos, most térjünk át a gyakorlati részre, és nézzük meg, hogyan működik mindez a gyakorlatban.
Először telepítsünk egy egyszerű Openstack telepítést. Mivel nincs kéznél szerverkészletem a kísérletekhez, ezért a prototípust egy fizikai szerveren állítjuk össze virtuális gépekből. Igen, természetesen egy ilyen megoldás nem alkalmas kereskedelmi célokra, de ahhoz, hogy példát lássunk a hálózat működésére az Openstackben, egy ilyen telepítés elég a szemnek. Sőt, egy ilyen telepítés edzési célokra még érdekesebb - mivel el lehet fogni a forgalmat stb.
Mivel csak az alap részt kell látnunk, ezért nem használhatunk több hálózatot, hanem mindent csak két hálózatból emelhetünk ki, és ebben az elrendezésben a második hálózatot kizárólag az undercloud és a DNS szerver eléréséhez használjuk. A külső hálózatokat egyelőre nem érintjük – ez egy külön nagy cikk témája.
Tehát kezdjük sorban. Először is egy kis elmélet. Az Openstack-et a TripleO (Openstack on Openstack) segítségével telepítjük. A TripleO lényege, hogy az Undercloud nevű Openstack all-in-one-t (vagyis egy csomópontra) telepítjük, majd a telepített Openstack képességeit felhasználva telepítjük a működésre szánt Openstack-et, az úgynevezett overcloud-ot. Az Undercloud a fizikai szerverek (csupasz fém) kezelésében rejlő képességét – az Ironic projektet – arra fogja használni, hogy hipervizorokat biztosítson, amelyek számítási, vezérlési és tárolási csomópontokat töltenek be. Vagyis nem használunk harmadik féltől származó eszközöket az Openstack telepítéséhez – az Openstacket az Openstack használatával telepítjük. A telepítés előrehaladtával sokkal világosabb lesz, ezért nem állunk meg itt, és haladunk tovább.
Megjegyzés: Ebben a cikkben az egyszerűség kedvéért nem használtam hálózati elkülönítést a belső Openstack hálózatokhoz, hanem minden csak egy hálózaton keresztül van telepítve. A hálózati leválasztás megléte vagy hiánya azonban nem befolyásolja a megoldás alapvető funkcionalitását - minden pontosan ugyanúgy fog működni, mint az elkülönítés használatakor, de a forgalom ugyanazon a hálózaton fog folyni. Kereskedelmi telepítés esetén természetesen szükség van különböző vlan-ok és interfészek segítségével történő leválasztásra. Például a ceph tárolókezelési forgalom és maga az adatforgalom (gépi hozzáférés a lemezekhez stb.) elkülönítve különböző alhálózatokat használ (Storage Management és Storage), és ez lehetővé teszi, hogy a megoldást hibatűrőbbé tegye a forgalom felosztásával, pl. , különböző portokon keresztül, vagy különböző QoS profilokat használnak a különböző forgalomhoz, hogy az adatforgalom ne szorítsa ki a jelzőforgalmat. A mi esetünkben ugyanazon a hálózaton mennek majd, és valójában ez semmilyen módon nem korlátoz bennünket.
Megjegyzés: Mivel a virtuális gépeket virtuális gépeken alapuló virtuális környezetben fogjuk futtatni, először engedélyeznünk kell a beágyazott virtualizációt.
Így ellenőrizheti, hogy a beágyazott virtualizáció engedélyezve van-e vagy sem:
[root@hp-gen9 bormoglotx]# cat /sys/module/kvm_intel/parameters/nested
N
[root@hp-gen9 bormoglotx]#
Ha az N betűt látja, akkor engedélyezzük a beágyazott virtualizáció támogatását a hálózaton található bármely útmutató szerint, például ilyen .
A következő áramkört kell összeállítanunk virtuális gépekből:
Az én esetemben a jövőbeni telepítés részét képező virtuális gépek összekapcsolásához (és kaptam 7-et, de 4-gyel is meg lehet érni, ha nincs sok erőforrásunk), az OpenvSwitch-et használtam. Létrehoztam egy ovs hidat, és port-csoportokon keresztül virtuális gépeket csatlakoztattam hozzá. Ehhez létrehoztam egy ilyen xml fájlt:
Itt három portcsoport van deklarálva - két hozzáférés és egy trönk (ez utóbbira a DNS-kiszolgálóhoz volt szükség, de megteheti nélküle, vagy telepítheti a gazdagépre - amelyik kényelmesebb). Ezután ezzel a sablonnal deklaráljuk a miénket a virsh net-define segítségével:
Megjegyzés: ebben a forgatókönyvben az ovs-br1 porton lévő cím nem lesz elérhető, mert nem rendelkezik vlan címkével. Ennek javításához ki kell adnia a sudo ovs-vsctl set port ovs-br1 tag=100 parancsot. Viszont egy újraindítás után ez a címke eltűnik (ha valaki tudja, hogyan kell a helyén maradni, nagyon megköszönném). De ez nem annyira fontos, mert erre a címre csak a telepítés során lesz szükségünk, és nem lesz szükségünk rá, amikor az Openstack teljesen üzembe kerül.
A telepítés során minden szükséges paramétert beállítasz, mint a gép neve, jelszavak, userek, ntp szerverek stb., azonnal beállíthatod a portokat, de nekem személy szerint a telepítés után egyszerűbb a gépbe belépni a gépen keresztül. a konzolt, és javítsa ki a szükséges fájlokat. Ha már van egy kész kép, használhatja, vagy tegye azt, amit én - töltse le a minimális Centos 7 image-et, és használja a virtuális gép telepítéséhez.
Sikeres telepítés után rendelkeznie kell egy virtuális géppel, amelyre telepítheti az undercloud alkalmazást
[root@hp-gen9 bormoglotx]# virsh list
Id Name State
----------------------------------------------------
6 dns-server running
62 undercloud running
Először telepítse a telepítési folyamathoz szükséges eszközöket:
Létrehozunk egy veremfelhasználót, beállítunk egy jelszót, hozzáadjuk a sudoerhez, és lehetőséget adunk neki, hogy jelszó megadása nélkül hajtson végre root parancsokat a sudo-n keresztül:
Megjegyzés: ha nem tervezi a ceph telepítését, akkor nem kell beírnia a ceph-hez kapcsolódó parancsokat. Én a Queens kiadást használtam, de használhatsz bármilyen mást, ami tetszik.
Ezután másolja az undercloud konfigurációs fájlt a felhasználó saját könyvtárába:
undercloud_hostname — az undercloud szerver teljes nevének meg kell egyeznie a DNS-kiszolgáló bejegyzésével
local_ip — helyi felhős cím a hálózat kiépítéséhez
hálózati_átjáró - ugyanaz a helyi cím, amely átjáróként fog működni a külvilág felé a overcloud csomópontok telepítése során, egybeesik a helyi IP-címmel is
undercloud_public_host — külső API-cím, a kiépítési hálózat bármely szabad címe hozzá van rendelve
undercloud_admin_host belső API-cím, a kiépítési hálózat bármely szabad címe hozzá van rendelve
undercloud_nameservers - DNS szerver
gener_service_certificate - ez a sor nagyon fontos a mostani példában, mert ha nem hamisra állítod akkor hibaüzenetet kapsz a telepítés során, a probléma leírása a Red Hat hibakövetőn
local_interface interfész a hálózati kiépítésben. Ez az interfész át lesz konfigurálva az undercloud telepítés során, ezért két interfésznek kell lennie az undercloudban - az egyik az eléréséhez, a másik a hozzáféréshez
local_mtu — MTU. Mivel van tesztlaboratóriumunk és az OVS switch portjain 1500-as MTU-m van, ezért 1450-re kell állítani, hogy a VxLAN-ba tokozott csomagok átmenjenek.
network_cidr — szolgáltató hálózat
álöltözet — NAT használata külső hálózat eléréséhez
masquerade_network - hálózat, amely NAT-os lesz
dhcp_start — a címkészlet kezdőcíme, ahonnan címeket rendelnek a csomópontokhoz a felhőalapú telepítés során
dhcp_end — a címkészlet végső címe, ahonnan címeket rendelnek a csomópontokhoz a felhőalapú telepítés során
ellenőrzés_iprange — az önvizsgálathoz szükséges címkészlet (nem szabad átfedésben lennie a fenti készlettel)
ütemező_max_kísérletek — a túlzott felhő telepítési kísérleteinek maximális száma (nagyobbnak kell lennie, mint a csomópontok száma, vagy egyenlőnek kell lennie azzal)
A fájl leírása után kiadhatja az undercloud telepítésének parancsát:
openstack undercloud install
Az eljárás 10-30 percet vesz igénybe a vasalótól függően. Végül a következő kimenetet kell látnia:
vi undercloud.conf
2020-08-13 23:13:12,668 INFO:
#############################################################################
Undercloud install complete.
The file containing this installation's passwords is at
/home/stack/undercloud-passwords.conf.
There is also a stackrc file at /home/stack/stackrc.
These files are needed to interact with the OpenStack services, and should be
secured.
#############################################################################
Ez a kimenet azt mondja, hogy sikeresen telepítette az undercloudot, és most ellenőrizheti az undercloud állapotát, és folytathatja az overcloud telepítését.
Ha megnézed az ifconfig kimenetét, látni fogod, hogy megjelent egy új hídfelület
Jelenleg csak alulfelhőink vannak, és nincs elég csomópontunk, ahonnan a overcloud összeáll. Ezért mindenekelőtt telepítsük a szükséges virtuális gépeket. A telepítés során az undercloud maga telepíti az operációs rendszert és a szükséges szoftvereket az overcloud gépre - vagyis nem kell teljesen telepíteni a gépet, hanem csak lemezt (vagy lemezeket) kell készíteni hozzá és meghatározni a paramétereit - azaz , valójában egy csupasz szervert kapunk, amelyre nincs telepítve operációs rendszer.
Menjünk a virtuális gépeink lemezeit tartalmazó mappába, és hozzuk létre a kívánt méretű lemezeket:
Mivel rootként működünk, meg kell változtatnunk ezeknek a lemezeknek a tulajdonosát, hogy ne legyen probléma a jogokkal:
[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 root root 61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 root root 61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 root root 61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu 41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 root root 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu 41G Aug 14 03:07 undercloud.qcow2
[root@hp-gen9 images]#
[root@hp-gen9 images]#
[root@hp-gen9 images]# chown qemu:qemu /var/lib/libvirt/images/*qcow2
[root@hp-gen9 images]# ls -lh
total 5.8G
drwxr-xr-x. 2 qemu qemu 4.0K Aug 13 16:15 backups
-rw-r--r--. 1 qemu qemu 61G Aug 14 03:07 compute-1.qcow2
-rw-r--r--. 1 qemu qemu 61G Aug 14 03:07 compute-2.qcow2
-rw-r--r--. 1 qemu qemu 61G Aug 14 03:07 control-1.qcow2
-rw-------. 1 qemu qemu 41G Aug 14 03:03 dns-server.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-1.qcow2
-rw-r--r--. 1 qemu qemu 161G Aug 14 03:07 storage-2.qcow2
-rw-------. 1 qemu qemu 41G Aug 14 03:08 undercloud.qcow2
[root@hp-gen9 images]#
Megjegyzés: ha nem tervezi a ceph telepítését a tanulmányozása érdekében, akkor a parancsok nem hoznak létre legalább 3 csomópontot legalább két lemezzel, hanem a sablonban jelzik, hogy a vda, vdb stb. virtuális lemezeket használják.
Remek, most meg kell határoznunk ezeket a gépeket:
A végén van egy -print-xml > /tmp/storage-1.xml parancs, amely létrehoz egy xml fájlt minden gép leírásával a /tmp/ mappában; ha nem adja hozzá, akkor nem lesz képes azonosítani a virtuális gépeket.
Most meg kell határoznunk ezeket a gépeket a virsh-ben:
virsh define --file /tmp/control-1.xml
virsh define --file /tmp/compute-1.xml
virsh define --file /tmp/compute-2.xml
virsh define --file /tmp/storage-1.xml
virsh define --file /tmp/storage-2.xml
[root@hp-gen9 ~]# virsh list --all
Id Name State
----------------------------------------------------
6 dns-server running
64 undercloud running
- compute-1 shut off
- compute-2 shut off
- control-1 shut off
- storage-1 shut off
- storage-2 shut off
[root@hp-gen9 ~]#
Most egy kis árnyalat - a tripleO az IPMI-t használja a szerverek kezelésére a telepítés és az önvizsgálat során.
Az introspekció a hardver vizsgálatának folyamata annak érdekében, hogy megkapjuk a csomópontok további kiépítéséhez szükséges paramétereket. Az önvizsgálat az ironikus módszerrel történik, amely szolgáltatást úgy tervezték, hogy csupasz fém szerverekkel dolgozzon.
De itt van a probléma - míg a hardveres IPMI-kiszolgálóknak külön portja van (vagy megosztott portja, de ez nem fontos), addig a virtuális gépek nem rendelkeznek ilyen portokkal. Itt egy vbmc nevű mankó jön a segítségünkre - egy segédprogram, amely lehetővé teszi az IPMI port emulálását. Erre az árnyalatra különösen azoknak érdemes odafigyelniük, akik egy ilyen laboratóriumot szeretnének felállítani egy ESXI hipervizoron – őszintén szólva nem tudom, hogy van-e vbmc analógja, ezért érdemes elgondolkodni ezen a témán, mielőtt mindent telepít. .
Vbmc telepítése:
yum install yum install python2-virtualbmc
Ha az operációs rendszer nem találja a csomagot, adja hozzá a tárolót:
Szerintem a parancs szintaxisa magyarázat nélkül egyértelmű. Egyelőre azonban minden munkamenetünk DOWN állapotban van. Ahhoz, hogy UP állapotba lépjenek, engedélyeznie kell őket:
[root@hp-gen9 ~]# vbmc start control-1
2020-08-14 03:15:57,826.826 13149 INFO VirtualBMC [-] Started vBMC instance for domain control-1
[root@hp-gen9 ~]# vbmc start storage-1
2020-08-14 03:15:58,316.316 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-1
[root@hp-gen9 ~]# vbmc start storage-2
2020-08-14 03:15:58,851.851 13149 INFO VirtualBMC [-] Started vBMC instance for domain storage-2
[root@hp-gen9 ~]# vbmc start compute-1
2020-08-14 03:15:59,307.307 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-1
[root@hp-gen9 ~]# vbmc start compute-2
2020-08-14 03:15:59,712.712 13149 INFO VirtualBMC [-] Started vBMC instance for domain compute-2
[root@hp-gen9 ~]#
[root@hp-gen9 ~]#
[root@hp-gen9 ~]# vbmc list
+-------------+---------+---------+------+
| Domain name | Status | Address | Port |
+-------------+---------+---------+------+
| compute-1 | running | :: | 7004 |
| compute-2 | running | :: | 7005 |
| control-1 | running | :: | 7001 |
| storage-1 | running | :: | 7002 |
| storage-2 | running | :: | 7003 |
+-------------+---------+---------+------+
[root@hp-gen9 ~]#
És az utolsó érintés - ki kell javítania a tűzfal szabályait (vagy teljesen le kell tiltania):
Most menjünk a felhőbe, és ellenőrizzük, hogy minden működik-e. A gazdagép címe 192.168.255.200, az undercloudban a telepítés előkészítése során hozzáadtuk a szükséges ipmitool csomagot:
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Chassis Power is off
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power on
Chassis Power Control: Up/On
[stack@undercloud ~]$
[root@hp-gen9 ~]# virsh list
Id Name State
----------------------------------------------------
6 dns-server running
64 undercloud running
65 control-1 running
Amint látja, sikeresen elindítottuk a vezérlő csomópontot a vbmc-n keresztül. Most kapcsoljuk ki és menjünk tovább:
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power off
Chassis Power Control: Down/Off
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Chassis Power is off
[stack@undercloud ~]$
[root@hp-gen9 ~]# virsh list --all
Id Name State
----------------------------------------------------
6 dns-server running
64 undercloud running
- compute-1 shut off
- compute-2 shut off
- control-1 shut off
- storage-1 shut off
- storage-2 shut off
[root@hp-gen9 ~]#
A következő lépés a csomópontok önvizsgálata, amelyekre a overcloud telepítve lesz. Ehhez el kell készítenünk egy json fájlt a csomópontjaink leírásával. Kérjük, vegye figyelembe, hogy a csupasz szerverekre történő telepítéssel ellentétben a fájl jelzi azt a portot, amelyen a vbmc fut minden egyes gépen.
[root@hp-gen9 ~]# virsh domiflist --domain control-1
Interface Type Source Model MAC
-------------------------------------------------------
- network ovs-network-1 virtio 52:54:00:20:a2:2f
- network ovs-network-1 virtio 52:54:00:3f:87:9f
[root@hp-gen9 ~]# virsh domiflist --domain compute-1
Interface Type Source Model MAC
-------------------------------------------------------
- network ovs-network-1 virtio 52:54:00:98:e9:d6
[root@hp-gen9 ~]# virsh domiflist --domain compute-2
Interface Type Source Model MAC
-------------------------------------------------------
- network ovs-network-1 virtio 52:54:00:6a:ea:be
[root@hp-gen9 ~]# virsh domiflist --domain storage-1
Interface Type Source Model MAC
-------------------------------------------------------
- network ovs-network-1 virtio 52:54:00:79:0b:cb
[root@hp-gen9 ~]# virsh domiflist --domain storage-2
Interface Type Source Model MAC
-------------------------------------------------------
- network ovs-network-1 virtio 52:54:00:a7:fe:27
Megjegyzés: a vezérlő csomópontnak két interfésze van, de ebben az esetben ez nem fontos, ebben a telepítésben nekünk egy is elég lesz.
Most elkészítjük a json fájlt. Meg kell adnunk annak a portnak a poppy címét, amelyen keresztül az üzembe helyezés történik, a csomópontok paramétereit, meg kell neveznünk őket, és meg kell adni, hogyan juthatunk el az ipmi-hez:
Most fel kell készítenünk a képeket az ironizálásra. Ehhez töltse le őket a wget-en keresztül, és telepítse:
(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/overcloud-full.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ sudo wget https://images.rdoproject.org/queens/delorean/current-tripleo-rdo/ironic-python-agent.tar --no-check-certificate
(undercloud) [stack@undercloud ~]$ ls -lh
total 1.9G
-rw-r--r--. 1 stack stack 447M Aug 14 10:26 ironic-python-agent.tar
-rw-r--r--. 1 stack stack 1.5G Aug 14 10:26 overcloud-full.tar
-rw-------. 1 stack stack 916 Aug 13 23:10 stackrc
-rw-r--r--. 1 stack stack 15K Aug 13 22:50 undercloud.conf
-rw-------. 1 stack stack 2.0K Aug 13 22:50 undercloud-passwords.conf
(undercloud) [stack@undercloud ~]$ mkdir images/
(undercloud) [stack@undercloud ~]$ tar -xpvf ironic-python-agent.tar -C ~/images/
ironic-python-agent.initramfs
ironic-python-agent.kernel
(undercloud) [stack@undercloud ~]$ tar -xpvf overcloud-full.tar -C ~/images/
overcloud-full.qcow2
overcloud-full.initrd
overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$
(undercloud) [stack@undercloud ~]$ ls -lh images/
total 1.9G
-rw-rw-r--. 1 stack stack 441M Aug 12 17:24 ironic-python-agent.initramfs
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:24 ironic-python-agent.kernel
-rw-r--r--. 1 stack stack 53M Aug 12 17:14 overcloud-full.initrd
-rw-r--r--. 1 stack stack 1.4G Aug 12 17:18 overcloud-full.qcow2
-rwxr-xr-x. 1 stack stack 6.5M Aug 12 17:14 overcloud-full.vmlinuz
(undercloud) [stack@undercloud ~]$
Képek feltöltése a felhőbe:
(undercloud) [stack@undercloud ~]$ openstack overcloud image upload --image-path ~/images/
Image "overcloud-full-vmlinuz" was uploaded.
+--------------------------------------+------------------------+-------------+---------+--------+
| ID | Name | Disk Format | Size | Status |
+--------------------------------------+------------------------+-------------+---------+--------+
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | aki | 6761064 | active |
+--------------------------------------+------------------------+-------------+---------+--------+
Image "overcloud-full-initrd" was uploaded.
+--------------------------------------+-----------------------+-------------+----------+--------+
| ID | Name | Disk Format | Size | Status |
+--------------------------------------+-----------------------+-------------+----------+--------+
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd | ari | 55183045 | active |
+--------------------------------------+-----------------------+-------------+----------+--------+
Image "overcloud-full" was uploaded.
+--------------------------------------+----------------+-------------+------------+--------+
| ID | Name | Disk Format | Size | Status |
+--------------------------------------+----------------+-------------+------------+--------+
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full | qcow2 | 1487475712 | active |
+--------------------------------------+----------------+-------------+------------+--------+
Image "bm-deploy-kernel" was uploaded.
+--------------------------------------+------------------+-------------+---------+--------+
| ID | Name | Disk Format | Size | Status |
+--------------------------------------+------------------+-------------+---------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel | aki | 6761064 | active |
+--------------------------------------+------------------+-------------+---------+--------+
Image "bm-deploy-ramdisk" was uploaded.
+--------------------------------------+-------------------+-------------+-----------+--------+
| ID | Name | Disk Format | Size | Status |
+--------------------------------------+-------------------+-------------+-----------+--------+
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk | ari | 461759376 | active |
+--------------------------------------+-------------------+-------------+-----------+--------+
(undercloud) [stack@undercloud ~]$
Ellenőrizzük, hogy minden kép betöltődött-e
(undercloud) [stack@undercloud ~]$ openstack image list
+--------------------------------------+------------------------+--------+
| ID | Name | Status |
+--------------------------------------+------------------------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel | active |
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk | active |
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full | active |
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd | active |
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | active |
+--------------------------------------+------------------------+--------+
(undercloud) [stack@undercloud ~]$
Még egy dolog - hozzá kell adnia egy DNS-kiszolgálót:
(undercloud) [stack@undercloud ~]$ openstack overcloud node import --introspect --provide inspection.json
Started Mistral Workflow tripleo.baremetal.v1.register_or_update. Execution ID: d57456a3-d8ed-479c-9a90-dff7c752d0ec
Waiting for messages on queue 'tripleo' with no timeout.
5 node(s) successfully moved to the "manageable" state.
Successfully registered node UUID b4b2cf4a-b7ca-4095-af13-cc83be21c4f5
Successfully registered node UUID b89a72a3-6bb7-429a-93bc-48393d225838
Successfully registered node UUID 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e
Successfully registered node UUID bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8
Successfully registered node UUID 766ab623-464c-423d-a529-d9afb69d1167
Waiting for introspection to finish...
Started Mistral Workflow tripleo.baremetal.v1.introspect. Execution ID: 6b4d08ae-94c3-4a10-ab63-7634ec198a79
Waiting for messages on queue 'tripleo' with no timeout.
Introspection of node b89a72a3-6bb7-429a-93bc-48393d225838 completed. Status:SUCCESS. Errors:None
Introspection of node 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e completed. Status:SUCCESS. Errors:None
Introspection of node bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 completed. Status:SUCCESS. Errors:None
Introspection of node 766ab623-464c-423d-a529-d9afb69d1167 completed. Status:SUCCESS. Errors:None
Introspection of node b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 completed. Status:SUCCESS. Errors:None
Successfully introspected 5 node(s).
Started Mistral Workflow tripleo.baremetal.v1.provide. Execution ID: f5594736-edcf-4927-a8a0-2a7bf806a59a
Waiting for messages on queue 'tripleo' with no timeout.
5 node(s) successfully moved to the "available" state.
(undercloud) [stack@undercloud ~]$
Amint a kimenetből látható, minden hiba nélkül befejeződött. Ellenőrizzük, hogy minden csomópont elérhető állapotban van-e:
(undercloud) [stack@undercloud ~]$ openstack baremetal node list
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| UUID | Name | Instance UUID | Power State | Provisioning State | Maintenance |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | None | power off | available | False |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | None | power off | available | False |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | None | power off | available | False |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | None | power off | available | False |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | None | power off | available | False |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
(undercloud) [stack@undercloud ~]$
Ha a csomópontok eltérő állapotban vannak, általában kezelhetőek, akkor valami hiba történt, és meg kell néznie a naplót, és ki kell derítenie, hogy ez miért történt. Ne feledje, hogy ebben a forgatókönyvben virtualizációt használunk, és előfordulhatnak hibák a virtuális gépek vagy a vbmc használatához.
Ezután meg kell jelölnünk, hogy melyik csomópont melyik funkciót fogja végrehajtani - azaz meg kell jelölni a profilt, amellyel a csomópont telepíteni fog:
Valódi telepítésnél természetesen testreszabott sablonok kerülnek felhasználásra, esetünkben ez nagymértékben megnehezíti a folyamatot, mivel a sablonban minden szerkesztést meg kell magyarázni. Ahogy korábban írtuk, egy egyszerű telepítés is elég lesz ahhoz, hogy lássuk, hogyan működik.
Megjegyzés: ebben az esetben a --libvirt típusú qemu változó szükséges, mivel beágyazott virtualizációt fogunk használni. Ellenkező esetben nem tud virtuális gépeket futtatni.
Most körülbelül egy órája van, vagy talán több is (a hardver képességeitől függően), és csak remélheti, hogy ez idő elteltével a következő üzenetet fogja látni:
Most megvan az openstack szinte teljes verziója, amelyen tanulhat, kísérletezhet stb.
Ellenőrizzük, hogy minden megfelelően működik-e. A felhasználó saját könyvtárában két fájl található - az egyik stackrc (az undercloud kezelésére), a másik pedig az overcloudrc (a túlzott felhők kezelésére). Ezeket a fájlokat forrásként kell megadni, mivel a hitelesítéshez szükséges információkat tartalmaznak.
(undercloud) [stack@undercloud ~]$ openstack server list
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| ID | Name | Status | Networks | Image | Flavor |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| fd7d36f4-ce87-4b9a-93b0-add2957792de | overcloud-controller-0 | ACTIVE | ctlplane=192.168.255.15 | overcloud-full | control |
| edc77778-8972-475e-a541-ff40eb944197 | overcloud-novacompute-1 | ACTIVE | ctlplane=192.168.255.26 | overcloud-full | compute |
| 5448ce01-f05f-47ca-950a-ced14892c0d4 | overcloud-cephstorage-1 | ACTIVE | ctlplane=192.168.255.34 | overcloud-full | ceph-storage |
| ce6d862f-4bdf-4ba3-b711-7217915364d7 | overcloud-novacompute-0 | ACTIVE | ctlplane=192.168.255.19 | overcloud-full | compute |
| e4507bd5-6f96-4b12-9cc0-6924709da59e | overcloud-cephstorage-0 | ACTIVE | ctlplane=192.168.255.44 | overcloud-full | ceph-storage |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
(undercloud) [stack@undercloud ~]$
(undercloud) [stack@undercloud ~]$ source overcloudrc
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$ openstack project list
+----------------------------------+---------+
| ID | Name |
+----------------------------------+---------+
| 4eed7d0f06544625857d51cd77c5bd4c | admin |
| ee1c68758bde41eaa9912c81dc67dad8 | service |
+----------------------------------+---------+
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$ openstack network agent list
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID | Agent Type | Host | Availability Zone | Alive | State | Binary |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch agent | overcloud-novacompute-1.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| 1515ad4a-5972-46c3-af5f-e5446dff7ac7 | L3 agent | overcloud-controller-0.localdomain | nova | :-) | UP | neutron-l3-agent |
| 322e62ca-1e5a-479e-9a96-4f26d09abdd7 | DHCP agent | overcloud-controller-0.localdomain | nova | :-) | UP | neutron-dhcp-agent |
| 9c1de2f9-bac5-400e-998d-4360f04fc533 | Open vSwitch agent | overcloud-novacompute-0.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch agent | overcloud-controller-0.localdomain | None | :-) | UP | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata agent | overcloud-controller-0.localdomain | None | :-) | UP | neutron-metadata-agent |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$
A telepítéshez még egy apró érintésre van szükség - egy útvonalat a vezérlőn, mivel a gép, amellyel dolgozom, egy másik hálózaton van. Ehhez lépjen a control-1-be a heat-admin fiók alatt, és regisztrálja az útvonalat
(undercloud) [stack@undercloud ~]$ ssh [email protected]
Last login: Fri Aug 14 09:47:40 2020 from 192.168.255.1
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ip route add 10.169.0.0/16 via 192.168.255.254
Nos, most már mehetsz a horizontba. Minden információ - címek, bejelentkezési név és jelszó - a /home/stack/overcloudrc fájlban található. A végső diagram így néz ki:
Egyébként a mi telepítésünkben a gépcímeket DHCP-n keresztül adták ki, és mint látható, „véletlenszerűen” adják ki. A sablonban szigorúan meghatározhatja, hogy melyik géphez melyik címet kell csatolni a telepítés során, ha szüksége van rá.
Hogyan folyik a forgalom a virtuális gépek között?
Ebben a cikkben az áthaladó forgalom három lehetőségét vizsgáljuk meg
Két gép egy hypervisoron egy L2 hálózaton
Két gép különböző hipervizorokon ugyanazon az L2 hálózaton
Két gép különböző hálózatokon (hálózatok közötti rootolás)
A külvilághoz külső hálózaton keresztüli hozzáféréssel, lebegő címekkel, valamint elosztott útválasztással kapcsolatos eseteket legközelebb mérlegeljük, egyelőre a belső forgalomra koncentrálunk.
Ennek ellenőrzéséhez állítsuk össze a következő diagramot:
Létrehoztunk 4 virtuális gépet - 3 egy L2 hálózaton - net-1 és 1 további a net-2 hálózaton
(overcloud) [stack@undercloud ~]$ nova list --tenant 5e18ce8ec9594e00b155485f19895e6c
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| ID | Name | Tenant ID | Status | Task State | Power State | Networks |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| f53b37b5-2204-46cc-aef0-dba84bf970c0 | vm-1 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | - | Running | net-1=10.0.1.85 |
| fc8b6722-0231-49b0-b2fa-041115bef34a | vm-2 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | - | Running | net-1=10.0.1.88 |
| 3cd74455-b9b7-467a-abe3-bd6ff765c83c | vm-3 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | - | Running | net-1=10.0.1.90 |
| 7e836338-6772-46b0-9950-f7f06dbe91a8 | vm-4 | 5e18ce8ec9594e00b155485f19895e6c | ACTIVE | - | Running | net-2=10.0.2.8 |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
(overcloud) [stack@undercloud ~]$
Nézzük meg, milyen hipervizorokon helyezkednek el a létrehozott gépek:
Mielőtt azonban megnéznénk, hogyan folyik a forgalom, nézzük meg, hogy jelenleg mi van a vezérlő csomóponton (ami egyben hálózati csomópont is) és a számítási csomóponton. Kezdjük a számítási csomóponttal.
Jelenleg a csomópontnak három ovs-hídja van - br-int, br-tun, br-ex. Közöttük, mint látjuk, van egy sor interfész. A könnyebb érthetőség érdekében ábrázoljuk ezeket az interfészeket a diagramon, és nézzük meg, mi történik.
Ha megnézzük azokat a címeket, amelyekre a VxLAN alagutak fel vannak emelve, látható, hogy az egyik alagút a compute-1-re (192.168.255.26), a második pedig a control-1-re (192.168.255.15) van emelve. De a legérdekesebb az, hogy a br-ex nem rendelkezik fizikai interfészekkel, és ha megnézzük, hogy milyen áramlások vannak beállítva, akkor láthatjuk, hogy ez a híd jelenleg csak a forgalmat tudja csökkenteni.
Az első szabály szerint mindent, ami a phy-br-ex portról jött, el kell dobni.
Valójában ezen a felületen (a br-int-tel való interfészen) kívül jelenleg máshol nem érkezhet forgalom erre a hídra, és a visszaesésekből ítélve a BUM forgalom már be is érkezett a hídba.
Vagyis a forgalom csak a VxLAN alagúton keresztül hagyhatja el ezt a csomópontot, semmi máson. Viszont ha bekapcsolod a DVR-t, akkor változni fog a helyzet, de ezzel máskor foglalkozunk. Hálózati elkülönítés használatakor, például VLAN-ok használatakor nem egy L3 interfész lesz a 0. vlan-ban, hanem több interfész. A VxLAN-forgalom azonban ugyanúgy elhagyja a csomópontot, de valamilyen dedikált vlan-be is be van zárva.
A számítási csomópontot rendeztük, térjünk át a vezérlő csomópontra.
Valójában elmondhatjuk, hogy minden a régi, de az IP-cím már nem a fizikai felületen van, hanem a virtuális hídon. Ez azért történik, mert ez a port az a port, amelyen keresztül a forgalom kilép a külvilágba.
Ez a port a br-ex hídhoz van kötve, és mivel nincsenek rajta vlan tagek, ez a port egy trönk port, amelyen minden vlan engedélyezett, most a forgalom címke nélkül megy kifelé, amint azt a vlan-id 0 jelzi a kimenet fent.
Jelenleg minden más hasonló a számítási csomóponthoz – ugyanazok a hidak, ugyanazok az alagutak, amelyek két számítási csomóponthoz vezetnek.
Ebben a cikkben nem foglalkozunk a tárolási csomópontokkal, de a megértéshez el kell mondani, hogy ezeknek a csomópontoknak a hálózati része a szégyenig banális. A mi esetünkben csak egy fizikai port (eth0) van hozzárendelve egy IP-címmel, és ennyi. Nincsenek VxLAN alagutak, alagúthidak stb. - ovs egyáltalán nincs, mivel nincs értelme. Hálózati elkülönítés használatakor ennek a csomópontnak két interfésze lesz (fizikai portok, bodny vagy csak két vlan - mindegy - attól függ, hogy mit akar) - az egyik a felügyelethez, a másik a forgalomhoz (írás a virtuális gép lemezére) , olvasás lemezről stb.)
Szolgáltatás hiányában kitaláltuk, hogy mi van a csomópontokon. Most indítsunk el 4 virtuális gépet, és nézzük meg, hogyan változik a fent leírt séma - kellenek portok, virtuális útválasztók stb.
Hálózatunk eddig így néz ki:
Minden számítógép-csomóponton két virtuális gépünk van. Példaként a compute-0 használatával nézzük meg, hogyan szerepel minden.
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh list
Id Name State
----------------------------------------------------
1 instance-00000001 running
3 instance-00000003 running
[heat-admin@overcloud-novacompute-0 ~]$
A gépnek csak egy virtuális felülete van - tap95d96a75-a0:
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface Type Source Model MAC
-------------------------------------------------------
tap95d96a75-a0 bridge qbr95d96a75-a0 virtio fa:16:3e:44:98:20
[heat-admin@overcloud-novacompute-0 ~]$
Ez az interfész a Linux Bridge-ben néz ki:
[heat-admin@overcloud-novacompute-0 ~]$ sudo brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.0242904c92a8 no
qbr5bd37136-47 8000.5e4e05841423 no qvb5bd37136-47
tap5bd37136-47
qbr95d96a75-a0 8000.de076cb850f6 no qvb95d96a75-a0
tap95d96a75-a0
[heat-admin@overcloud-novacompute-0 ~]$
Amint a kimenetből látható, csak két interfész van a hídban - tap95d96a75-a0 és qvb95d96a75-a0.
Itt érdemes egy kicsit elidőzni az OpenStack virtuális hálózati eszközeinek típusán:
vtap – egy példányhoz (VM) csatolt virtuális interfész
qbr - Linux híd
qvb és qvo - vEth pár csatlakozik a Linux hídhoz és az Open vSwitch hídhoz
br-int, br-tun, br-vlan — vSwitch hidak megnyitása
patch-, int-br-, phy-br- - Nyissa meg a vSwitch patch interfészt a hidak között
qg, qr, ha, fg, sg – A virtuális eszközök által használt vSwitch portok megnyitása az OVS-hez való csatlakozáshoz
Amint értitek, ha van egy qvb95d96a75-a0 port a hídban, ami vEth pár, akkor valahol ott van a megfelelője, amit logikusan qvo95d96a75-a0-nak kellene nevezni. Lássuk, milyen portok vannak az OVS-en.
Amint látjuk, a port a br-int. A Br-int kapcsolóként működik, amely lezárja a virtuális gépek portjait. A qvo95d96a75-a0 mellett a qvo5bd37136-47 port is látható a kimeneten. Ez a második virtuális gép portja. Ennek eredményeként a diagramunk most így néz ki:
Egy kérdés, ami azonnal érdekelheti a figyelmes olvasót - mi a linux híd a virtuális gép portja és az OVS port között? A helyzet az, hogy a gép védelmére biztonsági csoportokat használnak, amelyek nem mások, mint az iptables. Az OVS nem működik iptables-szal, ezért találták ki ezt a „mankót”. Ez azonban elavulttá válik – az új kiadásokban a conntrack váltja fel.
Vagyis a séma végül így néz ki:
Két gép egy hypervisoron egy L2 hálózaton
Mivel ez a két virtuális gép ugyanazon az L2 hálózaton és ugyanazon a hypervisoron található, a köztük lévő forgalom logikailag lokálisan folyik a br-int-en keresztül, mivel mindkét gép ugyanazon a VLAN-on lesz:
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface Type Source Model MAC
-------------------------------------------------------
tap95d96a75-a0 bridge qbr95d96a75-a0 virtio fa:16:3e:44:98:20
[heat-admin@overcloud-novacompute-0 ~]$
[heat-admin@overcloud-novacompute-0 ~]$
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000003
Interface Type Source Model MAC
-------------------------------------------------------
tap5bd37136-47 bridge qbr5bd37136-47 virtio fa:16:3e:83:ad:a4
[heat-admin@overcloud-novacompute-0 ~]$
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int
port VLAN MAC Age
6 1 fa:16:3e:83:ad:a4 0
3 1 fa:16:3e:44:98:20 0
[heat-admin@overcloud-novacompute-0 ~]$
Két gép különböző hipervizorokon ugyanazon az L2 hálózaton
Most nézzük meg, hogyan megy a forgalom két gép között ugyanazon az L2 hálózaton, de különböző hipervizorokon. Őszintén szólva semmi sem fog sokat változni, csak a hypervisorok közötti forgalom a vxlan alagúton megy keresztül. Nézzünk egy példát.
Azon virtuális gépek címei, amelyek között a forgalmat figyeljük:
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
Interface Type Source Model MAC
-------------------------------------------------------
tap95d96a75-a0 bridge qbr95d96a75-a0 virtio fa:16:3e:44:98:20
[heat-admin@overcloud-novacompute-0 ~]$
[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000002
Interface Type Source Model MAC
-------------------------------------------------------
tape7e23f1b-07 bridge qbre7e23f1b-07 virtio fa:16:3e:72:ad:53
[heat-admin@overcloud-novacompute-1 ~]$
Megnézzük a br-int továbbítási táblázatát a compute-0-ban:
A Mac a compute-1 br-int továbbítási táblázatában található, és amint a fenti kimenetből látható, a 2-es porton keresztül látható, amely a br-tun felé vezető port:
Vagyis a kapott csomag a 3-as portra repül, ami mögött már van egy virtuális gép példánya-00000003.
Az Openstack virtuális infrastruktúrán való tanulásra való telepítésének szépsége az, hogy könnyedén rögzíthetjük a hipervizorok közötti forgalmat, és megnézhetjük, mi történik vele. Most ezt fogjuk tenni, futtassuk a tcpdump parancsot a vnet porton a compute-0 felé:
[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet3
tcpdump: listening on vnet3, link-type EN10MB (Ethernet), capture size 262144 bytes
*****************omitted*******************
04:39:04.583459 IP (tos 0x0, ttl 64, id 16868, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.19.39096 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.1.85 > 10.0.1.88: ICMP echo request, id 5634, seq 16, length 64
04:39:04.584449 IP (tos 0x0, ttl 64, id 35181, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.26.speedtrace-disc > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 59124, offset 0, flags [none], proto ICMP (1), length 84)
10.0.1.88 > 10.0.1.85: ICMP echo reply, id 5634, seq 16, length 64
*****************omitted*******************
Az első sor azt mutatja, hogy a Patek a 10.0.1.85-ös címről a 10.0.1.88-as címre megy (ICMP-forgalom), és egy VxLAN-csomagba van csomagolva vni 22-vel, és a csomag a 192.168.255.19 (compute-0) gazdagépről a 192.168.255.26-as állomásra megy. .1 ( számítás-XNUMX). Ellenőrizhetjük, hogy a VNI egyezik-e az ovs-ban megadottal.
Térjünk vissza ehhez a sorhoz action=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2. A 0x16 vni hexadecimális számrendszerben. Alakítsuk át ezt a számot 16-es rendszerré:
16 = 6*16^0+1*16^1 = 6+16 = 22
Vagyis vni megfelel a valóságnak.
A második sor a visszatérő forgalmat mutatja, nos, nincs értelme magyarázni, ott minden világos.
Két gép különböző hálózatokon (hálózatok közötti útválasztás)
A mai nap utolsó esete a hálózatok közötti útválasztás egy projekten belül egy virtuális útválasztó segítségével. DVR nélküli esetet fontolgatunk (egy másik cikkben megnézzük), így az útválasztás a hálózati csomóponton történik. Esetünkben a hálózati csomópont nincs külön entitásban elhelyezve, és a vezérlő csomóponton található.
Először is nézzük meg, hogy működik-e az útválasztás:
$ ping 10.0.2.8
PING 10.0.2.8 (10.0.2.8): 56 data bytes
64 bytes from 10.0.2.8: seq=0 ttl=63 time=7.727 ms
64 bytes from 10.0.2.8: seq=1 ttl=63 time=3.832 ms
^C
--- 10.0.2.8 ping statistics ---
2 packets transmitted, 2 packets received, 0% packet loss
round-trip min/avg/max = 3.832/5.779/7.727 ms
Mivel ebben az esetben a csomagnak az átjáróhoz kell mennie és oda kell irányítani, meg kell találnunk az átjáró poppy címét, amihez a példányban az ARP táblát nézzük:
$ arp
host-10-0-1-254.openstacklocal (10.0.1.254) at fa:16:3e:c4:64:70 [ether] on eth0
host-10-0-1-1.openstacklocal (10.0.1.1) at fa:16:3e:e6:2c:5c [ether] on eth0
host-10-0-1-90.openstacklocal (10.0.1.90) at fa:16:3e:83:ad:a4 [ether] on eth0
host-10-0-1-88.openstacklocal (10.0.1.88) at fa:16:3e:72:ad:53 [ether] on eth0
Most lássuk, hova kell küldeni a (10.0.1.254) fa:16:3e:c4:64:70 célú forgalmat:
A forgalom elérte a vezérlő csomópontot, ezért oda kell mennünk, és meg kell néznünk, hogyan történik az útválasztás.
Emlékszel, a belső vezérlő csomópont pontosan ugyanúgy nézett ki, mint a számítási csomópont - ugyanaz a három híd, csak a br-exnek volt egy fizikai portja, amelyen keresztül a csomópont forgalmat küldhet kifelé. A példányok létrehozása megváltoztatta a számítási csomópontok konfigurációját - linux híd, iptable és interfészek kerültek a csomópontokhoz. A hálózatok és a virtuális útválasztó létrehozása is rányomta bélyegét a vezérlő csomópont konfigurációjára.
Tehát nyilvánvaló, hogy az átjáró MAC-címének a vezérlőcsomópont br-int továbbítási táblájában kell lennie. Ellenőrizzük, hogy ott van-e, és hol keres:
A Mac a qr-0c52b15f-8f portról látható. Ha visszamegyünk az Openstack virtuális portjainak listájához, akkor ez a porttípus különféle virtuális eszközök OVS-hez való csatlakoztatására szolgál. Pontosabban, a qr a virtuális útválasztó portja, amely névtérként jelenik meg.
Akár három példányban. De a nevek alapján kitalálhatja mindegyik célját. Később visszatérünk a 0 és 1 azonosítójú példányokra, most a qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe névtér érdekel:
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ip route
10.0.1.0/24 dev qr-0c52b15f-8f proto kernel scope link src 10.0.1.254
10.0.2.0/24 dev qr-92fa49b5-54 proto kernel scope link src 10.0.2.254
[heat-admin@overcloud-controller-0 ~]$
Ez a névtér két belső névteret tartalmaz, amelyeket korábban hoztunk létre. Mindkét virtuális port hozzáadásra került a br-int-hez. Ellenőrizzük a qr-0c52b15f-8f port mac címét, mivel a forgalom a cél mac címéből ítélve erre az interfészre ment.
Vagyis ebben az esetben minden a szabványos útválasztás törvényei szerint működik. Mivel a forgalom a 10.0.2.8-as gazdagépre irányul, a qr-92fa49b5-54 második interfészen keresztül kell kilépnie, és a vxlan alagúton keresztül kell eljutnia a számítási csomóponthoz:
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe arp
Address HWtype HWaddress Flags Mask Iface
10.0.1.88 ether fa:16:3e:72:ad:53 C qr-0c52b15f-8f
10.0.1.90 ether fa:16:3e:83:ad:a4 C qr-0c52b15f-8f
10.0.2.8 ether fa:16:3e:6c:ad:9c C qr-92fa49b5-54
10.0.2.42 ether fa:16:3e:f5:0b:29 C qr-92fa49b5-54
10.0.1.85 ether fa:16:3e:44:98:20 C qr-0c52b15f-8f
[heat-admin@overcloud-controller-0 ~]$
Minden logikus, nincs meglepetés. Nézzük meg, hol látható a 10.0.2.8-as gazdagép poppy címe a br-intben:
A forgalom bemegy az alagútba az 1 kiszámításához. Nos, a compute-1-en minden egyszerű - a br-tun-ból a csomag a br-int-be megy, onnan pedig a virtuális gép felületére:
Ellenőrizzük, hogy valóban ez a megfelelő felület:
[heat-admin@overcloud-novacompute-1 ~]$ brctl show
bridge name bridge id STP enabled interfaces
docker0 8000.02429c001e1c no
qbr3210e8ec-c0 8000.ea27f45358be no qvb3210e8ec-c0
tap3210e8ec-c0
qbre7e23f1b-07 8000.b26ac0eded8a no qvbe7e23f1b-07
tape7e23f1b-07
[heat-admin@overcloud-novacompute-1 ~]$
[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000004
Interface Type Source Model MAC
-------------------------------------------------------
tap3210e8ec-c0 bridge qbr3210e8ec-c0 virtio fa:16:3e:6c:ad:9c
[heat-admin@overcloud-novacompute-1 ~]$
Tulajdonképpen végigmentünk a csomagon. Gondolom észrevetted, hogy a forgalom különböző vxlan alagutakon ment keresztül és különböző VNI-kkel távozott. Nézzük meg, milyen VNI-k ezek, utána gyűjtünk egy dump-ot a csomópont vezérlőportján, és megbizonyosodunk arról, hogy a forgalom pontosan a fent leírtak szerint folyik.
Tehát a compute-0 alagút a következő műveletekkel rendelkezik=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3. Alakítsuk át a 0x16-ot decimális számrendszerré:
0x16 = 6*16^0+1*16^1 = 6+16 = 22
A compute-1 alagút a következő VNI-vel rendelkezik:actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],kimenet:2. Alakítsuk át a 0x63-at decimális számrendszerré:
0x63 = 3*16^0+6*16^1 = 3+96 = 99
Nos, most nézzük a szemétlerakást:
[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet4
tcpdump: listening on vnet4, link-type EN10MB (Ethernet), capture size 262144 bytes
*****************omitted*******************
04:35:18.709949 IP (tos 0x0, ttl 64, id 48650, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.19.41591 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.710159 IP (tos 0x0, ttl 64, id 23360, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.15.38983 > 192.168.255.26.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 63, id 49042, offset 0, flags [DF], proto ICMP (1), length 84)
10.0.1.85 > 10.0.2.8: ICMP echo request, id 5378, seq 9, length 64
04:35:18.711292 IP (tos 0x0, ttl 64, id 43596, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.26.42588 > 192.168.255.15.4789: [no cksum] VXLAN, flags [I] (0x08), vni 99
IP (tos 0x0, ttl 64, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
04:35:18.711531 IP (tos 0x0, ttl 64, id 8555, offset 0, flags [DF], proto UDP (17), length 134)
192.168.255.15.38983 > 192.168.255.19.4789: [no cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 63, id 55103, offset 0, flags [none], proto ICMP (1), length 84)
10.0.2.8 > 10.0.1.85: ICMP echo reply, id 5378, seq 9, length 64
*****************omitted*******************
Az első csomag egy vxlan csomag a 192.168.255.19 gazdagéptől (compute-0) a 192.168.255.15 állomásig (control-1) vni 22-vel, amelyen belül egy ICMP-csomag van csomagolva a 10.0.1.85-től a 10.0.2.8-ig. Ahogy fentebb kiszámoltuk, vni megegyezik azzal, amit a kimenetben láttunk.
A második csomag egy vxlan-csomag a 192.168.255.15-ös gazdagéptől (control-1) a 192.168.255.26-os gazdagépig (compute-1) vni 99-cel, amelyen belül egy ICMP-csomag van csomagolva a 10.0.1.85-ös gazdagéptől a 10.0.2.8-ig. Ahogy fentebb kiszámoltuk, vni megegyezik azzal, amit a kimenetben láttunk.
A következő két csomag visszatérő forgalom 10.0.2.8-ról, nem 10.0.1.85-ről.
Vagyis végül a következő vezérlő csomópont sémát kaptuk:
Ahogy a felhőplatform architektúrájáról beszéltünk, jó lenne, ha a gépek automatikusan kapnák a címeket egy DHCP szervertől. Ez két DHCP-szerver két hálózatunkhoz: 10.0.1.0/24 és 10.0.2.0/24.
Ellenőrizzük, hogy ez igaz-e. Ebben a névtérben csak egy cím található - 10.0.1.1 - magának a DHCP-kiszolgálónak a címe, és ez is benne van a br-intben:
Ennek eredményeként a következő szolgáltatáskészletet kapjuk a vezérlő csomóponton:
Nos, ne feledje – ez csak 4 gép, 2 belső hálózat és egy virtuális útválasztó... Itt most nincsenek külső hálózataink, egy csomó különböző projekt, mindegyiknek saját hálózata van (átfedésben), és van egy elosztott router kikapcsolt, és végül is csak egy vezérlő csomópont volt a tesztpadon (a hibatűréshez három csomópontnak kell határozatképesnek lennie). Logikus, hogy a kereskedelemben minden „kicsit” bonyolultabb, de ebből az egyszerű példából megértjük, hogyan is kell működnie – természetesen fontos, hogy 3 vagy 300 névtér van, de a teljes működés szempontjából szerkezete, semmi sem fog sokat változni... bár amíg nem csatlakoztat valamilyen gyártó SDN-t. De ez egy teljesen más történet.
Remélem érdekes volt. Ha van észrevétele/kiegészítése, vagy valahol egyenesen hazudtam (ember vagyok, és a véleményem mindig szubjektív) - írja meg, hogy mit kell javítani/kiegészíteni - mindent javítunk/hozzáadunk.
Végezetül szeretnék néhány szót ejteni az Openstack (mind a vanília, mind a gyártó) és a VMWare felhőmegoldásának összehasonlításáról – az elmúlt néhány évben túl gyakran tették fel ezt a kérdést, és őszintén szólva már belefáradt, de akkor is. Véleményem szerint nagyon nehéz összehasonlítani ezt a két megoldást, de határozottan kijelenthetjük, hogy mindkét megoldásnak vannak hátrányai, és az egyik megoldás kiválasztásakor mérlegelni kell az előnyöket és hátrányokat.
Ha az OpenStack egy közösségvezérelt megoldás, akkor a VMWare-nek joga van csak azt csinálni, amit akar (olvasd - ami megtérül számára), és ez logikus is - mert ez egy kereskedelmi cég, amely szokott pénzt keresni az ügyfeleiből. De van egy nagy és kövér DE - kiléphetsz az OpenStackből például a Nokiából, és kis költséggel válthatsz például a Juniper (Contrail Cloud) megoldására, de a VMWare-ről nem valószínű, hogy sikerül. . Számomra ez a két megoldás így néz ki - Az Openstack (vendor) egy egyszerű ketrec, amibe beteszik, de van kulcsa, és bármikor kimehet. A VMWare egy aranykalitka, a tulajdonosnál van a ketrec kulcsa és sokba fog kerülni.
Nem reklámozom sem az első, sem a második terméket – Ön választja ki, amire szüksége van. De ha lenne ilyen választásom, mindkét megoldást választanám - a VMWare-t az IT-felhőhöz (alacsony terhelés, egyszerű kezelés), az OpenStack-et valamelyik gyártótól (a Nokia és a Juniper nagyon jó kulcsrakész megoldásokat kínál) - a Telecom felhőhöz. Az Openstack-et nem használnám tisztán informatikai célokra – olyan, mintha ágyúval lőnék verebeket, de a redundancián kívül nem látok ellenjavallatot a használatára. Azonban a VMWare használata a távközlésben olyan, mint egy Ford Raptorral zúzott követ cipelni – kívülről gyönyörű, de a sofőrnek egy út helyett 10 utat kell megtennie.
Véleményem szerint a VMWare legnagyobb hátránya a teljes zártsága - a cég nem ad semmilyen információt arról, hogyan működik pl. vSAN, vagy mi van a hypervisor kernelben - egyszerűen nem kifizetődő neki - vagyis soha ne válj szakértővé a VMWare-ben – a gyártói támogatás nélkül pusztulásra van ítélve (nagyon gyakran találkozom VMWare-szakértőkkel, akik értetlenül állnak a triviális kérdések előtt). Számomra a VMWare zárt motorháztetős autót vesz - igen, lehet, hogy vannak szakembereid, akik ki tudják cserélni a vezérműszíjat, de csak az tudja kinyitni a motorháztetőt, aki eladta neked ezt a megoldást. Én személy szerint nem szeretem azokat a megoldásokat, amelyekbe nem férek bele. Azt fogja mondani, hogy nem kell bemennie a motorháztető alá. Igen, ez lehetséges, de megnézem, amikor egy nagy függvényt kell összeállítani a felhőben 20-30 virtuális gépből, 40-50 hálózatból, amelyek fele ki akar menni, a második fele pedig SR-IOV gyorsulás, különben több tucatnyi ilyen autóra lesz szüksége - különben a teljesítmény nem lesz elég.
Vannak más szempontok is, így csak Ön döntheti el, hogy mit válasszon, és ami a legfontosabb, akkor Ön lesz felelős a választásáért. Ez csak az én véleményem – olyan ember, aki látott és megérintett legalább 4 terméket – Nokia, Juniper, Red Hat és VMWare. Vagyis van mihez hasonlítanom.