
MolntjÀnster trÀnger djupare och djupare in i vÄra liv, och det finns nog ingen person som Ätminstone en gÄng inte har anvÀnt nÄgon form av molntjÀnst. Men vad Àr egentligen ett moln och hur fungerar det? Det Àr det fÄ kÀnner till ens pÄ idénivÄ. 5G blir nu en verklighet och telekominfrastrukturen börjar övergÄ frÄn traditionella lösningar till molnbaserade lösningar, liksom man tidigare övergick frÄn helt hÄrdvarubaserade lösningar till virtualiserade "pelare".
I dag kommer vi att diskutera den interna vÀrlden av molninfrastruktur, sÀrskilt grunderna i nÀtverksdelen.
Vad Ă€r ett moln? Ăr det samma som virtualisering â en profilvy?
En mer Ă€n logisk frĂ„ga. Nej â det Ă€r inte virtualisering, Ă€ven om det Ă€r involverat. LĂ„t oss titta pĂ„ tvĂ„ definitioner:
MolntjÀnster (hÀdanefter Molnet) Àr en modell för att tillhandahÄlla anvÀndarvÀnlig Ätkomst till distribuerade datorkÀllor, som ska kunna distribueras och startas pÄ begÀran med minimal fördröjning och minimala kostnader för serviceleverantören.
Virtualisering Ă€r möjligheten att dela en fysisk enhet (till exempel en server) i flera virtuella enheter, vilket dĂ€rmed ökar resursutnyttjandet (till exempel hade du 3 servrar som var belastade till 25-30 procent, efter virtualisering fĂ„r du 1 server belastad till 80-90 procent). SjĂ€lvklart tar virtualisering en del av resurserna â du mĂ„ste ge stöd Ă„t hypervisorn, men som erfarenheten har visat, Ă€r det vĂ€rt mödan. Ett perfekt exempel pĂ„ virtualisering Ă€r VMWare, som utmĂ€rkt skapar virtuella maskiner, eller till exempel KVM, som jag föredrar, men det Ă€r en smaksak.
Vi anvĂ€nder virtualisering utan att ens förstĂ„ det, och Ă€ven hĂ„rdvaruroutrar anvĂ€nder redan virtualisering â till exempel i de senaste versionerna av JunOS installeras operativsystemet som en virtuell maskin ovanpĂ„ en realtidslinuxdistribution (Wind River 9). Men virtualisering Ă€r inte ett moln; dock kan ett moln inte existera utan virtualisering.
Virtualisering Àr en av byggstenarna som molnet byggs pÄ.
Att göra en molnstruktur genom att helt enkelt sammanföra flera hypervisorer i ett enda L2-domĂ€n, lĂ€gga till nĂ„gra YAML-spelplaner för automatisk konfiguration av VLAN via nĂ„gon ansible och slĂ„ pĂ„ nĂ„got som en orkestreringssystem för automatisk skapelse av virtuella maskiner â kommer inte att fungera. Snarare kommer det att fungera, men den resulterande Frankensteinen Ă€r inte det moln vi behöver, Ă€ven om det kan vara drömmen för vissa. Dessutom, om man tar OpenStack â Ă€r det egentligen ett sĂ„dant Frakenstein, men lĂ„t oss inte gĂ„ in pĂ„ det just nu.
Men jag förstÄr att det frÄn den ovan presenterade definitionen inte Àr helt klart vad som egentligen kan kallas moln.
DÀrför har NIST (National Institute of Standards and Technology) i sitt dokument angett 5 grundlÀggande egenskaper som en molninfrastruktur mÄste ha:
Service pĂ„ begĂ€ran. AnvĂ€ndaren ska ha fri tillgĂ„ng till de dedikerade datorkĂ€llorna (sĂ„som nĂ€tverk, virtuella diskar, minne, processorerkĂ€rnor etc.), och dessa resurser ska tillhandahĂ„llas automatiskt â det vill sĂ€ga utan inblandning frĂ„n tjĂ€nsteleverantören.
Bred tillgÄng till tjÀnster. TillgÄng till resurser ska ske genom standarder mekanismer för att möjliggöra anvÀndning av bÄde vanliga datorer samt tunna klienter och mobila enheter.
SammanstĂ€llning av resurser i pooler. Resurspooler mĂ„ste tillhandahĂ„lla samtidiga resurser till flera kunder, sĂ€kerstĂ€lla kundisolering och avsaknad av ömsesidig pĂ„verkan samt konkurrens om resurser. Poolerna inkluderar Ă€ven nĂ€tverk, vilket visar pĂ„ möjligheten att anvĂ€nda överlappande adressering. Poolerna ska stödja skalbarhet pĂ„ begĂ€ran. AnvĂ€ndning av pooler gör det möjligt att sĂ€kerstĂ€lla nödvĂ€ndig nivĂ„ av resiliens för resurser och abstrahera fysiska och virtuella resurser â servicemottagaren fĂ„r helt enkelt det uppsĂ€ttning resurser som efterfrĂ„gas (var dessa resurser ligger fysiskt, pĂ„ hur mĂ„nga servrar och switchar â Ă€r ointressant för kunden). Men det mĂ„ste beaktas att leverantören ska sĂ€kerstĂ€lla en transparent reserv av dessa resurser.
Snabb anpassning till olika förhĂ„llanden. TjĂ€nster mĂ„ste vara flexibla â snabb tillgĂ„ng till resurser, omfördelning, tillĂ€gg eller minskning av resurser pĂ„ kundens begĂ€ran, dĂ€r kunden ska ha intrycket av att molnets resurser Ă€r oĂ€ndliga. För enkelhetens skull, till exempel, ser du inte en varning om att du har förlorat en del av ditt utrymme i Apple iCloud för att en hĂ„rddisk kraschat pĂ„ servern â hĂ„rddiskar gĂ„r faktiskt sönder. Dessutom Ă€r möjligheterna med denna tjĂ€nst praktiskt taget grĂ€nslösa för dig â behöver du 2 Tb â inga problem, betala och fĂ„ det. Man kan ocksĂ„ ta ett exempel med Google.Drive eller Yandex.Disk.
Möjlighet att mÀta den tjÀnst som tillhandahÄlls. Molnsystem mÄste automatiskt övervaka och optimera de resurser som förbrukas, och dessa mekanismer mÄste vara transparenta bÄde för anvÀndaren och för tjÀnsteleverantören. Det betyder att du alltid kan kontrollera hur mycket resurser du och dina kunder förbrukar.
Det Àr vÀrt att notera att dessa krav i de flesta fall gÀller för offentliga moln, sÄ för privata moln (dvs. moln som körs för företagets interna behov) kan dessa krav justeras nÄgot. Men de mÄste fortfarande uppfyllas, annars fÄr vi inte alla fördelar med molnberÀkningar.
Varför behöver vi molnet?
Men varje ny eller redan existerande teknologi, varje nytt protokoll skapas för nĂ„got (förutom RIP-ng förstĂ„s). Ett protokoll enbart för protokollets skull â ingen Ă€r intresserad av det (förutom RIP-ng naturligtvis). Det Ă€r logiskt att molnet skapas för att erbjuda nĂ„gon slags tjĂ€nst till anvĂ€ndaren/kunden. Vi Ă€r alla bekanta med Ă„tminstone nĂ„gra molntjĂ€nster, till exempel Dropbox eller Google.Docs, och jag antar att de flesta framgĂ„ngsrikt anvĂ€nder dem â till exempel Ă€r denna artikel skriven med hjĂ€lp av molntjĂ€nsten Google.Docs. Men de molntjĂ€nster vi kĂ€nner till Ă€r bara en del av molnets möjligheter â snarare Ă€r de bara tjĂ€nster av typen SaaS. Vi kan erbjuda en molntjĂ€nst pĂ„ tre sĂ€tt: som SaaS, PaaS eller IaaS. Vilken tjĂ€nst just du behöver beror pĂ„ dina önskemĂ„l och möjligheter.
LÄt oss gÄ igenom dem i ordning:
Programvara som tjĂ€nst (SaaS) â detta Ă€r en modell för att tillhandahĂ„lla en fullstĂ€ndig tjĂ€nst till kunden, till exempel e-posttjĂ€nster som Yandex.Mail eller Gmail. I en sĂ„dan tjĂ€nstemodell gör du som kund egentligen ingenting annat Ă€n att anvĂ€nda tjĂ€nsten â det vill sĂ€ga du behöver inte tĂ€nka pĂ„ instĂ€llningen av tjĂ€nsten, dess redundans eller backup. Huvudsaken Ă€r att inte kompromettera ditt lösenord, allt annat ordnar tjĂ€nsteleverantören. Med tanke pĂ„ tjĂ€nsteleverantören â tar de fullt ansvar för hela tjĂ€nsten â frĂ„n serverutrustning och vĂ€rdansoperativsystem, till instĂ€llningar av databaser och mjukvara.
Platform as a Service (PaaS) â vid anvĂ€ndning av denna modell tillhandahĂ„ller tjĂ€nsteleverantören till kunden en mall för tjĂ€nsten, lĂ„t oss ta en webserver som exempel. TjĂ€nsteleverantören har tillhandahĂ„llit kunden en virtuell server (i huvudsak en uppsĂ€ttning resurser som RAM/CPU/Lagring/NĂ€t etc.), och Ă€ven installerat operativsystemet och nödvĂ€ndig mjukvara pĂ„ den virtuella servern. Dock gör kunden alla instĂ€llningar och ansvarar för tjĂ€nstens funktionalitet. TjĂ€nsteleverantören ansvarar, liksom i det tidigare fallet, för funktionaliteten hos den fysiska utrustningen, hypervisorerna, den virtuella maskinen, dess nĂ€tverkstillgĂ€nglighet etc., men sjĂ€lva tjĂ€nsten faller utanför deras ansvar.
Infrastructure as a Service (IaaS) â denna modell Ă€r redan mer intressant, i praktiken tillhandahĂ„ller tjĂ€nsteleverantören en fullstĂ€ndig virtualiserad infrastruktur till kunden â det vill sĂ€ga en uppsĂ€ttning (pool) av resurser, sĂ„som CPU-kĂ€rnor, RAM, nĂ€tverk etc. Allt annat Ă€r kundens ansvar â vad kunden vill göra med dessa resurser inom den tilldelade poolen (kvoten) Ă€r inte sĂ€rskilt viktigt för tjĂ€nsteleverantören. Om kunden vill skapa sitt eget vEPC eller till och med agera som en minioperatör och erbjuda telekommunikationstjĂ€nster â inget problem â gör det. I ett sĂ„dant scenario ansvarar tjĂ€nsteleverantören för tillhandahĂ„llandet av resurser, deras redundans och tillgĂ€nglighet, samt för operativsystemet som möjliggör sammanstĂ€llning av dessa resurser i pooler och tillhandahĂ„ller dem till kunden med möjlighet att nĂ€r som helst öka eller minska resurserna pĂ„ begĂ€ran av kunden. Alla virtuella maskiner och annan utrustning konfigurerar kunden sjĂ€lv genom sjĂ€lvbetjĂ€ningportalen och konsolen, inklusive nĂ€tverkskonfiguration (förutom externa nĂ€tverk).
Vad Àr OpenStack?
I alla tre varianter behövs ett operativsystem som möjliggör skapandet av en molninfrastruktur. I praktiken ansvarar emellertid inte en enhet för hela teknikstacken vid SaaS â det finns en enhet som ansvarar för infrastrukturen â det vill sĂ€ga som tillhandahĂ„ller IaaS till en annan enhet, och denna enhet erbjuder SaaS till kunden. OpenStack Ă€r ett av de molnbaserade operativsystem som gör det möjligt att sammanföra en mĂ€ngd switchar, servrar och lagringssystem till en enhetlig resurspool, dela upp denna gemensamma pool i undergrupper (tenants) och tillhandahĂ„lla dessa resurser till kunder via nĂ€tverket.
OpenStack â det Ă€r ett molnbaserat operativsystem som gör det möjligt att kontrollera stora pooler av datorkraft, datalagring och nĂ€tverksresurser, vars provisionering och hantering sker via API med hjĂ€lp av standardiserade autentiseringsmekanismer.
Med andra ord Ă€r detta ett komplex av fri programvara som Ă€r avsett för att skapa molntjĂ€nster, (bĂ„de offentliga och privata) â det vill sĂ€ga en uppsĂ€ttning verktyg som möjliggör att förena server- och switchutrustning till en gemensam resurspool och hantera dessa resurser, vilket sĂ€kerstĂ€ller nödvĂ€ndig nivĂ„ av redundans.
Vid tidpunkten för skrivandet av detta material ser strukturen av OpenStack ut sÄ hÀr:

Bilden hÀmtad frÄn
Varje komponent som ingÄr i OpenStack utför en specifik funktion. Denna distribuerade arkitektur möjliggör att inkludera de funktionella komponenter som du behöver i lösningen. Men vissa komponenter Àr grundlÀggande och deras borttagning leder till fullstÀndig eller delvis funktionsfel för lösningen som helhet. SÄdana komponenter brukar inkludera:
- Dashboard â GUI baserat pĂ„ webben för att hantera OpenStack-tjĂ€nster
- Keystone â en centraliserad identifieringstjĂ€nst som erbjuder autentisering och auktorisering för andra tjĂ€nster, samt hanterar anvĂ€ndardata och deras roller.
- Neutron â nĂ€tverkstjĂ€nst som sĂ€kerstĂ€ller anslutning mellan grĂ€nssnitten för olika OpenStack-tjĂ€nster (inklusive anslutning mellan VM och deras tillgĂ„ng utanför vĂ€rlden)
- Cinder â ger Ă„tkomst till blocklagring för virtuella maskiner
- Nova â hantering av livscykeln för virtuella maskiner
- Glance â ett repository för bilder av virtuella maskiner och snapshots
- Swift â tillhandahĂ„ller Ă„tkomst till objektlagring
- Ceilometer â en tjĂ€nst som möjliggör insamling av telemetri och mĂ€tning av resurser som anvĂ€nds och de som behövs
- Heat â orkestrering baserad pĂ„ mallar för automatisk skapelse och provisionering av resurser
Den fullstÀndiga listan över alla projekt och deras syften kan ses .
Varje komponent i OpenStack Ă€r en tjĂ€nst som ansvarar för en viss funktion och erbjuder ett API för att hantera denna funktion och interagera med andra tjĂ€nster i det molnbaserade operativsystemet för att skapa en enhetlig infrastruktur. Till exempel hanterar Nova berĂ€kningsresurser och erbjuder API för att konfigurera dessa resurser, Glance â hantering av bilder och API för att administrera dem, Cinder â blocklagring och API för att hantera den, etc. Alla funktioner Ă€r mycket tĂ€tt sammankopplade.
Men om man tĂ€nker efter, representerar alla tjĂ€nster som körs i OpenStack i slutĂ€ndan nĂ„gon typ av virtuell maskin (eller container) kopplad till nĂ€tverket. FrĂ„gan Ă€r â varför behöver vi sĂ„ mĂ„nga element?
LÄt oss gÄ igenom algoritmen för att skapa en virtuell maskin och koppla den till nÀtverket och lagringen i OpenStack.
- NĂ€r du skapar en begĂ€ran om att skapa en maskin, oavsett om det Ă€r en begĂ€ran via Horizon (Dashboard) eller via CLI, Ă€r det första som hĂ€nder â autentisering av din begĂ€ran i Keystone â om du kan skapa en maskin, har rĂ€tt att anvĂ€nda det hĂ€r nĂ€tverket, om ditt projekt har tillrĂ€ckligt med kvoter, etc.
- Keystone autentiserar din begÀran och genererar i svaret en auth-token som kommer att anvÀndas senare. Efter att ha fÄtt svar frÄn Keystone skickas begÀran vidare till Nova (nova api).
- Nova-api kontrollerar giltigheten av din begÀran genom att frÄga Keystone, med den tidigare genererade auth-token.
- Keystone utför autentisering och tillhandahÄller baserat pÄ denna auth-token information om behörigheter och begrÀnsningar.
- Nova-api skapar en post om den nya VM:en i nova-databasen och skickar begÀran om att skapa maskinen till nova-scheduler.
- Nova-scheduler vÀljer den vÀrd (datorknuten) dÀr VM kommer att distribueras baserat pÄ angivna parametrar, vikter och zoner. Information om detta och ID:t för VM sparas i nova-database.
- DÀrefter kontaktar nova-scheduler nova-compute för att begÀra distribution av instansen. Nova-compute kontaktar nova-conductor för att fÄ information om maskinens parametrar (nova-conductor Àr en del av nova som fungerar som en proxyserver mellan nova-database och nova-compute, vilket begrÀnsar antalet begÀrningar till nova-database för att undvika problem med databasens konsistens och minska belastningen).
- Nova-conductor fÄr den begÀrda informationen frÄn nova-database och vidarebefordrar den till nova-compute.
- DÀrefter kontaktar nova-compute glance för att fÄ bildens ID. Glance validerar begÀran i Keystone och returnerar den begÀrda informationen.
- Nova-compute kontaktar neutron för att fÄ information om nÀtverksparametrar. PÄ samma sÀtt som glance validerar neutron begÀran i Keystone, skapar den sedan en post i databasen (portens ID osv.), gör en begÀran om att skapa en port och returnerar den begÀrda informationen till nova-compute.
- Nova-compute kontaktar cinder för att begÀra tildelning av en volym till den virtuella maskinen. PÄ samma sÀtt som glance validerar cinder begÀran i Keystone, gör den en begÀran om att skapa en volym och Äterger den begÀrda informationen.
- Nova-compute kontaktar libvirt för att begÀra distribution av en virtuell maskin med angivna parametrar.
I sjĂ€lva verket verkar en till synes enkel operation för att skapa en grundlĂ€ggande virtuell maskin förvandlas till en virvelvind av API-anrop mellan elementen pĂ„ molnplattformen. Dessutom, som du ser, bestĂ„r Ă€ven tidigare nĂ€mnda tjĂ€nster av mindre komponenter som interagerar med varandra. Att skapa en maskin Ă€r bara en liten del av vad molnplattformen erbjuder â det finns en tjĂ€nst som ansvarar för trafikbalansering, en tjĂ€nst för blocklagring, en tjĂ€nst för DNS, en tjĂ€nst för provisioning av bare metal-servrar, och sĂ„ vidare. Molnet gör att du kan hantera dina virtuella maskiner som en flock fĂ„r (till skillnad frĂ„n virtualisering). Om nĂ„got hĂ€nder med maskinen i den virtuella miljön â Ă„terstĂ€ller du den frĂ„n sĂ€kerhetskopior osv., medan molnapplikationer Ă€r byggda pĂ„ ett sĂ€tt dĂ€r den virtuella maskinen inte spelar en sĂ„ viktig roll â den virtuella maskinen "dog" â ingen fara â en ny maskin skapas helt enkelt baserat pĂ„ en mall och, som man sĂ€ger, truppen mĂ€rkte inte förlusten av en soldat. SjĂ€lvklart förutsĂ€tter detta att det finns orkestreringsmekanismer â genom att anvĂ€nda Heat-mallar kan du utan större problem rulla ut en komplex funktion bestĂ„ende av tiotals nĂ€tverk och virtuella maskiner.
Det Ă€r alltid viktigt att ha i Ă„tanke att en molninfrastruktur inte kan existera utan nĂ€tverk â varje element interagerar pĂ„ nĂ„got sĂ€tt med andra element via nĂ€tverket. Dessutom Ă€r molnet inte ett statiskt nĂ€tverk. SjĂ€lvklart Ă€r underlay-nĂ€tverket mer eller mindre statiskt â det tillkommer inte nya noder och switchar varje dag, men overlay-delen kan och kommer oundvikligen att förĂ€ndras stĂ€ndigt â nya nĂ€tverk kommer att lĂ€ggas till eller tas bort, nya virtuella maskiner kommer att tillkomma och gamla kommer att dö. Och som du minns frĂ„n definitionen av molnet som gavs i början av artikeln â resurser ska tilldelas anvĂ€ndaren automatiskt och med minsta möjliga (eller helst ingen) inblandning frĂ„n tjĂ€nsteleverantören. Det vill sĂ€ga den typ av resursfördelning som finns nu i form av frontend via ditt personliga konto tillgĂ€ngligt via http/https och den tjĂ€nstgörande nĂ€tverksingenjören Vasja som backend â det Ă€r inte ett moln, Ă€ven om Vasja har Ă„tta armar.
Neutron, som en nÀtverks tjÀnst, tillhandahÄller ett API för att hantera nÀtverksdelen av molninfrastrukturen. TjÀnsten sÀkerstÀller funktionalitet och hantering av nÀtverksdelen av OpenStack, vilket ger en nivÄ av abstraktion kallad Network-as-a-Service (NaaS). Det innebÀr att nÀtverket Àr en lika virtuell mÀtbar enhet som till exempel virtuella CPU-kÀrnor eller RAM-minneskapacitet.
Men innan vi gÄr vidare till arkitekturen för nÀtverksdelen av OpenStack, lÄt oss titta pÄ hur nÀtverket fungerar inom OpenStack och varför nÀtverket Àr en viktig och integrerad del av molnet.
SÄ, vi har tvÄ virtuella maskiner för kunden RED och tvÄ virtuella maskiner för kunden GREEN. Anta att dessa maskiner Àr placerade pÄ tvÄ hypervisorer pÄ följande sÀtt:

Just nu handlar det bara om virtualisering av fyra servrar och inte mer, eftersom vi hittills bara har virtualiserat fyra servrar och placerat dem pÄ tvÄ fysiska servrar. Dessutom Àr de för tillfÀllet inte ens anslutna till nÀtverket.
För att fĂ„ till ett moln mĂ„ste vi lĂ€gga till flera komponenter. För det första behöver vi virtualisera nĂ€tverksdelen â vi mĂ„ste koppla samman dessa fyra maskiner parvis, och kunderna vill ha just L2-anslutning. Man kan sjĂ€lvklart anvĂ€nda en switch och stĂ€lla in trunk i dess riktning och fixa allt med en Linux-bro, eller för mer avancerade anvĂ€ndare openvswitch (vi kommer att Ă„terkomma till det). Men det kan finnas mĂ„nga nĂ€tverk, och kontinuerligt trycka L2 genom en switch Ă€r inte den bĂ€sta idĂ©n â olika avdelningar, servicedesk, mĂ„nader av vĂ€ntan pĂ„ att fĂ„ sin ansökan utförd, veckor av felsökning â i dagens moderna vĂ€rld fungerar sĂ„dana tillvĂ€gagĂ„ngssĂ€tt inte lĂ€ngre. Ju tidigare företaget förstĂ„r detta, desto lĂ€ttare blir det att gĂ„ framĂ„t. DĂ€rför kommer vi att styra en L3-nĂ€tverk mellan hypervisorerna genom vilket vĂ„ra virtuella maskiner kommer att kommunicera, och ovanpĂ„ detta L3-nĂ€tverk bygger vi virtuella överlagrade L2-nĂ€tverk dĂ€r trafiken frĂ„n vĂ„ra virtuella maskiner kommer att flöda. För kapsling kan vi anvĂ€nda GRE, Geneve eller VxLAN. Vi stannar vid den sista, Ă€ven om det inte Ă€r sĂ„ viktigt.
Vi behöver placera VTEP nÄgonstans (jag hoppas att alla Àr bekanta med termen VxLAN). Eftersom L3-nÀtverket redan kommer frÄn servrarna, finns det ingenting som hindrar oss frÄn att placera VTEP pÄ sjÀlva servrarna, och OVS (OpenvSwitch) klarar detta utmÀrkt. I slutÀndan fick vi en sÄdan konstruktion:

Eftersom trafiken mellan VM mÄste separeras kommer portarna mot de virtuella maskinerna att ha olika VLAN-nummer. Taggnummret spelar bara roll inom en virtuell switch, eftersom vi kan ta bort det utan problem vid inkapsling i VxLAN, eftersom vi har VNI.

Nu kan vi skapa vÄra maskiner och virtuella nÀtverk för dem utan nÄgra problem.
Men vad hĂ€nder om kunden har en annan maskin, men den befinner sig i ett annat nĂ€tverk? Vi behöver routing mellan nĂ€tverken. Vi kommer att gĂ„ igenom ett enkelt alternativ dĂ€r centraliserad routing anvĂ€nds â det vill sĂ€ga trafiken routas genom specialiserade dedikerade nĂ€tverksnoder (ofta kombinerade med kontrollnoder, sĂ„ det blir samma sak).
Det verkar inte vara nĂ„got komplicerat â vi gör en brygggrĂ€nssnitt pĂ„ kontrollnoden, skickar trafiken dit och routerar den dĂ€rifrĂ„n dit vi behöver. Men problemet Ă€r att kunden RED vill anvĂ€nda nĂ€tverket 10.0.0.0/24, och kunden GREEN vill anvĂ€nda nĂ€tverket 10.0.0.0/24. Det innebĂ€r att vi fĂ„r en överlappning av adresser. Dessutom vill kunderna inte att andra kunder ska kunna routas till deras interna nĂ€tverk, vilket Ă€r rimligt. För att separera nĂ€tverken och kundernas datatrafik kommer vi att tilldela varje kund ett separat namespace. Namespace Ă€r faktiskt en kopia av Linux nĂ€tverksstack, vilket innebĂ€r att kunder i namespace RED Ă€r helt isolerade frĂ„n kunder i namespace GREEN (eller sĂ„ tillĂ„ts routing mellan dessa kunders nĂ€tverk via default namespace eller pĂ„ högre transportutrustning).
SÄ vi fÄr följande schema:

L2-tunnlar konvergerar frÄn alla berÀkningsnoder till kontrollnoden, dÀr L3-grÀnssnittet för dessa nÀtverk finns, varje i ett dedikerat namespace för isolering.
Men vi glömde det viktigaste. Den virtuella maskinen mÄste tillhandahÄlla en tjÀnst till kunden, det vill sÀga den mÄste ha minst ett externt grÀnssnitt genom vilket man kan nÄ den. Vi behöver alltsÄ nÄ den yttre vÀrlden. HÀr finns olika alternativ. LÄt oss göra den enklaste varianten. Vi lÀgger till ett nÀtverk för varje kund som kommer att vara giltigt i leverantörens nÀt och inte korsa andra nÀtverk. NÀten kan ocksÄ korsa varandra och se pÄ olika VRF pÄ leverantörens nÀtverkssida. Dessa nÀt kommer ocksÄ att existera i varje kunds namespace. Men de mÄste fortfarande nÄ den yttre vÀrlden genom ett enda fysiskt (eller bond, vilket Àr mer logiskt) grÀnssnitt. För att separera kundernas trafik kommer den trafik som gÄr ut att taggas med en VLAN-tagg som tilldelats kunden.
Resultatet blev detta schema:

En rimlig frĂ„ga Ă€r â varför inte skapa gateways pĂ„ sjĂ€lva compute-noderna? Det finns inget stort problem med detta, tvĂ€rtom, nĂ€r den distribuerade routern (DVR) aktiveras kommer det att fungera sĂ„. I detta scenario övervĂ€ger vi den enklaste varianten med en central gateway, som anvĂ€nds som standard i OpenStack. För högbelastade funktioner kommer bĂ„de den distribuerade routern och accelereringsteknologier som SR-IOV och Passthrough att anvĂ€ndas, men som man sĂ€ger, det Ă€r en helt annan historia. Först ska vi förstĂ„ den grundlĂ€ggande delen, och sedan gĂ„ in pĂ„ detaljer.
VÄr schema Àr redan funktionell, men det finns nÄgra nyanser:
- Vi mÄste pÄ nÄgot sÀtt skydda vÄra maskiner, det vill sÀga sÀtta en filter pÄ switchens grÀnssnitt mot kunden.
- Göra det möjligt för den virtuella maskinen att automatiskt fÄ en IP-adress, sÄ att man inte behöver gÄ in i den via konsolen och ange adressen varje gÄng.
LÄt oss börja med att skydda maskinerna. För detta kan vi anvÀnda vanliga iptables, varför inte.
Det innebÀr att vÄr topologi nu har blivit nÄgot mer komplicerad:

Vi gÄr vidare. Vi mÄste lÀgga till en DHCP-server. Den mest idealiska platsen för att placera DHCP-servrarna för varje kund skulle vara den ovan nÀmnda kontrollnoden, dÀr namespaces finns:

Det finns dock ett litet problem. Vad hÀnder om allt startar om och all information om hyra av adresser pÄ DHCP försvinner? Det Àr logiskt att maskinerna kommer att fÄ nya adresser, vilket inte Àr sÀrskilt praktiskt. Det finns tvÄ alternativ hÀr - antingen anvÀnda domÀnnamn och lÀgga till en DNS-server för varje klient, sÄ att adressen inte Àr sÀrskilt viktig för oss (liknande den nÀtverksdel i k8s) - men det finns ett problem med externa nÀtverk, eftersom adresserna dÀr ocksÄ kan tilldelas via DHCP - det krÀvs synkronisering mellan DNS-servrarna i molnplattformen och den externa DNS-servern, vilket jag anser inte Àr sÀrskilt flexibelt, men fullt möjligt. Det andra alternativet Àr att anvÀnda metadatan - det vill sÀga att spara information om den tilldelade maskinens adress sÄ att DHCP-servern vet vilken adress den ska tilldela om maskinen redan har fÄtt en adress. Det andra alternativet Àr enklare och mer flexibelt, eftersom det tillÄter oss att spara extra information om maskinen. Nu lÀgger vi till metadata-agenten i schemat:

En annan frÄga som ocksÄ bör belysas Àr möjligheten att anvÀnda ett enda externt nÀtverk för alla kunder, eftersom externa nÀtverk, om de ska vara giltiga i hela nÀtverket, kommer att medföra svÄrigheter - det blir nödvÀndigt att stÀndigt tilldela och kontrollera tilldelningen av dessa nÀtverk. Möjligheten att anvÀnda ett enhetligt för alla kunder förkonfigurerat externt nÀtverk skulle vara mycket anvÀndbart vid skapandet av ett offentligt moln. Detta skulle förenkla distributionen av maskiner, eftersom vi inte behöver kontrollera adressdatabasen och vÀlja unikt adresseringsomrÄde för varje klients externa nÀtverk. Dessutom kan vi redan i förhand definiera det externa nÀtverket, och vid distributionsöka behöver vi bara associera externa adresser med klientmaskiner.
Och hĂ€r kommer NAT till vĂ„r hjĂ€lp â vi gör helt enkelt det möjligt för kunderna att nĂ„ den externa vĂ€rlden via standardnamnomrĂ„de med hjĂ€lp av NAT-översĂ€ttning. Men det finns en liten problematik hĂ€r. Det Ă€r bra om kundens server fungerar som klient och inte som server â det vill sĂ€ga att den initierar istĂ€llet för att ta emot anslutningar. Men vi kommer att ha motsatsen. I sĂ„dana fall mĂ„ste vi göra destination NAT, sĂ„ att kontrollnoden förstĂ„r att denna trafik Ă€r avsedd för klient A:s virtuella maskin, och dĂ€rmed mĂ„ste vi utföra NAT-översĂ€ttning frĂ„n den externa adressen, till exempel 100.1.1.1, till den interna adressen 10.0.0.1. PĂ„ sĂ„ sĂ€tt, Ă€ven om alla kunder anvĂ€nder samma nĂ€tverk, bibehĂ„lls den interna isoleringen helt. Det innebĂ€r att vi pĂ„ kontrollnoden mĂ„ste göra bĂ„de dNAT och sNAT. Att anvĂ€nda ett gemensamt nĂ€tverk med tilldelning av flytande adresser eller externa nĂ€tverk, eller bĂ„de och, beror pĂ„ vad ni vill dra in i molnet. Vi kommer inte att inkludera flytande adresser i diagrammet, utan behĂ„ller endast de externa nĂ€tverk som redan lagts till â varje kund har sitt eget externa nĂ€tverk (markerade i diagrammet som VLAN 100 och 200 pĂ„ det externa grĂ€nssnittet).
I resultatet fick vi en intressant och samtidigt genomtÀnkt lösning, med viss flexibilitet men som Ànnu saknar mekanismer för hög tillgÀnglighet.
För det första har vi bara en kontrollnod â om den gĂ„r ner kommer hela systemet att kollapsa. För att lösa detta problem mĂ„ste vi ha minst tre noder i kvorum. Vi lĂ€gger till det i diagrammet:

Naturligtvis synkroniseras alla noder, och nÀr den aktiva noden gÄr ner kommer en annan nod att ta över dess uppgifter.
Det kommande problemet handlar om virtuella maskiners diskar. De lagras för nĂ€rvarande pĂ„ hypervisorerna sjĂ€lva och i hĂ€ndelse av problem med hypervisorn förlorar vi all data â och jĂ€mfört med RAID hjĂ€lper det inte mycket om vi förlorar hela servern istĂ€llet för en disk. För detta behöver vi skapa en tjĂ€nst som fungerar som en frontend för nĂ„got lagringssystem. Vilket lagringssystem det blir spelar egentligen ingen större roll, men det mĂ„ste skydda vĂ„ra data mot fel pĂ„ bĂ„de diskar och noder, och kanske Ă€ven ett helt skĂ„p. Det finns flera alternativ â det finns naturligtvis SAN-nĂ€t med Fiber Channel, men lĂ„t oss vara Ă€rliga â FC Ă€r redan en kvarleva frĂ„n det förflutna, motsvarande E1 inom transport â visst, det anvĂ€nds fortfarande, men endast dĂ€r det Ă€r helt nödvĂ€ndigt. SĂ„, att frivilligt bygga ett FC-nĂ€tverk Ă„r 2020 skulle jag inte göra, med vetskap om att det finns andra mer intressanta alternativ. Ăven om alla har sina Ă„sikter och det kanske finns de som tycker att FC med alla sina begrĂ€nsningar Ă€r allt vi behöver â jag kommer inte att argumentera, alla har olika uppfattningar. Det mest intressanta alternativet, enligt min Ă„sikt, Ă€r anvĂ€ndningen av SDS, exempelvis Ceph.
Ceph gör det möjligt att bygga en högt tillgÀnglig datalagringslösning med mÄnga alternativ för redundans, allt frÄn koder med paritetskontroll (motsvarande RAID 5 eller 6) till fullstÀndig replikering av data pÄ olika diskar med hÀnsyn till diskarnas placering i servrar och servrar i skÄp, osv.
För att bygga Ceph krÀvs ytterligare 3 noder. Interaktionen med lagringssystemet kommer Àven att ske via nÀtverket med hjÀlp av block-, objekt- och fillagringstjÀnster. LÄt oss lÀgga till lagringssystemet i schemat:

Observera: det gĂ„r att skapa hyperkonvergerade compute-noder â detta Ă€r konceptet att kombinera flera funktioner pĂ„ en nod â till exempel storage+compute â utan att sĂ€rskilt avsĂ€tta noder för ceph storage. Vi fĂ„r en liknande felresistent lösning â dĂ„ SDS reserverar data med den nivĂ„ av reservkopiering vi angav. Men hyperkonvergerade noder Ă€r alltid en kompromiss â eftersom storage-noden inte bara stĂ„r stilla, som det kan verka vid första anblick â den anvĂ€nder CPU-resurser för att underhĂ„lla SDS (i bakgrunden gör den all replikation, Ă„terstĂ€llning efter misslyckande av noder, diskar etc.). Det betyder att du kommer att förlora en del av kapaciteten hos compute-noden om du kombinerar den med storage.
Allt detta behöver hanteras pĂ„ nĂ„got sĂ€tt â vi behöver nĂ„got genom vilket vi kan skapa maskiner, nĂ€tverk, virtuella routrar osv. För detta Ă€ndamĂ„l lĂ€gger vi till en tjĂ€nst pĂ„ kontrollnoden som kommer att fungera som en dashboard â kunden kan ansluta till denna portal via http/https och göra allt han behöver (nĂ€stan).
Som ett resultat har vi nu ett felresistent system. Alla dessa infrastrukturelement mÄste pÄ nÄgot sÀtt hanteras. Tidigare beskrevs att OpenStack Àr en uppsÀttning projekt, dÀr varje projekt tillhandahÄller en viss funktion. Som vi ser Àr det mer Àn tillrÀckligt med element som mÄste konfigureras och kontrolleras. Idag ska vi prata om nÀtverksdelen.
Neutron-arkitektur
I OpenStack ansvarar Neutron för att ansluta portarna pÄ virtuella maskiner till det gemensamma L2-nÀtverket, för att sÀkerstÀlla trafikdirigering mellan VM som befinner sig i olika L2-nÀtverk samt för att dirigera trafik utÄt, erbjuda tjÀnster som NAT, Floating IP, DHCP osv.
Arbetet med nÀtverkstjÀnsten pÄ hög nivÄ (grundlÀggande del) kan beskrivas sÄ hÀr.
Vid start av VM gör nÀtverkstjÀnsten:
- Skapar en port för denna VM (eller portar) och meddelar DHCP-tjÀnsten;
- En ny virtuell nÀtverksenhet skapas (genom libvirt);
- VM kopplas till den port (eller portar) som skapades i steg 1;
Konstigt nog bygger Neutrons arbete pĂ„ standardmekanismer som Ă€r bekanta för alla som har dykt ner i Linux â detta Ă€r namespaces, iptables, linux-bryggor, openvswitch, conntrack osv.
Det ska genast klargöras att Neutron inte Àr en SDN-controller.
Neutron bestÄr av flera sammankopplade komponenter:

Openstack-neutron-server â Ă€r en demon som arbetar med anvĂ€ndarförfrĂ„gningar via API. Denna demon hanterar inte att skriva nĂ„gra nĂ€tverkskopplingar, utan ger den nödvĂ€ndiga informationen till sina plugins, som sedan konfigurerar det nödvĂ€ndiga nĂ€tverkselementet. Neutron-agenter pĂ„ OpenStack-noder registreras pĂ„ Neutron-servern.
Neutron-server Àr i praktiken en applikation som Àr skriven i Python, bestÄende av tvÄ delar:
- REST-tjÀnst
- Neutron Plugin (core/service)
REST-tjÀnsten Àr avsedd för att ta emot API-anrop frÄn andra komponenter (till exempel begÀran om viss information osv.).
Plugins Ă€r modulĂ€ra programkomponenter som anropas vid API-förfrĂ„gningar â det vill sĂ€ga, tilldelningen av en viss tjĂ€nst sker genom dem. Plugins delas in i tvĂ„ typer â tjĂ€nsteplugin och kĂ€rnplugin. Som regel ansvarar kĂ€rnplugin huvudsakligen för hantering av adresseringsrymden och L2-anslutningar mellan VM, medan tjĂ€nsteplugins tillhandahĂ„ller ytterligare funktionalitet, till exempel VPN eller brandvĂ€gg.
Listan över tillgÀngliga plugins idag kan ses till exempel
Det kan finnas flera tjÀnsteplugins, men det kan bara finnas en kÀrnplugin.
Openstack-neutron-ml2 â Ă€r standard kĂ€rnplugin för OpenStack. Denna plugin har en modulĂ€r arkitektur (till skillnad frĂ„n sin föregĂ„ngare) och konfigurerar nĂ€tverkstjĂ€nsten via anslutna drivrutiner. SjĂ€lva pluggen kommer vi att titta pĂ„ lite senare, dĂ„ den faktiskt ger den flexibilitet som OpenStack har i den nĂ€tverksrelaterade delen. KĂ€rnplugin kan bytas ut (till exempel gör Contrail Networking en sĂ„dan utbyte).
RPC-tjĂ€nst (rabbitmq-server) â en tjĂ€nst som sĂ€kerstĂ€ller köhantering och interaktion med andra OpenStack-tjĂ€nster samt interaktion mellan agenterna för nĂ€tverkstjĂ€nster.
NĂ€tverksagenter â agenter som Ă€r placerade i varje nod, genom vilka konfigurationen av nĂ€tverkstjĂ€nster genomförs.
Agenter finns i flera olika typer.
Huvudagenten â Ă€r L2-agent. Dessa agenter körs pĂ„ var och en av hypervisorerna, inklusive kontrollnoder (för att vara mer exakt, pĂ„ alla noder som tillhandahĂ„ller nĂ„gon tjĂ€nst för hyresgĂ€ster) och deras huvudsakliga funktion Ă€r att ansluta virtuella maskiner till det gemensamma L2-nĂ€tverket, samt att generera aviseringar vid uppkomst av hĂ€ndelser (till exempel avstĂ€ngning/pĂ„slagning av porten).
Den nÀsta, lika viktiga agenten Àr L3-agenten. Som standard körs denna agent enbart pÄ nÀtverksnoden (ofta sammanfaller nÀtverksnoden med kontrollnoden) och sÀkerstÀller routning mellan hyresgÀsternas nÀtverk (bÄde mellan deras nÀtverk och nÀtverk frÄn andra hyresgÀster, samt ger tillgÄng till den externa vÀrlden genom att erbjuda NAT och DHCP-tjÀnst). Men vid anvÀndning av DVR (distribuerad router) behövs L3-plugin Àven pÄ berÀkningsnoder.
L3-agenten anvÀnder Linux-namespaces för att ge varje hyresgÀst en uppsÀttning av egna isolerade nÀtverk och funktionalitet för virtuella routrar som rutter trafiken och tillhandahÄller gatewaytjÀnster för Layer 2-nÀtverk.
Databas â en databas över identifierare för nĂ€tverk, delnĂ€t, portar, pooler osv.
Faktiskt tar Neutron emot API-anrop för att skapa olika nÀtverksenheter, autentiserar anropet och vidarebefordrar genom RPC (om den kontaktar en plugin eller agent) eller REST API (om den kommunicerar i SDN) till agenterna (genom plugins) instruktioner som Àr nödvÀndiga för att organisera den begÀrda tjÀnsten.
Nu ska vi titta pÄ den testinstallation (hur den Àr distribuerad och vad som ingÄr i den kommer vi att se senare i den praktiska delen) och se var varje komponent Àr placerad:
(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 ~]$ 
Det Àr faktiskt hela strukturen för Neutron. Nu Àr det dags att Àgna lite tid Ät ML2-plugin.
Modular Layer 2
Som nÀmnt ovan Àr pluginet den standardiserade grundpluginet för OpenStack och har en modulÀr arkitektur.
FöregĂ„ngaren till ML2-pluginet hade en monolitisk struktur som inte tillĂ€t exempelvis anvĂ€ndning av en blandning av flera teknologier i en installation. Till exempel kunde du inte anvĂ€nda bĂ„de openvswitch och linuxbridge samtidigt â antingen det ena eller det andra. Av denna anledning skapades ML2-pluginet med sin arkitektur.
ML2 har tvĂ„ komponenter â tvĂ„ typer av drivrutiner: Type drivers och Mechanism drivers.
Type drivers bestÀmmer de teknologier som kommer att anvÀndas för att organisera nÀtverksanslutningar, som VxLAN, VLAN, GRE. Samtidigt tillÄter drivrutinen anvÀndning av olika teknologier. Den standardiserade teknologin Àr VxLAN-inkapsling för overlay-nÀtverk och VLAN för externa nÀtverk.
De typer av nÀtverk som tillhör Type drivers Àr:
Flat â nĂ€tverk utan taggning
VLAN â taggat nĂ€tverk
Local â en speciell typ av nĂ€tverk för installationer av typen all-in-one (sĂ„dana installationer behövs antingen för utvecklare eller för utbildning)
GRE â overlay-nĂ€tverk som anvĂ€nder GRE-tunnlar
VxLAN â overlay-nĂ€tverk som anvĂ€nder VxLAN-tunnlar
Mechanism drivers definierar medel som sĂ€kerstĂ€ller organisationen av de angivna type driver teknologierna â till exempel openvswitch, sr-iov, opendaylight, OVN etc.
Beroende pÄ implementationen av denna drivrutin kommer antingen agenter som hanteras av Neutron att anvÀndas, eller sÄ kommer anslutningar till en extern SDN-kontrollör att anvÀndas, som tar hand om alla frÄgor gÀllande organisering av L2-nÀtverk, routning etc.
Ett exempel Ă€r om vi anvĂ€nder ML2 tillsammans med OVS, sĂ„ installeras en L2-agent pĂ„ varje berĂ€kningsnod, som hanterar OVS. Men om vi till exempel anvĂ€nder OVN eller OpenDayLight, sĂ„ övergĂ„r hanteringen av OVS till deras jurisdiktion â Neutron ger genom rotpluginet kommandon till kontrollören, och denne gör sedan det som har beordrats.
LÄt oss pÄminna om Open vSwitch
För nÀrvarande Àr en av de viktigaste komponenterna i OpenStack Open vSwitch.
Vid installation av OpenStack utan nÄgon ytterligare leverantörsspecifik SDN som Juniper Contrail eller Nokia Nuage, Àr OVS den primÀra nÀtverkskomponenten i det molnbaserade nÀtverket och i kombination med iptables, conntrack, namespaces möjliggör det att organisera fullt funktionsdugliga overlay-nÀtverk med multitenancy. Naturligtvis kan denna komponent bytas ut, till exempel vid anvÀndning av tredjeparts proprietÀra (leverantörsspecifika) SDN-lösningar.
OVS Àr en programvaruswitch med öppen kÀllkod som Àr avsedd att anvÀndas i virtualiserade miljöer som en virtuell trafikdirigerare.
För nÀrvarande har OVS en mycket anstÀndig funktionalitet som inkluderar teknologier som QoS, LACP, VLAN, VxLAN, GENEVE, OpenFlow, DPDK etc.
Observera: OVS var ursprungligen inte avsedd som en programvaruswitch för högbelastade telekomfunktioner och var mer anpassad för mindre krav pÄ bandbredd IT-funktioner som webbservrar eller e-postservrar. Men OVS har förbÀttrats och de nuvarande implementationerna av OVS har kraftigt förbÀttrat dess prestanda och kapabiliteter vilket gör att den kan anvÀndas av operatörer för kommunikation med högbelastade funktioner, till exempel finns det en implementation av OVS med stöd för DPDK-acceleration.
Det finns tre viktiga komponenter i OVS som bör beaktas:
- Kernelmodul â komponenten som finns i kernelutrymmet, som utför trafikbearbetning baserat pĂ„ de regler som mottagits frĂ„n kontrollenheten;
- vSwitch Daemon (ovs-vswitchd) Ă€r en process som körs i anvĂ€ndarutrymmet och ansvarar för programmeringen av kernelmodulen â det representerar direkt logiken för hur switchen fungerar.
- Databasserver â en lokal databas som ligger pĂ„ varje vĂ€rd dĂ€r OVS körs, dĂ€r konfigurationen lagras. Genom denna modul kan SDN-kontrollörer kommunicera via OVSDB-protokollet.
DÀrtill finns en uppsÀttning diagnostiska och hanteringsverktyg, som ovs-vsctl, ovs-appctl, ovs-ofctl etc.
För tillfĂ€llet anvĂ€nds OpenStack i stor utstrĂ€ckning av telekombolag för att migrera nĂ€tverksfunktioner som EPC, SBC, HLR etc. Vissa funktioner kan fungera utan problem med OVS i dess nuvarande form, men till exempel EPC hanterar abonnenttrafik â det vill sĂ€ga passerar ett stort mĂ€ngd trafik (just nu nĂ„r trafikvolymerna flera hundra gigabit per sekund). Det Ă€r uppenbarligen ingen bra idĂ© att leda sĂ„dan trafik genom kernelutrymmet (eftersom standardforwardern ligger dĂ€r). DĂ€rför implementeras OVS ofta helt i anvĂ€ndarutrymmet med hjĂ€lp av DPDK-teknologi för att omdirigera trafik frĂ„n NIC till anvĂ€ndarutrymmet utan att gĂ„ via kernel.
Observera: För ett moln som implementerats för telekomfunktioner finns det en möjlighet att leda trafik frÄn compute-noden direkt till switchutrustningen utan att gÄ via OVS. För detta ÀndamÄl anvÀnds mekanismer som SR-IOV och Passthrough.
Hur fungerar detta pÄ en verklig modell?
Nu gÄr vi vidare till den praktiska delen och ser hur allt detta fungerar i praktiken.
Först kommer vi att installera en enkel OpenStack-installation. Eftersom jag för experimentet inte har en uppsĂ€ttning servrar tillgĂ€ngliga, kommer vi att bygga modellen pĂ„ en fysisk server med hjĂ€lp av virtuella maskiner. Ja, det Ă€r uppenbart att en sĂ„dan lösning inte Ă€r lĂ€mplig för kommersiella Ă€ndamĂ„l, men för att se hur nĂ€tverket fungerar i en OpenStack-installation Ă€r den hĂ€r installationen mer Ă€n tillrĂ€cklig. Dessutom Ă€r en sĂ„dan installation för utbildningsĂ€ndamĂ„l Ă€nnu mer intressant â eftersom man kan fĂ„nga upp trafik etc.
Eftersom vi bara behöver se den grundlĂ€ggande delen, kan vi undvika att anvĂ€nda flera nĂ€tverk och istĂ€llet anvĂ€nda tvĂ„ nĂ€tverk, dĂ€r det andra nĂ€tverket i denna modell endast kommer att anvĂ€ndas för Ă„tkomst till undercloud och DNS-servern. Vi kommer att undvika externa nĂ€tverk för tillfĂ€llet â det Ă€r ett Ă€mne för en separat stor artikel.
LĂ„t oss börja i ordning. Först lite teori. Vi kommer att installera OpenStack med hjĂ€lp av TripleO (OpenStack pĂ„ OpenStack). Essensen av TripleO Ă€r att vi installerar OpenStack all-in-one (det vill sĂ€ga pĂ„ en nod), kallad undercloud, och sedan anvĂ€nder vi de resurser som det distribuerade OpenStack erbjuder för att installera det produktionsinriktade OpenStack, kallad overcloud. Undercloud kommer att anvĂ€nda inbyggd funktionalitet för att hantera fysiska servrar (bare metal) â projektet Ironic â för att provisionera hypervisorer som kommer att utföra rollerna av compute-, control- och storage-noder. Det innebĂ€r att vi inte anvĂ€nder nĂ„gra tredjepartsverktyg för att distribuera OpenStack â vi distribuerar OpenStack med hjĂ€lp av OpenStack. Det kommer att bli mycket tydligare under installationen, sĂ„ vi stannar inte hĂ€r utan gĂ„r vidare.
AnmĂ€rkning: I denna artikel för enkelhetens skull valde jag att inte anvĂ€nda nĂ€tverksisolering för interna nĂ€tverk av OpenStack, utan allt Ă€r distribuerat med hjĂ€lp av endast ett nĂ€tverk. Men förekomsten eller frĂ„nvaron av nĂ€tverksisolering pĂ„verkar inte grundlĂ€ggande funktionalitet â allt kommer att fungera precis som med isolering, men trafiken kommer att gĂ„ inom ett och samma nĂ€tverk. För en kommersiell installation Ă€r det sjĂ€lvklart nödvĂ€ndigt att anvĂ€nda isolering med olika VLAN och grĂ€nssnitt. Till exempel anvĂ€nder hanteringstrafik för Ceph-lagringen och faktiska datatrafik (maskinernas Ă„tkomst till diskar osv.) vid isolering olika subnĂ€t (Storage management och Storage), vilket gör lösningen mer fel tolerant genom att dela upp trafiken, till exempel över olika portar, eller anvĂ€nda olika QoS-profiler för att se till att datatrafiken inte överbelastat signalsignaler. I vĂ„rt fall kommer de att gĂ„ inom samma nĂ€tverk och faktiskt begrĂ€nsar det oss inte pĂ„ nĂ„got sĂ€tt.
AnmÀrkning: Eftersom vi planerar att köra virtuella maskiner i en virtuell miljö som baseras pÄ virtuella maskiner, mÄste vi först aktivera nested virtualisering.
För att kontrollera om nested virtualisering Àr aktiverat eller inte kan man göra sÄ hÀr:
[root@hp-gen9 bormoglotx]# cat /sys/module/kvm_intel/parameters/nested N [root@hp-gen9 bormoglotx]#Om du ser bokstaven N, aktiverar du stöd för nested virtualisering med vilken guide som helst du hittar pÄ nÀtet, till exempel .
Vi behöver skapa en sÄdan hÀr struktur av virtuella maskiner:

I mitt fall anvÀnde jag OpenvSwitch för att koppla samman virtuella maskiner som skulle ingÄ i den framtida installationen (jag har 7 stycken, men det gÄr att klara sig med 4 om du har fÄ resurser). Jag skapade en ovs-bro och kopplade virtuella maskiner till den via port-grupper. För detta skapade jag en xml-fil av följande typ:
[root@hp-gen9 ~]# virsh net-dumpxml ovs-network-1
ovs-network-1
7a2e7de7-fc16-4e00-b1ed-4d190133af67HĂ€r deklareras tre portgrupper â tvĂ„ access och en trunk (den sistnĂ€mnda var nödvĂ€ndig för DNS-servern, men den kan uteslutas eller köras pĂ„ vĂ€rdmaskinen â det beror pĂ„ vad som passar dig bĂ€st). DĂ€refter definierar vi vĂ„rt nĂ€tverk med hjĂ€lp av följande mall genom virsh net-define:
virsh net-define ovs-network-1.xml
virsh net-start ovs-network-1
virsh net-autostart ovs-network-1 Nu justerar vi konfigurationerna för hypervisorportarna:
[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens1f0
TYPE=Ethernet
NAME=ens1f0
DEVICE=ens1f0
TYPE=OVSPort
DEVICETYPE=ovs
OVS_BRIDGE=ovs-br1
ONBOOT=yes
OVS_OPTIONS="trunk=100,101,102"
[root@hp-gen9 ~]
[root@hp-gen9 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ovs-br1
DEVICE=ovs-br1
DEVICETYPE=ovs
TYPE=OVSBridge
BOOTPROTO=static
ONBOOT=yes
IPADDR=192.168.255.200
PREFIX=24
[root@hp-gen9 ~]# Notera: i detta scenario kommer adressen pÄ porten ovs-br1 inte att vara tillgÀnglig, dÄ den saknar en vlan-tagg. För att ÄtgÀrda detta, ge kommandot sudo ovs-vsctl set port ovs-br1 tag=100. Men efter omstart kommer denna tagg att försvinna (om nÄgon vet hur man fÄr den att stanna kvar, skulle jag vara mycket tacksam). Men detta Àr inte sÄ viktigt, eftersom vi endast kommer att behöva denna adress under installationen, och den kommer att vara överflödig nÀr Openstack Àr fullt installerad.
DĂ€refter skapar vi undercloud-maskinen:
virt-install -n undercloud --description "undercloud" --os-type=Linux --os-variant=centos7.0 --ram=8192 --vcpus=8 --disk path=/var/lib/libvirt/images/undercloud.qcow2,bus=virtio,size=40,format=qcow2 --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=access-101 --graphics none --location /var/lib/libvirt/boot/CentOS-7-x86_64-Minimal-2003.iso --extra-args console=ttyS0Under installation, set all necessary parameters such as the machine name, passwords, users, NTP servers, etc. You can also configure the ports immediately, but personally, I find it easier to access the machine through the console after installation and adjust the necessary files. If you already have a ready-made image, you can use it, or proceed as I do - download the minimal CentOS 7 image and use it to install the VM.
After a successful installation, you should have a virtual machine where you can install the undercloud.
[root@hp-gen9 bormoglotx]# virsh list
Id Name State
----------------------------------------------------
6 dns-server running
62 undercloud runningFirst, we install the necessary tools for the installation process:
sudo yum update -y
sudo yum install -y net-tools
sudo yum install -y wget
sudo yum install -y ipmitool
Installing Undercloud
Create a user stack, set the password, add it to the sudoers, and give it the ability to execute root commands via sudo without needing to enter a password:
useradd stack
passwd stack
echo "stack ALL=(root) NOPASSWD:ALL" > /etc/sudoers.d/stack
chmod 0440 /etc/sudoers.d/stackNow specify the full name of undercloud in the hosts file:
vi /etc/hosts
127.0.0.1 undercloud.openstack.rnd localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6Next, add the repositories and install the necessary software:
sudo yum install -y https://trunk.rdoproject.org/centos7/current/python2-tripleo-repos-0.0.1-0.20200409224957.8bac392.el7.noarch.rpm
sudo -E tripleo-repos -b queens current
sudo -E tripleo-repos -b queens current ceph
sudo yum install -y python-tripleoclient
sudo yum install -y ceph-ansibleNote: If you do not plan to install ceph, do not enter commands related to ceph. I used the Queens release, but you can use any other one you prefer.
Next, copy the undercloud configuration file to the stack user's home directory:
cp /usr/share/instack-undercloud/undercloud.conf.sample ~/undercloud.confNow it is necessary to adjust this file, tailoring it to our installation.
At the beginning of the file, you need to add the following lines:
vi undercloud.conf
[DEFAULT]
undercloud_hostname = undercloud.openstack.rnd
local_ip = 192.168.255.1/24
network_gateway = 192.168.255.1
undercloud_public_host = 192.168.255.2
undercloud_admin_host = 192.168.255.3
undercloud_nameservers = 192.168.255.253
generate_service_certificate = false
local_interface = eth0
local_mtu = 1450
network_cidr = 192.168.255.0/24
masquerade = true
masquerade_network = 192.168.255.0/24
dhcp_start = 192.168.255.11
dhcp_end = 192.168.255.50
inspection_iprange = 192.168.255.51,192.168.255.100
scheduler_max_attempts = 10So, let's go through the settings:
undercloud_hostname â the full name of the undercloud server, it must match the entry on the DNS server
local_ip â lokal adress för undercloud mot provisioning nĂ€tverk
network_gateway â samma lokala adress som kommer att fungera som gateway för att fĂ„ Ă„tkomst till den externa vĂ€rlden under installationen av overcloud noder, överensstĂ€mmer ocksĂ„ med lokal ip
undercloud_public_host â adress för extern API, tilldelas vilken ledig adress som helst frĂ„n provisioning nĂ€tverk
undercloud_admin_host adress för intern API, tilldelas vilken ledig adress som helst frÄn provisioning nÀtverk
undercloud_nameservers â DNS-server
generate_service_certificate â denna rad Ă€r mycket viktig i det aktuella exemplet, eftersom om den inte sĂ€tts till vĂ€rdet false kommer du att fĂ„ ett fel vid installationen, problemet beskrivs pĂ„ bugtracker Red Hat
local_interface grĂ€nssnitt i provisioning nĂ€tverket. Detta grĂ€nssnitt kommer att omkonfigureras under installationen av undercloud, sĂ„ det behövs tvĂ„ grĂ€nssnitt för undercloud â ett för Ă„tkomst till det, det andra för provisioning
local_mtu â MTU. Eftersom vi har ett testlaboratorium och MTU Ă€r 1500 pĂ„ OVS switchportar, mĂ„ste vi stĂ€lla in det pĂ„ 1450 sĂ„ att de inkapslade VxLAN-paketen passerar
network_cidr â provisioning nĂ€tverk
masquerade â anvĂ€ndning av NAT för Ă„tkomst till det externa nĂ€tverket
masquerade_network â nĂ€tverk som kommer att NAT:as
dhcp_start â startadress för adresspoolen frĂ„n vilken adresser kommer att tilldelas noder under deployment av overcloud
dhcp_end â slutadress för adresspoolen frĂ„n vilken adresser kommer att tilldelas noder under deployment av overcloud
inspection_iprange â adresser som behövs för inspektion (fĂ„r inte överlappa med ovanstĂ„ende pool)
scheduler_max_attempts â maximalt antal försök för att installera overcloud (mĂ„ste vara större Ă€n eller lika med antalet noder)
NÀr filen har beskrivits kan du ge kommandot för att deploya undercloud:
openstack undercloud install
Proceduren tar 10 till 30 minuter beroende pÄ din hÄrdvara. Slutligen bör du se en sÄdan utdata:
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.
#############################################################################Denna utdata visar att du har lyckats installera undercloud och nu kan kontrollera tillstÄndet för undercloud och gÄ vidare till installationen av overcloud.
Om du tittar pÄ utdata frÄn ifconfig, kommer du att se att en ny brygggrÀnssnitt har dykt upp
[stack@undercloud ~]$ ifconfig
br-ctlplane: flags=4163 mtu 1450
inet 192.168.255.1 netmask 255.255.255.0 broadcast 192.168.255.255
inet6 fe80::5054:ff:fe2c:89e prefixlen 64 scopeid 0x20
ether 52:54:00:2c:08:9e txqueuelen 1000 (Ethernet)
RX packets 14 bytes 1095 (1.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 20 bytes 1292 (1.2 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0Genom detta grÀnssnitt kommer vi nu att arbeta med att distribuera overcloud.
FrÄn utskriften nedan kan vi se att alla tjÀnster finns pÄ en nod:
(undercloud) [stack@undercloud ~]$ openstack host list
+--------------------------+-----------+----------+
| Host Name | Service | Zone |
+--------------------------+-----------+----------+
| undercloud.openstack.rnd | conductor | internal |
| undercloud.openstack.rnd | scheduler | internal |
| undercloud.openstack.rnd | compute | nova |
+--------------------------+-----------+----------+Nedan visas konfigurationen för det nÀtverksmÀssiga undercloud:
(undercloud) [stack@undercloud ~]$ python -m json.tool /etc/os-net-config/config.json
{
"network_config": [
{
"addresses": [
{
"ip_netmask": "192.168.255.1/24"
}
],
"members": [
{
"dns_servers": [
"192.168.255.253"
],
"mtu": 1450,
"name": "eth0",
"primary": "true",
"type": "interface"
}
],
"mtu": 1450,
"name": "br-ctlplane",
"ovs_extra": [
"br-set-external-id br-ctlplane bridge-id br-ctlplane"
],
"routes": [],
"type": "ovs_bridge"
}
]
}
(undercloud) [stack@undercloud ~]$Installation av overcloud
För nĂ€rvarande har vi bara undercloud, och vi saknar noder som kommer att byggas upp till overcloud. SĂ„ det första vi ska göra Ă€r att distribuera de virtuella maskiner vi behöver. Under distributionen kommer undercloud att installera operativsystemet och nödvĂ€ndig programvara pĂ„ overcloud-maskinerna â vilket betyder att vi inte behöver distribuera en maskin helt, utan bara skapa en disk (eller diskar) för den och definiera dess parametrar â vi fĂ„r faktiskt en ren server utan installerat operativsystem.
Vi gÄr till mappen med diskarna för vÄra virtuella maskiner och skapar diskar av önskad storlek:
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -o preallocation=metadata control-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-1.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata compute-2.qcow2 60G
qemu-img create -f qcow2 -o preallocation=metadata storage-1.qcow2 160G
qemu-img create -f qcow2 -o preallocation=metadata storage-2.qcow2 160GEftersom vi agerar som root mÄste vi Àndra Àgaren av dessa diskar för att inte fÄ problem med behörigheter:
[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]# Observera: om du inte planerar att installera Ceph för att studera det, bör du minst skapa 3 noder med minst tvÄ diskar, och i mallen ange att virtuella diskar vda, vdb osv. kommer att anvÀndas.
Bra, nu behöver vi definiera alla dessa maskiner:
virt-install --name control-1 --ram 32768 --vcpus 8 --os-variant centos7.0 --disk path=\/var\/lib\/libvirt\/images\/control-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc --network network:ovs-network-1,model=virtio,portgroup=access-100 --network network:ovs-network-1,model=virtio,portgroup=trunk-1 --dry-run --print-xml > \/tmp\/control-1.xml
virt-install --name storage-1 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=\/var\/lib\/libvirt\/images\/storage-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > \/tmp\/storage-1.xml
virt-install --name storage-2 --ram 16384 --vcpus 4 --os-variant centos7.0 --disk path=\/var\/lib\/libvirt\/images\/storage-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > \/tmp\/storage-2.xml
virt-install --name compute-1 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=\/var\/lib\/libvirt\/images\/compute-1.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > \/tmp\/compute-1.xml
virt-install --name compute-2 --ram 32768 --vcpus 12 --os-variant centos7.0 --disk path=\/var\/lib\/libvirt\/images\/compute-2.qcow2,device=disk,bus=virtio,format=qcow2 --noautoconsole --vnc --network network:ovs-network-1,model=virtio,portgroup=access-100 --dry-run --print-xml > \/tmp\/compute-2.xml I slutet finns kommandona âprint-xml > \/tmp\/storage-1.xml, som skapar en xml-fil med beskrivningen av varje maskin i mappen \/tmp\/. Om du inte lĂ€gger till det kan du inte definiera de virtuella maskinerna.
Nu behöver vi definiera alla dessa maskiner i virsh:
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 ~]#Nu en liten detalj â tripleO anvĂ€nder IPMI för att styra servrar under installation och introspektion.
Introspektion Ă€r en process för inspektion av hĂ„rdvaran för att fĂ„ dess parametrar som krĂ€vs för vidare provisioning av noder. Introspektion utförs med hjĂ€lp av ironic â en tjĂ€nst avsedd för att arbeta med bare metal-servrar.
Men hĂ€r Ă€r problemet â om för hĂ„rdvaruservrar Ă€r IPMI en separat port (eller en delad port, men det Ă€r inte avgörande), sĂ„ har virtuella maskiner inga sĂ„dana portar. HĂ€r kommer en lösning som kallas vbmc â ett verktyg som möjliggör emulering av en IPMI-port. Detta bör sĂ€rskilt beaktas av dem som vill bygga ett sĂ„dant laboratorium pĂ„ ESXI-hypervisorn â om det nu finns nĂ„got motsvarande till vbmc dĂ€r, sĂ„ Ă€r det vĂ€rt att tĂ€nka pĂ„ detta innan man implementerar allt.
Installerar vbmc:
yum install yum install python2-virtualbmcOm ditt operativsystem inte kan hitta paketet, lÀgg till repositoryt:
yum install -y https://www.rdoproject.org/repos/rdo-release.rpmNu konfigurerar vi verktyget. HÀr Àr allt banal till otrevlighet. Just nu Àr det logiskt att det inte finns nÄgra servrar listade i vbmc.
[root@hp-gen9 ~]# vbmc list
[root@hp-gen9 ~]# För att de ska dyka upp mÄste de manuellt deklareras pÄ följande sÀtt:
[root@hp-gen9 ~]# vbmc add control-1 --port 7001 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-1 --port 7002 --username admin --password admin
[root@hp-gen9 ~]# vbmc add storage-2 --port 7003 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-1 --port 7004 --username admin --password admin
[root@hp-gen9 ~]# vbmc add compute-2 --port 7005 --username admin --password admin
[root@hp-gen9 ~]#
[root@hp-gen9 ~]# vbmc list
+-------------+--------+---------+------+
| Domain name | Status | Address | Port |
+-------------+--------+---------+------+
| compute-1 | down | :: | 7004 |
| compute-2 | down | :: | 7005 |
| control-1 | down | :: | 7001 |
| storage-1 | down | :: | 7002 |
| storage-2 | down | :: | 7003 |
+-------------+--------+---------+------+
[root@hp-gen9 ~]#Jag tror att syntaxen för kommandot Àr tydlig utan förklaringar. Men hittills Àr alla vÄra sessioner i status DOWN. För att de ska gÄ över till status UP mÄste de slÄs pÄ:
[root@hp-gen9 ~]# vbmc start control-1
2020-08-14 03:15:57,826.826 13149 INFO VirtualBMC [-] Startade vBMC-instansen för domÀn control-1
[root@hp-gen9 ~]# vbmc start storage-1
2020-08-14 03:15:58,316.316 13149 INFO VirtualBMC [-] Startade vBMC-instansen för domÀn storage-1
[root@hp-gen9 ~]# vbmc start storage-2
2020-08-14 03:15:58,851.851 13149 INFO VirtualBMC [-] Startade vBMC-instansen för domÀn storage-2
[root@hp-gen9 ~]# vbmc start compute-1
2020-08-14 03:15:59,307.307 13149 INFO VirtualBMC [-] Startade vBMC-instansen för domÀn compute-1
[root@hp-gen9 ~]# vbmc start compute-2
2020-08-14 03:15:59,712.712 13149 INFO VirtualBMC [-] Startade vBMC-instansen för domÀn compute-2
[root@hp-gen9 ~]#
[root@hp-gen9 ~]#
[root@hp-gen9 ~]# vbmc list
+-------------+---------+---------+------+
| DomÀnnamn | Status | Adress | Port |
+-------------+---------+---------+------+
| compute-1 | kör | :: | 7004 |
| compute-2 | kör | :: | 7005 |
| control-1 | kör | :: | 7001 |
| storage-1 | kör | :: | 7002 |
| storage-2 | kör | :: | 7003 |
+-------------+---------+---------+------+
[root@hp-gen9 ~]#Och den sista detaljen â vi mĂ„ste justera brandvĂ€ggsreglerna (eller stĂ€nga av den helt):
firewall-cmd --zone=public --add-port=7001/udp --permanent
firewall-cmd --zone=public --add-port=7002/udp --permanent
firewall-cmd --zone=public --add-port=7003/udp --permanent
firewall-cmd --zone=public --add-port=7004/udp --permanent
firewall-cmd --zone=public --add-port=7005/udp --permanent
firewall-cmd --reload
Nu gÄr vi in i undercloud och kontrollerar att allt fungerar. Adressen till vÀrdmaskinen Àr 192.168.255.200, och vi har lagt till det nödvÀndiga paketet ipmitool under förberedelserna för deployment:
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Chassinets ström Àr av
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power on
Chassikontroll: PĂ„
[stack@undercloud ~]$
[root@hp-gen9 ~]# virsh list
Id Namn Status
----------------------------------------------------
6 dns-server kör
64 undercloud kör
65 control-1 körSom ni ser har vi framgÄngsrikt startat control-noden via vbmc. Nu stÀnger vi av den och fortsÀtter:
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power off
Chassikontroll: Av
[stack@undercloud ~]$ ipmitool -I lanplus -U admin -P admin -H 192.168.255.200 -p 7001 power status
Chassinets ström Àr av
[stack@undercloud ~]$
[root@hp-gen9 ~]# virsh list --all
Id Namn Status
----------------------------------------------------
6 dns-server kör
64 undercloud kör
- compute-1 avstÀngd
- compute-2 avstÀngd
- control-1 avstÀngd
- storage-1 avstÀngd
- storage-2 avstÀngd
[root@hp-gen9 ~]#NÀsta steg Àr att göra en inspektion av noderna dÀr overcloud ska installeras. För detta behöver vi förbereda en json-fil med beskrivning av vÄra noder. Observera att, till skillnad frÄn installation pÄ rena servrar, anges porten dÀr vbmc Àr igÄng för varje maskin i filen.
[root@hp-gen9 ~]# virsh domiflist --domain control-1
Interface Typ KĂ€lla Modell MAC
-------------------------------------------------------
- nÀtverk ovs-network-1 virtio 52:54:00:20:a2:2f
- nÀtverk ovs-network-1 virtio 52:54:00:3f:87:9f
[root@hp-gen9 ~]# virsh domiflist --domain compute-1
Interface Typ KĂ€lla Modell MAC
-------------------------------------------------------
- nÀtverk ovs-network-1 virtio 52:54:00:98:e9:d6
[root@hp-gen9 ~]# virsh domiflist --domain compute-2
Interface Typ KĂ€lla Modell MAC
-------------------------------------------------------
- nÀtverk ovs-network-1 virtio 52:54:00:6a:ea:be
[root@hp-gen9 ~]# virsh domiflist --domain storage-1
Interface Typ KĂ€lla Modell MAC
-------------------------------------------------------
- nÀtverk ovs-network-1 virtio 52:54:00:79:0b:cb
[root@hp-gen9 ~]# virsh domiflist --domain storage-2
Interface Typ KĂ€lla Modell MAC
-------------------------------------------------------
- nÀtverk ovs-network-1 virtio 52:54:00:a7:fe:27Obs: pÄ kontrollnoden finns det tvÄ grÀnssnitt, men i detta fall spelar det ingen roll, vi behöver bara ett i denna installation.
Nu förbereder vi JSON-filen. Vi mÄste ange MAC-adressen för porten som provisioning ska utföras genom, noderna, ge dem namn och ange hur man fÄr tillgÄng till IPMI:
{
"nodes":[
{
"mac":[
"52:54:00:20:a2:2f"
],
"cpu":"8",
"memory":"32768",
"disk":"60",
"arch":"x86_64",
"name":"control-1",
"pm_type":"pxe_ipmitool",
"pm_user":"admin",
"pm_password":"admin",
"pm_addr":"192.168.255.200",
"pm_port":"7001"
},
{
"mac":[
"52:54:00:79:0b:cb"
],
"cpu":"4",
"memory":"16384",
"disk":"160",
"arch":"x86_64",
"name":"storage-1",
"pm_type":"pxe_ipmitool",
"pm_user":"admin",
"pm_password":"admin",
"pm_addr":"192.168.255.200",
"pm_port":"7002"
},
{
"mac":[
"52:54:00:a7:fe:27"
],
"cpu":"4",
"memory":"16384",
"disk":"160",
"arch":"x86_64",
"name":"storage-2",
"pm_type":"pxe_ipmitool",
"pm_user":"admin",
"pm_password":"admin",
"pm_addr":"192.168.255.200",
"pm_port":"7003"
},
{
"mac":[
"52:54:00:98:e9:d6"
],
"cpu":"12",
"memory":"32768",
"disk":"60",
"arch":"x86_64",
"name":"compute-1",
"pm_type":"pxe_ipmitool",
"pm_user":"admin",
"pm_password":"admin",
"pm_addr":"192.168.255.200",
"pm_port":"7004"
},
{
"mac":[
"52:54:00:6a:ea:be"
],
"cpu":"12",
"memory":"32768",
"disk":"60",
"arch":"x86_64",
"name":"compute-2",
"pm_type":"pxe_ipmitool",
"pm_user":"admin",
"pm_password":"admin",
"pm_addr":"192.168.255.200",
"pm_port":"7005"
}
]
}Nu mÄste vi förbereda bilder för Ironic. För detta laddar vi ner dem via wget och installerar:
(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 ~]$Laddar bilder till undercloud:
(undercloud) [stack@undercloud ~]$ openstack overcloud image upload --image-path ~/images/
Bild "overcloud-full-vmlinuz" har laddats upp.
+--------------------------------------+------------------------+-------------+---------+--------+
| ID | Namn | Diskformat | Storlek | Status |
+--------------------------------------+------------------------+-------------+---------+--------+
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | aki | 6761064 | aktiv |
+--------------------------------------+------------------------+-------------+---------+--------+
Bild "overcloud-full-initrd" har laddats upp.
+--------------------------------------+-----------------------+-------------+----------+--------+
| ID | Namn | Diskformat | Storlek | Status |
+--------------------------------------+-----------------------+-------------+----------+--------+
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd | ari | 55183045 | aktiv |
+--------------------------------------+-----------------------+-------------+----------+--------+
Bild "overcloud-full" har laddats upp.
+--------------------------------------+----------------+-------------+------------+--------+
| ID | Namn | Diskformat | Storlek | Status |
+--------------------------------------+----------------+-------------+------------+--------+
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full | qcow2 | 1487475712 | aktiv |
+--------------------------------------+----------------+-------------+------------+--------+
Bild "bm-deploy-kernel" har laddats upp.
+--------------------------------------+------------------+-------------+---------+--------+
| ID | Namn | Diskformat | Storlek | Status |
+--------------------------------------+------------------+-------------+---------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel | aki | 6761064 | aktiv |
+--------------------------------------+------------------+-------------+---------+--------+
Bild "bm-deploy-ramdisk" har laddats upp.
+--------------------------------------+-------------------+-------------+-----------+--------+
| ID | Namn | Diskformat | Storlek | Status |
+--------------------------------------+-------------------+-------------+-----------+--------+
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk | ari | 461759376 | aktiv |
+--------------------------------------+-------------------+-------------+-----------+--------+
(undercloud) [stack@undercloud ~]$Vi kontrollerar att alla bilder har laddats upp.
(undercloud) [stack@undercloud ~]$ openstack image list
+--------------------------------------+------------------------+--------+
| ID | Namn | Status |
+--------------------------------------+------------------------+--------+
| e413aa78-e38f-404c-bbaf-93e582a8e67f | bm-deploy-kernel | aktiv |
| 5cf3aba4-0e50-45d3-929f-27f025dd6ce3 | bm-deploy-ramdisk | aktiv |
| a2f2096d-c9d7-429a-b866-c7543c02a380 | overcloud-full | aktiv |
| 949984e0-4932-4e71-af43-d67a38c3dc89 | overcloud-full-initrd | aktiv |
| c2553770-3e0f-4750-b46b-138855b5c385 | overcloud-full-vmlinuz | aktiv |
+--------------------------------------+------------------------+--------+
(undercloud) [stack@undercloud ~]$En sista detalj â vi behöver lĂ€gga till dns-servern:
(undercloud) [stack@undercloud ~]$ openstack subnet list
+--------------------------------------+-----------------+--------------------------------------+------------------+
| ID | Name | Network | Subnet |
+--------------------------------------+-----------------+--------------------------------------+------------------+
| f45dea46-4066-42aa-a3c4-6f84b8120cab | ctlplane-subnet | 6ca013dc-41c2-42d8-9d69-542afad53392 | 192.168.255.0/24 |
+--------------------------------------+-----------------+--------------------------------------+------------------+
(undercloud) [stack@undercloud ~]$ openstack subnet show f45dea46-4066-42aa-a3c4-6f84b8120cab
+-------------------+-----------------------------------------------------------+
| Field | Value |
+-------------------+-----------------------------------------------------------+
| allocation_pools | 192.168.255.11-192.168.255.50 |
| cidr | 192.168.255.0/24 |
| created_at | 2020-08-13T20:10:37Z |
| description | |
| dns_nameservers | |
| enable_dhcp | True |
| gateway_ip | 192.168.255.1 |
| host_routes | destination='169.254.169.254/32', gateway='192.168.255.1' |
| id | f45dea46-4066-42aa-a3c4-6f84b8120cab |
| ip_version | 4 |
| ipv6_address_mode | None |
| ipv6_ra_mode | None |
| name | ctlplane-subnet |
| network_id | 6ca013dc-41c2-42d8-9d69-542afad53392 |
| prefix_length | None |
| project_id | a844ccfcdb2745b198dde3e1b28c40a3 |
| revision_number | 0 |
| segment_id | None |
| service_types | |
| subnetpool_id | None |
| tags | |
| updated_at | 2020-08-13T20:10:37Z |
+-------------------+-----------------------------------------------------------+
(undercloud) [stack@undercloud ~]$
(undercloud) [stack@undercloud ~]$ neutron subnet-update f45dea46-4066-42aa-a3c4-6f84b8120cab --dns-nameserver 192.168.255.253
neutron CLI is deprecated and will be removed in the future. Use openstack CLI instead.
Updated subnet: f45dea46-4066-42aa-a3c4-6f84b8120cab
(undercloud) [stack@undercloud ~]$Nu kan vi ge kommandot för introspektion:
(undercloud) [stack@undercloud ~]$ openstack overcloud node import --introspect --provide inspection.json
Startade Mistral-arbetsflödet tripleo.baremetal.v1.register_or_update. Utförande-ID: d57456a3-d8ed-479c-9a90-dff7c752d0ec
VÀntar pÄ meddelanden i kö 'tripleo' utan tidsgrÀns.
5 nod(er) flyttades framgÄngsrikt till "hanterbart" tillstÄnd.
Nod UUID b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 registrerad framgÄngsrikt.
Nod UUID b89a72a3-6bb7-429a-93bc-48393d225838 registrerad framgÄngsrikt.
Nod UUID 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e registrerad framgÄngsrikt.
Nod UUID bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 registrerad framgÄngsrikt.
Nod UUID 766ab623-464c-423d-a529-d9afb69d1167 registrerad framgÄngsrikt.
VÀntar pÄ att introspektion ska avslutas...
Startade Mistral-arbetsflödet tripleo.baremetal.v1.introspect. Utförande-ID: 6b4d08ae-94c3-4a10-ab63-7634ec198a79
VÀntar pÄ meddelanden i kö 'tripleo' utan tidsgrÀns.
Introspektion av nod b89a72a3-6bb7-429a-93bc-48393d225838 avslutad. Status: SUCCESS. Fel: Inga
Introspektion av nod 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e avslutad. Status: SUCCESS. Fel: Inga
Introspektion av nod bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 avslutad. Status: SUCCESS. Fel: Inga
Introspektion av nod 766ab623-464c-423d-a529-d9afb69d1167 avslutad. Status: SUCCESS. Fel: Inga
Introspektion av nod b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 avslutad. Status: SUCCESS. Fel: Inga
5 nod(er) introspekterades framgÄngsrikt.
Startade Mistral-arbetsflödet tripleo.baremetal.v1.provide. Utförande-ID: f5594736-edcf-4927-a8a0-2a7bf806a59a
VÀntar pÄ meddelanden i kö 'tripleo' utan tidsgrÀns.
5 nod(er) flyttades framgÄngsrikt till "tillgÀngligt" tillstÄnd.
(undercloud) [stack@undercloud ~]$Som framgÄr av utdata har allt avslutats utan fel. LÄt oss kontrollera att alla noder Àr i tillstÄndet tillgÀnglig:
(undercloud) [stack@undercloud ~]$ openstack baremetal node list
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| UUID | Namn | Instans UUID | StrömtillstÄnd | ProvisioneringstillstÄnd | UnderhÄll |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | Ingen | avstÀngd | tillgÀnglig | Falsk |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | Ingen | avstÀngd | tillgÀnglig | Falsk |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | Ingen | avstÀngd | tillgÀnglig | Falsk |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | Ingen | avstÀngd | tillgÀnglig | Falsk |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | Ingen | avstÀngd | tillgÀnglig | Falsk |
+--------------------------------------+-----------+---------------+-------------+--------------------+-------------+
(undercloud) [stack@undercloud ~]$ Om noderna Àr i ett annat tillstÄnd, vanligtvis hanterbart, har nÄgot gÄtt fel och du mÄste titta pÄ loggarna för att förstÄ varför det har blivit sÄ. TÀnk pÄ att i detta scenario anvÀnder vi virtualisering, och det kan finnas buggar kopplade till anvÀndningen av virtuella maskiner eller vbmc.
Vidare mĂ„ste vi ange vilken nod som ska utföra vilken funktion â det vill sĂ€ga ange profilen som noden ska distribueras med:
(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Nodens UUID | Nodens namn | Provision State | Nuvarande profil | Möjliga profiler |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | kontroll-1 | tillgÀnglig | Ingen | |
| b89a72a3-6bb7-429a-93bc-48393d225838 | lagring-1 | tillgÀnglig | Ingen | |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | lagring-2 | tillgÀnglig | Ingen | |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | berÀkning-1 | tillgÀnglig | Ingen | |
| 766ab623-464c-423d-a529-d9afb69d1167 | berÀkning-2 | tillgÀnglig | Ingen | |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$ openstack flavor list
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| ID | Namn | RAM | Disk | TemporĂ€r | VCPUs | Ăr offentlig |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
| 168af640-7f40-42c7-91b2-989abc5c5d8f | swift-lagring | 4096 | 40 | 0 | 1 | Sant |
| 52148d1b-492e-48b4-b5fc-772849dd1b78 | baremetal | 4096 | 40 | 0 | 1 | Sant |
| 56e66542-ae60-416d-863e-0cb192d01b09 | kontroll | 4096 | 40 | 0 | 1 | Sant |
| af6796e1-d0c4-4bfe-898c-532be194f7ac | block-lagring | 4096 | 40 | 0 | 1 | Sant |
| e4d50fdd-0034-446b-b72c-9da19b16c2df | berÀkning | 4096 | 40 | 0 | 1 | Sant |
| fc2e3acf-7fca-4901-9eee-4a4d6ef0265d | ceph-lagring | 4096 | 40 | 0 | 1 | Sant |
+--------------------------------------+---------------+------+------+-----------+-------+-----------+
(undercloud) [stack@undercloud ~]$Ange profil för varje nod:
openstack baremetal node set --property capabilities='profile:control,boot_option:local' b4b2cf4a-b7ca-4095-af13-cc83be21c4f5
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' b89a72a3-6bb7-429a-93bc-48393d225838
openstack baremetal node set --property capabilities='profile:ceph-storage,boot_option:local' 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8
openstack baremetal node set --property capabilities='profile:compute,boot_option:local' 766ab623-464c-423d-a529-d9afb69d1167Kontrollera att vi har gjort allt korrekt:
(undercloud) [stack@undercloud ~]$ openstack overcloud profiles list
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| Node UUID | Node Name | Provision State | Current Profile | Possible Profiles |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
| b4b2cf4a-b7ca-4095-af13-cc83be21c4f5 | control-1 | available | control | |
| b89a72a3-6bb7-429a-93bc-48393d225838 | storage-1 | available | ceph-storage | |
| 20a16cc0-e0ce-4d88-8f17-eb0ce7b4d69e | storage-2 | available | ceph-storage | |
| bfc1eb98-a17a-4a70-b0b6-6c0db0eac8e8 | compute-1 | available | compute | |
| 766ab623-464c-423d-a529-d9afb69d1167 | compute-2 | available | compute | |
+--------------------------------------+-----------+-----------------+-----------------+-------------------+
(undercloud) [stack@undercloud ~]$Om allt Àr korrekt, ger vi kommandot för att deploya övermolnet:
openstack overcloud deploy --templates --control-scale 1 --compute-scale 2 --ceph-storage-scale 2 --control-flavor control --compute-flavor compute --ceph-storage-flavor ceph-storage --libvirt-type qemuI en verklig installation kommer vi naturligtvis att anvĂ€nda anpassade mallar, vilket i vĂ„rt fall skulle komplicera processen avsevĂ€rt, eftersom vi skulle behöva förklara varje Ă€ndring i mallen. Som nĂ€mnts tidigare â Ă€ven en enkel installation Ă€r tillrĂ€cklig för att se hur det fungerar.
Observera: variabeln --libvirt-type qemu Àr nödvÀndig i detta fall, eftersom vi kommer att anvÀnda nested virtualisering. Annars kommer virtuella maskiner inte att kunna startas.
Nu har du ungefÀr en timme, kanske mer (beroende pÄ hÄrdvarans kapabiliteter) och du kan bara hoppas att efter denna tid, kommer du att se följande meddelande:
2020-08-14 08:39:21Z [overcloud]: CREATE_COMPLETE Stack CREATE completed successfully
Stack overcloud CREATE_COMPLETE
Host 192.168.255.21 not found in /home/stack/.ssh/known_hosts
Started Mistral Workflow tripleo.deployment.v1.get_horizon_url. Execution ID: fcb996cd-6a19-482b-b755-2ca0c08069a9
Overcloud Endpoint: http://192.168.255.21:5000/
Overcloud Horizon Dashboard URL: http://192.168.255.21:80/dashboard
Overcloud rc file: /home/stack/overcloudrc
Overcloud Deployed
(undercloud) [stack@undercloud ~]$Nu har du en nÀstan fullt fungerande version av OpenStack dÀr du kan lÀra dig, experimentera osv.
LĂ„t oss kontrollera att allt fungerar som det ska. I hemmappen för anvĂ€ndaren stack finns tvĂ„ filer â en stackrc (för att hantera undercloud) och den andra overcloudrc (för att hantera overcloud). Dessa filer mĂ„ste anges som source, eftersom de innehĂ„ller den information som krĂ€vs för autentisering.
(undercloud) [stack@undercloud ~]$ openstack server list
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| ID | Namn | Status | NĂ€tverk | Bild | Smak |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
| fd7d36f4-ce87-4b9a-93b0-add2957792de | overcloud-controller-0 | AKTIV | ctlplane=192.168.255.15 | overcloud-full | kontroll |
| edc77778-8972-475e-a541-ff40eb944197 | overcloud-novacompute-1 | AKTIV | ctlplane=192.168.255.26 | overcloud-full | berÀkning |
| 5448ce01-f05f-47ca-950a-ced14892c0d4 | overcloud-cephstorage-1 | AKTIV | ctlplane=192.168.255.34 | overcloud-full | ceph-lagring |
| ce6d862f-4bdf-4ba3-b711-7217915364d7 | overcloud-novacompute-0 | AKTIV | ctlplane=192.168.255.19 | overcloud-full | berÀkning |
| e4507bd5-6f96-4b12-9cc0-6924709da59e | overcloud-cephstorage-0 | AKTIV | ctlplane=192.168.255.44 | overcloud-full | ceph-lagring |
+--------------------------------------+-------------------------+--------+-------------------------+----------------+--------------+
(undercloud) [stack@undercloud ~]$
(undercloud) [stack@undercloud ~]$ source overcloudrc
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$ openstack project list
+----------------------------------+---------+
| ID | Namn |
+----------------------------------+---------+
| 4eed7d0f06544625857d51cd77c5bd4c | admin |
| ee1c68758bde41eaa9912c81dc67dad8 | service |
+----------------------------------+---------+
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$
(overcloud) [stack@undercloud ~]$ openstack network agent list
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| ID | Agenttyp | VÀrd | TillgÀnglighetszon | Aktiv | Status | BinÀr |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
| 10495de9-ba4b-41fe-b30a-b90ec3f8728b | Open vSwitch-agent | overcloud-novacompute-1.localdomain | Ingen | :-) | 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 | Ingen | :-) | UP | neutron-openvswitch-agent |
| d99c5657-851e-4d3c-bef6-f1e3bb1acfb0 | Open vSwitch-agent | overcloud-controller-0.localdomain | Ingen | :-) | UP | neutron-openvswitch-agent |
| ff85fae6-5543-45fb-a301-19c57b62d836 | Metadata-agent | overcloud-controller-0.localdomain | Ingen | :-) | UP | neutron-metadata-agent |
+--------------------------------------+--------------------+-------------------------------------+-------------------+-------+-------+---------------------------+
(overcloud) [stack@undercloud ~]$I min installation behövs det ett litet ytterligare steg - att lÀgga till en rutt pÄ kontrollern, eftersom maskinen jag arbetar pÄ ligger i ett annat nÀtverk. För detta loggar vi in pÄ control-1 med kontot heat-admin och lÀgger till rutten.
(undercloud) [stack@undercloud ~]$ ssh heat-admin@192.168.255.15
Senaste inloggning: fre 14 aug 09:47:40 2020 frÄn 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.254Nu kan ni gĂ„ in i horisonten. All information â adresser, inloggning och lösenord â finns i filen /home/stack/overcloudrc. Slutschemat ser ut som följer:

För övrigt, i vÄr installation tilldelades maskinernas adresser via DHCP och som ni ser, tilldelas de "slumptalsvis". Ni kan i mallen hÄrt ange vilken adress som ska knytas till vilken maskin under deployment, om ni sÄ önskar.
Hur gÄr trafiken mellan de virtuella maskinerna?
I denna artikel kommer vi att gÄ igenom tre alternativ för trafikflöde
- TvÄ maskiner pÄ samma hypervisor i samma L2-nÀtverk
- TvÄ maskiner pÄ olika hypervisorer i samma L2-nÀtverk
- TvÄ maskiner i olika nÀtverk (routing mellan nÀtverken)
Fall med utgÄng till den externa vÀrlden genom det externa nÀtverket, med anvÀndning av flytande adresser, samt distribuerad routing kommer vi att behandla nÀsta gÄng, men för tillfÀllet fokuserar vi pÄ intern trafik.
För att verifiera, lÄt oss skapa detta schema:

Vi har skapat 4 virtuella maskiner â 3 i samma L2-nĂ€tverk â net-1, och ytterligare 1 i nĂ€tverket net-2
(overcloud) [stack@undercloud ~]$ nova list --tenant 5e18ce8ec9594e00b155485f19895e6c
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| ID | Namn | Tenant ID | Status | Arbetsstatus | Strömstatus | NÀtverk |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
| f53b37b5-2204-46cc-aef0-dba84bf970c0 | vm-1 | 5e18ce8ec9594e00b155485f19895e6c | AKTIV | - | PÄgÄr | net-1=10.0.1.85 |
| fc8b6722-0231-49b0-b2fa-041115bef34a | vm-2 | 5e18ce8ec9594e00b155485f19895e6c | AKTIV | - | PÄgÄr | net-1=10.0.1.88 |
| 3cd74455-b9b7-467a-abe3-bd6ff765c83c | vm-3 | 5e18ce8ec9594e00b155485f19895e6c | AKTIV | - | PÄgÄr | net-1=10.0.1.90 |
| 7e836338-6772-46b0-9950-f7f06dbe91a8 | vm-4 | 5e18ce8ec9594e00b155485f19895e6c | AKTIV | - | PÄgÄr | net-2=10.0.2.8 |
+--------------------------------------+------+----------------------------------+--------+------------+-------------+-----------------+
(overcloud) [stack@undercloud ~]$ LÄt oss se pÄ vilka hypervisorer de skapade maskinerna Àr placerade pÄ:
(overcloud) [stack@undercloud ~]$ nova show f53b37b5-2204-46cc-aef0-dba84bf970c0 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname | vm-1 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | overcloud-novacompute-0.localdomain |
| OS-EXT-SRV-ATTR:instance_name | instance-00000001 |(overcloud) [stack@undercloud ~]$ nova show fc8b6722-0231-49b0-b2fa-041115bef34a | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname | vm-2 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | overcloud-novacompute-1.localdomain |
| OS-EXT-SRV-ATTR:instance_name | instance-00000002 |(overcloud) [stack@undercloud ~]$ nova show 3cd74455-b9b7-467a-abe3-bd6ff765c83c | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname | vm-3 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | overcloud-novacompute-0.localdomain |
| OS-EXT-SRV-ATTR:instance_name | instance-00000003 |(overcloud) [stack@undercloud ~]$ nova show 7e836338-6772-46b0-9950-f7f06dbe91a8 | egrep "hypervisor_hostname|instance_name|hostname"
| OS-EXT-SRV-ATTR:hostname | vm-4 |
| OS-EXT-SRV-ATTR:hypervisor_hostname | overcloud-novacompute-1.localdomain |
| OS-EXT-SRV-ATTR:instance_name | instance-00000004 | (overcloud) [stack@undercloud ~]$
Maskinerna vm-1 och vm-3 Àr placerade pÄ compute-0, medan maskinerna vm-2 och vm-4 Àr placerade pÄ noden compute-1.
Dessutom har en virtuell router skapats för att möjliggöra routing mellan de angivna nÀtverken:
(overcloud) [stack@undercloud ~]$ openstack router list --project 5e18ce8ec9594e00b155485f19895e6c
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| ID | Name | Status | State | Distributed | HA | Project |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
| 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | router-1 | ACTIVE | UP | False | False | 5e18ce8ec9594e00b155485f19895e6c |
+--------------------------------------+----------+--------+-------+-------------+-------+----------------------------------+
(overcloud) [stack@undercloud ~]$ Routern har tvÄ virtuella portar som fungerar som gateways för nÀtverken:
(overcloud) [stack@undercloud ~]$ openstack router show 0a4d2420-4b9c-46bd-aec1-86a1ef299abe | grep interface
| interfaces_info | [{"subnet_id": "2529ad1a-6b97-49cd-8515-cbdcbe5e3daa", "ip_address": "10.0.1.254", "port_id": "0c52b15f-8fcc-4801-bf52-7dacc72a5201"}, {"subnet_id": "335552dd-b35b-456b-9df0-5aac36a3ca13", "ip_address": "10.0.2.254", "port_id": "92fa49b5-5406-499f-ab8d-ddf28cc1a76c"}] |
(overcloud) [stack@undercloud ~]$ Men innan vi kollar pÄ hur trafiken gÄr, lÄt oss se vad vi har just nu pÄ kontrollnoden (som ocksÄ Àr nÀtverksnoden) och pÄ compute-noden. LÄt oss börja med compute-noden.
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-vsctl show
[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:3 missed:3
br-ex:
br-ex 65534/1: (internal)
phy-br-ex 1/none: (patch: peer=int-br-ex)
br-int:
br-int 65534/2: (internal)
int-br-ex 1/none: (patch: peer=phy-br-ex)
patch-tun 2/none: (patch: peer=patch-int)
br-tun:
br-tun 65534/3: (internal)
patch-int 1/none: (patch: peer=patch-tun)
vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$För tillfĂ€llet finns det tre ovs-broar pĂ„ noderna â br-int, br-tun, br-ex. Mellan dem, som vi ser, finns det en uppsĂ€ttning grĂ€nssnitt. För att förenkla visualiseringen kommer vi att överföra alla dessa grĂ€nssnitt till en skiss och se vad vi fĂ„r.

Vid adresserna dÀr VxLAN-tunnlarna Àr aktiverade syns det att en tunnel Àr aktiverad pÄ compute-1 (192.168.255.26) och den andra tittar pÄ control-1 (192.168.255.15). Men det mest intressanta Àr att br-ex inte har nÄgra fysiska grÀnssnitt, och om vi tittar pÄ vilka flöden som Àr konfigurerade ser vi att denna bro för tillfÀllet endast kan slÀppa trafik.
[heat-admin@overcloud-novacompute-0 ~]$ ifconfig eth0
eth0: flags=4163 mtu 1450
inet 192.168.255.19 netmask 255.255.255.0 broadcast 192.168.255.255
inet6 fe80::5054:ff:fe6a:eabe prefixlen 64 scopeid 0x20
ether 52:54:00:6a:ea:be txqueuelen 1000 (Ethernet)
RX packets 2909669 bytes 4608201000 (4.2 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1821057 bytes 349198520 (333.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[heat-admin@overcloud-novacompute-0 ~]$ Som man kan se frÄn utskriften Àr adressen kopplad direkt till den fysiska porten, och inte till den virtuella brogrÀnssnittet.
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-ex
port VLAN MAC Age
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-ex
cookie=0x9169eae8f7fe5bb2, duration=216686.864s, table=0, n_packets=303, n_bytes=26035, priority=2,in_port="phy-br-ex" actions=drop
cookie=0x9169eae8f7fe5bb2, duration=216686.887s, table=0, n_packets=0, n_bytes=0, priority=0 actions=NORMAL
[heat-admin@overcloud-novacompute-0 ~]$ Enligt den första regeln ska all trafik som kommer frÄn porten phy-br-ex avvisas.
Egentligen finns det ingen annan kÀlla för trafik till denna bro, förutom frÄn detta grÀnssnitt (koppling med br-int), och med tanke pÄ bortfallen har det redan kommit BUM-trafik till bron.
Det betyder att trafiken frÄn denna nod endast kan gÄ ut genom VxLAN-tunneln och inte pÄ nÄgot annat sÀtt. Men om DVR aktiveras kommer situationen att förÀndras, men det fÄr vi ta senare. NÀr man anvÀnder nÀtverksisolering, till exempel med VLAN, sÄ har ni inte bara en L3-grÀnssnitt i VLAN 0, utan flera grÀnssnitt. Men VxLAN-trafiken kommer att lÀmna noden pÄ samma sÀtt, men innesluten Àven i ett speciellt VLAN.
Vi har förstÄtt compute-noden, sÄ vi gÄr vidare till control-noden.
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl dpif/show
system@ovs-system: hit:930491 missed:825
br-ex:
br-ex 65534/1: (internal)
eth0 1/2: (system)
phy-br-ex 2/none: (patch: peer=int-br-ex)
br-int:
br-int 65534/3: (internal)
int-br-ex 1/none: (patch: peer=phy-br-ex)
patch-tun 2/none: (patch: peer=patch-int)
br-tun:
br-tun 65534/4: (internal)
patch-int 1/none: (patch: peer=patch-tun)
vxlan-c0a8ff13 3/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.19)
vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$I praktiken kan man sÀga att allt Àr detsamma, men IP-adressen finns redan inte pÄ det fysiska grÀnssnittet utan pÄ en virtuell bro. Detta har gjorts eftersom denna port Àr en port genom vilken trafiken kommer att gÄ ut till den yttre vÀrlden.
[heat-admin@overcloud-controller-0 ~]$ ifconfig br-ex
br-ex: flags=4163 mtu 1450
inet 192.168.255.15 netmask 255.255.255.0 broadcast 192.168.255.255
inet6 fe80::5054:ff:fe20:a22f prefixlen 64 scopeid 0x20
ether 52:54:00:20:a2:2f txqueuelen 1000 (Ethernet)
RX packets 803859 bytes 1732616116 (1.6 GiB)
RX errors 0 dropped 63 overruns 0 frame 0
TX packets 808475 bytes 121652156 (116.0 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-ex
port VLAN MAC Age
3 100 28:c0:da:00:4d:d3 35
1 0 28:c0:da:00:4d:d3 35
1 0 52:54:00:98:e9:d6 0
LOCAL 0 52:54:00:20:a2:2f 0
1 0 52:54:00:2c:08:9e 0
3 100 52:54:00:20:a2:2f 0
1 0 52:54:00:6a:ea:be 0
[heat-admin@overcloud-controller-0 ~]$ Denna port Àr kopplad till bron br-ex och eftersom det inte finns nÄgra VLAN-taggar pÄ den, sÄ Àr denna port en trunkport dÀr alla VLAN Àr tillÄtna. Just nu gÄr trafiken ut utan tagg, vilket indikeras av VLAN-ID 0 i utskriften ovan.

Allt annat Àr för nÀrvarande likadant som compute-noden - samma broar, samma tunnlar som gÄr till tvÄ compute-noder.
Vi kommer inte att titta pĂ„ lagringsnoder i denna artikel, men för att förstĂ„ mĂ„ste vi sĂ€ga att den nĂ€tverksdel som dessa noder har Ă€r banal till det absurda. I vĂ„rt fall finns det bara en fysisk port (eth0) med ett IP-adress kopplat till den, och det Ă€r allt. Det finns inga VxLAN-tunnlar, tunnelbroar osv. â det finns inte ens OVS eftersom det inte finns nĂ„got syfte med det. NĂ€r man anvĂ€nder nĂ€tverksisolering â pĂ„ denna nod kommer det att finnas tvĂ„ grĂ€nssnitt (fysiska portar, VLAN, eller bara tvĂ„ VLAN â detta spelar ingen roll â det beror pĂ„ vad du vill) â den ena för administration, den andra för trafik (skriva till disk VM, lĂ€sa frĂ„n disk osv.).
Nu har vi klarat av vad vi har pĂ„ noderna utan nĂ„gon form av tjĂ€nster. LĂ„t oss nu starta 4 virtuella maskiner och se hur det ovan beskrivna schemat förĂ€ndras â vi borde fĂ„ portar, virtuella routrar osv.
Hittills ser vÄrt nÀtverk ut sÄ hÀr:

Vi har tvÄ virtuella maskiner pÄ varje berÀkningsnod. LÄt oss titta pÄ hur allt Àr aktiverat med exempelvis compute-0.
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh list
Id Namn Status
----------------------------------------------------
1 instance-00000001 kör
3 instance-00000003 kör
[heat-admin@overcloud-novacompute-0 ~]$ Maskinen har bara ett virtuellt grĂ€nssnitt â tap95d96a75-a0:
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
GrÀnssnitt Typ KÀlla Modell MAC
-------------------------------------------------------
tap95d96a75-a0 bro qbr95d96a75-a0 virtio fa:16:3e:44:98:20
[heat-admin@overcloud-novacompute-0 ~]$
Detta grÀnssnitt pekar pÄ linux-bro:
[heat-admin@overcloud-novacompute-0 ~]$ sudo brctl show
bro namn bro id STP aktiverad grÀnssnitt
docker0 8000.0242904c92a8 nej
qbr5bd37136-47 8000.5e4e05841423 nej qvb5bd37136-47
tap5bd37136-47
qbr95d96a75-a0 8000.de076cb850f6 nej qvb95d96a75-a0
tap95d96a75-a0
[heat-admin@overcloud-novacompute-0 ~]$ Som kan ses frĂ„n utskriften, i bron finns det totalt tvĂ„ grĂ€nssnitt â tap95d96a75-a0 och qvb95d96a75-a0.
HÀr Àr det vÀrt att stanna upp lite vid typerna av virtuella nÀtverksenheter i OpenStack:
vtap â virtuellt grĂ€nssnitt kopplat till instansen (VM)
qbr â Linux-bro
qvb och qvo â vEth-par kopplade till Linux-bro och Open vSwitch-bro
br-int, br-tun, br-vlan â Open vSwitch-broar
patch-, int-br-, phy-br- â Open vSwitch patch-grĂ€nssnitt som kopplar broar
qg, qr, ha, fg, sg â Open vSwitch-portar som anvĂ€nds av virtuella enheter för att ansluta till OVS
Som ni förstÄr, om vi har en brygga med en qvb95d96a75-a0 port, som Àr en vEth-uppkoppling, finns det nÄgonstans dess motsatta sida, som logiskt bör kallas qvo95d96a75-a0. LÄt oss se vilka portar som finns pÄ OVS.
[heat-admin@overcloud-novacompute-0 ~]$ sudo sudo ovs-appctl dpif/show
system@ovs-system: hit:526 missed:91
br-ex:
br-ex 65534/1: (internal)
phy-br-ex 1/none: (patch: peer=int-br-ex)
br-int:
br-int 65534/2: (internal)
int-br-ex 1/none: (patch: peer=phy-br-ex)
patch-tun 2/none: (patch: peer=patch-int)
qvo5bd37136-47 6/6: (system)
qvo95d96a75-a0 3/5: (system)
br-tun:
br-tun 65534/3: (internal)
patch-int 1/none: (patch: peer=patch-tun)
vxlan-c0a8ff0f 3/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.15)
vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$ Som vi ser Àr porten ansluten till br-int. Br-int fungerar som en switch som terminerar portar för virtuella maskiner. Förutom qvo95d96a75-a0 kan vi i utskriften se porten qvo5bd37136-47. Detta Àr porten för den andra virtuella maskinen. Resultatet av vÄr plan ser nu ut sÄ hÀr:

FrĂ„gan som omedelbart bör intressera den observanta lĂ€saren Ă€r: varför finns det en linux-brygga mellan porten för den virtuella maskinen och OVS-porten? Anledningen Ă€r att sĂ€kerhetsgrupper anvĂ€nds för att skydda maskinen, vilka i sjĂ€lva verket Ă€r iptables. OVS fungerar inte med iptables, sĂ„ det hĂ€r âarbeteomrĂ„detâ har skapats. Men det hĂ„ller pĂ„ att förĂ„ldras â nĂ„got nytt som conntrack kommer att ersĂ€tta detta i framtida versioner.
SÄ i slutÀndan ser diagrammet ut sÄ hÀr:

TvÄ maskiner pÄ samma hypervisor i samma L2-nÀtverk
Eftersom dessa tvÄ VM:ar befinner sig i samma L2-nÀtverk och pÄ samma hypervisor, sÄ kommer trafiken mellan dem logiskt att fÀrdas lokalt via br-int, eftersom bÄda maskinerna kommer att vara i samma VLAN:
[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 ~]$ TvÄ maskiner pÄ olika hypervisorer i samma L2-nÀtverk
LÄt oss nu se hur trafiken kommer att flöda mellan tvÄ maskiner i samma L2-nÀtverk, men placerade pÄ olika hypervisorer. Om vi ska vara Àrliga kommer inget speciellt att förÀndras, utan trafiken mellan hypervisorerna kommer att gÄ genom ett vxlan-tunnel. LÄt oss titta pÄ ett exempel.
Adresserna för virtuella maskiner mellan vilka vi ska granska trafiken:
[heat-admin@overcloud-novacompute-0 ~]$ sudo virsh domiflist instance-00000001
GrÀnssnitt Typ KÀlla Modell MAC
-------------------------------------------------------
tap95d96a75-a0 bro qbr95d96a75-a0 virtio fa:16:3e:44:98:20
[heat-admin@overcloud-novacompute-0 ~]$
[heat-admin@overcloud-novacompute-1 ~]$ sudo virsh domiflist instance-00000002
GrÀnssnitt Typ KÀllan Modell MAC
-------------------------------------------------------
tape7e23f1b-07 bro qbre7e23f1b-07 virtio fa:16:3e:72:ad:53
[heat-admin@overcloud-novacompute-1 ~]$ Vi kollar pÄ vidarebefordrings-tabellen i br-int pÄ compute-0:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:72:ad:53
2 1 fa:16:3e:72:ad:53 1
[heat-admin@overcloud-novacompute-0 ~]Trafiken ska gĂ„ till port 2 â vi kollar vilken port det Ă€r:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:7e:7f:28:1f:bd:54
2(patch-tun): addr:0a:bd:07:69:58:d9
3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$Detta Ă€r patch-tun â det vill sĂ€ga grĂ€nssnittet i br-tun. Vi undersöker vad som hĂ€nder med paketet pĂ„ br-tun:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:72:ad:53
cookie=0x8759a56536b67a8e, duration=1387.959s, table=20, n_packets=1460, n_bytes=138880, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:72:ad:53 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-novacompute-0 ~]$ Paketet packas i VxLAN och skickas till port 2. Vi kontrollerar vart port 2 leder:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
1(patch-int): addr:b2:d1:f8:21:96:66
2(vxlan-c0a8ff1a): addr:be:64:1f:75:78:a7
3(vxlan-c0a8ff0f): addr:76:6f:b9:3c:3f:1c
LOCAL(br-tun): addr:a2:5b:6d:4f:94:47
[heat-admin@overcloud-novacompute-0 ~]$Detta Àr vxlan-tunneln pÄ compute-1:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl dpif/show | egrep vxlan-c0a8ff1a
vxlan-c0a8ff1a 2/4: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.19, remote_ip=192.168.255.26)
[heat-admin@overcloud-novacompute-0 ~]$Vi gÄr till compute-1 och ser vad som hÀnder med paketet:
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:44:98:20
2 1 fa:16:3e:44:98:20 1
[heat-admin@overcloud-novacompute-1 ~]$ MAC:en finns i vidarebefordrings-tabellen br-int pÄ compute-1, och som det framgÄr av utskriften ovan syns den genom port 2, som Àr porten mot br-tun:
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
2(patch-tun): addr:46:cc:40:bd:20:da
3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
LOCAL(br-int): addr:e2:27:b2:ed:14:46Och vidare ser vi att det finns en destination MAC i br-int pÄ compute-1:
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:72:ad:53
3 1 fa:16:3e:72:ad:53 0
[heat-admin@overcloud-novacompute-1 ~]$ Det vill sÀga det mottagna paketet kommer att skickas till port 3, dÀr den virtuella maskinen instance-00000003 redan finns.
Det fantastiska med att distribuera Openstack för undervisning pÄ virtuell infrastruktur Àr att vi enkelt kan fÄnga trafik mellan hypervisorerna och se vad som hÀnder med den. Det gör vi nu genom att starta tcpdump pÄ vnet-porten mot compute-0:
[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet3
tcpdump: lyssnar pÄ vnet3, lÀnktyp EN10MB (Ethernet), fÄngststorlek 262144 byte
*****************utelÀmnat*******************
04:39:04.583459 IP (tos 0x0, ttl 64, id 16868, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.19.39096 > 192.168.255.26.4789: [ingen cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 8012, offset 0, flags [DF], proto ICMP (1), lÀngd 84)
10.0.1.85 > 10.0.1.88: ICMP eko begÀran, id 5634, seq 16, lÀngd 64
04:39:04.584449 IP (tos 0x0, ttl 64, id 35181, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.26.speedtrace-disc > 192.168.255.19.4789: [ingen cksum] VXLAN, flags [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 59124, offset 0, flags [ingen], proto ICMP (1), lÀngd 84)
10.0.1.88 > 10.0.1.85: ICMP eko svar, id 5634, seq 16, lÀngd 64
*****************utelÀmnat*******************Den första raden visar att paketet frÄn adress 10.0.1.85 gÄr till adress 10.0.1.88 (ICMP-trafik), och det Àr inkapslat i ett VxLAN-paket med vni 22. Paketet gÄr frÄn vÀrden 192.168.255.19 (compute-0) till vÀrden 192.168.255.26 (compute-1). Vi kan kontrollera att VNI stÀmmer överens med den som anges i ovs.
LÄt oss gÄ tillbaka till den hÀr raden actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:2. 0x16 Àr vni i hexadecimal form. LÄt oss konvertera detta tal till decimal:
16 = 6*16^0+1*16^1 = 6+16 = 22SÄ vni stÀmmer.
Den andra raden visar den omvÀnda trafiken, men det behövs ingen förklaring dÀr, allt Àr tydligt.
TvÄ maskiner i olika nÀtverk (routing mellan nÀtverken)
Det sista fallet för idag Àr routing mellan nÀtverk inom ett enda projekt med anvÀndning av virtuella routrar. Vi granskar fallet utan DVR (det kommer vi att titta pÄ i en annan artikel), sÄ routing sker pÄ nÀtverksnoden. I vÄrt fall Àr nÀtverksnoden inte ett separat objekt utan Àr placerad pÄ kontrollnoden.
Först ska vi se att routing fungerar:
$ 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-statistik ---
2 paket sÀnda, 2 paket mottagna, 0% paketförlust
rundtur min/medel/max = 3.832/5.779/7.727 msEftersom paketet i detta fall mÄste gÄ till gatewayen och routeras dÀr, mÄste vi ta reda pÄ MAC-adressen för gatewayen, sÄ vi kommer att titta pÄ ARP-tabellen i instansen:
$ arp
host-10-0-1-254.openstacklocal (10.0.1.254) at fa:16:3e:c4:64:70 [ether] pÄ eth0
host-10-0-1-1.openstacklocal (10.0.1.1) at fa:16:3e:e6:2c:5c [ether] pÄ eth0
host-10-0-1-90.openstacklocal (10.0.1.90) at fa:16:3e:83:ad:a4 [ether] pÄ eth0
host-10-0-1-88.openstacklocal (10.0.1.88) at fa:16:3e:72:ad:53 [ether] pÄ eth0LÄt oss nu titta pÄ vart trafiken ska skickas med destination (10.0.1.254) fa:16:3e:c4:64:70:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-appctl fdb/show br-int | egrep fa:16:3e:c4:64:70
2 1 fa:16:3e:c4:64:70 0
[heat-admin@overcloud-novacompute-0 ~]$ Vi tittar pÄ vart port 2 leder:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:7e:7f:28:1f:bd:54
2(patch-tun): addr:0a:bd:07:69:58:d9
3(qvo95d96a75-a0): addr:ea:50:9a:3d:69:58
6(qvo5bd37136-47): addr:9a:d1:03:50:3d:96
LOCAL(br-int): addr:1a:0f:53:97:b1:49
[heat-admin@overcloud-novacompute-0 ~]$ Det Àr logiskt, trafiken gÄr till br-tun. LÄt oss se vilken vxlan-tunnel den kommer att kapslas in i:
[heat-admin@overcloud-novacompute-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:c4:64:70
cookie=0x8759a56536b67a8e, duration=3514.566s, table=20, n_packets=3368, n_bytes=317072, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0001/0x0fff,dl_dst=fa:16:3e:c4:64:70 actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3
[heat-admin@overcloud-novacompute-0 ~]$ Den tredje porten Àr en vxlan-tunnel:
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
1(patch-int): addr:a2:69:00:c5:fa:ba
2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$ Som pekar pÄ kontrollnoden:
[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ Trafiken har nÄtt kontrollnoden, sÄ vi mÄste gÄ till den och se hur routing kommer att ske.
Som ni minns sĂ„g kontrollnoden exakt likadant ut som compute-noden â samma tre broar, fast br-ex hade en fysisk port genom vilken noden kunde skicka trafik utĂ„t. Att skapa instanser Ă€ndrade konfigurationen pĂ„ compute-noderna â ytterligare linuxbridge, iptables och grĂ€nssnitt pĂ„ noderna lades till. Skapandet av nĂ€tverk och en virtuell router lĂ€mnade ocksĂ„ sitt spĂ„r pĂ„ konfigurationen av kontrollnoden.
SÄ det Àr tydligt att MAC-adressen för gateway bör finnas i forwarding-tabellen för br-int pÄ kontrollnoden. Vi kontrollerar om den finns dÀr och vart den pekar:
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:c4:64:70
5 1 fa:16:3e:c4:64:70 1
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:2e:58:b6:db:d5:de
2(patch-tun): addr:06:41:90:f0:9e:56
3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ MAC:en Àr synlig frÄn port qr-0c52b15f-8f. Om vi ÄtergÄr till listan över virtuella portar i Openstack, sÄ anvÀnds denna typ av port för att ansluta olika virtuella enheter till OVS. Mer specifikt, qr Àr en port mot den virtuella routern, som presenteras i form av ett namespace.
LÄt oss se vilka namnrymd som finns pÄ servern:
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ Hela tre instanser. Men utifrÄn namnen kan man gissa deras syfte. Vi kommer att Äterkomma till instanserna med ID 0 och 1 senare, nu Àr vi intresserade av namnomrÄdet qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe:
[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 ~]$ I detta namnomrÄde finns tvÄ interna som vi skapade tidigare. BÄda virtuella portar Àr tillagda br-int. LÄt oss kontrollera MAC-adressen för port qr-0c52b15f-8f, eftersom trafiken, utifrÄn MAC-adressen, verkar gÄ till denna grÀnssnitt.
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe ifconfig qr-0c52b15f-8f
qr-0c52b15f-8f: flags=4163 mtu 1450
inet 10.0.1.254 netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::f816:3eff:fec4:6470 prefixlen 64 scopeid 0x20
ether fa:16:3e:c4:64:70 txqueuelen 1000 (Ethernet)
RX packets 5356 bytes 427305 (417.2 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 5195 bytes 490603 (479.1 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[heat-admin@overcloud-controller-0 ~]$ Det vill sÀga, i detta fall fungerar allt enligt standard routingprinciper. Eftersom trafiken Àr avsedd för vÀrden 10.0.2.8, bör den gÄ ut genom det andra grÀnssnittet qr-92fa49b5-54 och vidare genom vxlan-tunneln till compute-noden:
[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 ~]$ Allt Àr logiskt, inga överraskningar. LÄt oss se varifrÄn MAC-adressen för vÀrden 10.0.2.8 Àr synlig i br-int:
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
2 2 fa:16:3e:6c:ad:9c 1
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:2e:58:b6:db:d5:de
2(patch-tun): addr:06:41:90:f0:9e:56
3(tapca25a97e-64): addr:fa:16:3e:e6:2c:5c
4(tap22015e46-0b): addr:fa:16:3e:76:c2:11
5(qr-0c52b15f-8f): addr:fa:16:3e:c4:64:70
6(qr-92fa49b5-54): addr:fa:16:3e:80:13:72
LOCAL(br-int): addr:06:de:5d:ed:44:44
[heat-admin@overcloud-controller-0 ~]$ Som det ska vara gÄr trafiken genom br-tun, lÄt oss se vilken tunnel trafiken gÄr vidare i:
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl dump-flows br-tun | grep fa:16:3e:6c:ad:9c
cookie=0x2ab04bf27114410e, duration=5346.829s, table=20, n_packets=5248, n_bytes=498512, hard_timeout=300, idle_age=0, hard_age=0, priority=1,vlan_tci=0x0002/0x0fff,dl_dst=fa:16:3e:6c:ad:9c actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo ovs-ofctl show br-tun | grep addr
1(patch-int): addr:a2:69:00:c5:fa:ba
2(vxlan-c0a8ff1a): addr:86:f0:ce:d0:e8:ea
3(vxlan-c0a8ff13): addr:72:aa:73:2c:2e:5b
LOCAL(br-tun): addr:a6:cb:cd:72:1c:45
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$ Trafiken gĂ„r genom tunneln till compute-1. Och pĂ„ compute-1 Ă€r det enkelt â frĂ„n br-tun gĂ„r paketet till br-int och dĂ€rifrĂ„n in i den virtuella maskinens grĂ€nssnitt:
[heat-admin@overcloud-controller-0 ~]$ sudo sudo ovs-appctl dpif/show | grep vxlan-c0a8ff1a
vxlan-c0a8ff1a 2/5: (vxlan: egress_pkt_mark=0, key=flow, local_ip=192.168.255.15, remote_ip=192.168.255.26)
[heat-admin@overcloud-controller-0 ~]$
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-appctl fdb/show br-int | grep fa:16:3e:6c:ad:9c
4 2 fa:16:3e:6c:ad:9c 1
[heat-admin@overcloud-novacompute-1 ~]$ sudo ovs-ofctl show br-int | grep addr
1(int-br-ex): addr:8a:d7:f9:ad:8c:1d
2(patch-tun): addr:46:cc:40:bd:20:da
3(qvoe7e23f1b-07): addr:12:78:2e:34:6a:c7
4(qvo3210e8ec-c0): addr:7a:5f:59:75:40:85
LOCAL(br-int): addr:e2:27:b2:ed:14:46
[heat-admin@overcloud-novacompute-1 ~]$ LÄt oss kontrollera att det verkligen Àr rÀtt grÀnssnitt:
[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 ~]$ SÄ vi har gÄtt igenom hela paketets vÀg. Jag tror du har mÀrkt att trafiken gick genom olika vxlan-tunnlar och dök upp med olika VNI. LÄt oss titta pÄ vilka dessa VNI Àr, och dÀrefter fÄnga en dump pÄ kontrollnodens port och försÀkra oss om att trafiken flödar som beskrivits ovan.
SÄ tunneln till compute-0 har följande actions=load:0->NXM_OF_VLAN_TCI[],load:0x16->NXM_NX_TUN_ID[],output:3. LÄt oss konvertera 0x16 till decimalform:
0x16 = 6*16^0+1*16^1 = 6+16 = 22Tunneln till compute-1 har följande VNI: actions=load:0->NXM_OF_VLAN_TCI[],load:0x63->NXM_NX_TUN_ID[],output:2. LÄt oss konvertera 0x63 till decimalform:
0x63 = 3*16^0+6*16^1 = 3+96 = 99LÄt oss titta pÄ dumpen nu:
[root@hp-gen9 bormoglotx]# tcpdump -vvv -i vnet4
tcpdump: lyssnar pÄ vnet4, lÀnktyp EN10MB (Ethernet), fÄngststorlek 262144 byte
*****************utelÀmnat*******************
04:35:18.709949 IP (tos 0x0, ttl 64, id 48650, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.19.41591 > 192.168.255.15.4789: [ingen cksum] VXLAN, flaggor [I] (0x08), vni 22
IP (tos 0x0, ttl 64, id 49042, offset 0, flags [DF], proto ICMP (1), lÀngd 84)
10.0.1.85 > 10.0.2.8: ICMP ekobegÀran, id 5378, sekvens 9, lÀngd 64
04:35:18.710159 IP (tos 0x0, ttl 64, id 23360, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.15.38983 > 192.168.255.26.4789: [ingen cksum] VXLAN, flaggor [I] (0x08), vni 99
IP (tos 0x0, ttl 63, id 49042, offset 0, flags [DF], proto ICMP (1), lÀngd 84)
10.0.1.85 > 10.0.2.8: ICMP ekobegÀran, id 5378, sekvens 9, lÀngd 64
04:35:18.711292 IP (tos 0x0, ttl 64, id 43596, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.26.42588 > 192.168.255.15.4789: [ingen cksum] VXLAN, flaggor [I] (0x08), vni 99
IP (tos 0x0, ttl 64, id 55103, offset 0, flags [none], proto ICMP (1), lÀngd 84)
10.0.2.8 > 10.0.1.85: ICMP ekosvar, id 5378, sekvens 9, lÀngd 64
04:35:18.711531 IP (tos 0x0, ttl 64, id 8555, offset 0, flags [DF], proto UDP (17), lÀngd 134)
192.168.255.15.38983 > 192.168.255.19.4789: [ingen cksum] VXLAN, flaggor [I] (0x08), vni 22
IP (tos 0x0, ttl 63, id 55103, offset 0, flags [none], proto ICMP (1), lÀngd 84)
10.0.2.8 > 10.0.1.85: ICMP ekosvar, id 5378, sekvens 9, lÀngd 64
*****************utelÀmnat*******************Den första paketet Àr ett vxlan-paket frÄn vÀrden 192.168.255.19 (compute-0) till vÀrden 192.168.255.15 (control-1) med vni 22, inne i vilket ett ICMP-paket Àr förpackat frÄn vÀrden 10.0.1.85 till vÀrden 10.0.2.8. Som vi berÀknade tidigare, motsvarar vni det vi sÄg i utskrifterna.
Det andra paketet Àr ett vxlan-paket frÄn vÀrden 192.168.255.15 (control-1) till vÀrden 192.168.255.26 (compute-1) med vni 99, inne i vilket ett ICMP-paket Àr förpackat frÄn vÀrden 10.0.1.85 till vÀrden 10.0.2.8. Som vi berÀknade tidigare, motsvarar vni det vi sÄg i utskrifterna.
De följande tvÄ paketen Àr bakÄttrafik med 10.0.2.8 till 10.0.1.85.
SÄ i slutÀndan har vi fÄtt ett sÄdant schema för kontrollknoden:

Verkar som allt? Vi glömde de tvÄ namnomrÄdena:
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns
qrouter-0a4d2420-4b9c-46bd-aec1-86a1ef299abe (id: 2)
qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 (id: 1)
qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 (id: 0)
[heat-admin@overcloud-controller-0 ~]$ Som vi nĂ€mnde angĂ„ende arkitekturen för molnplattformen â det skulle vara bra om maskinerna automatiskt fick adresser frĂ„n DHCP-servern. Det Ă€r de tvĂ„ DHCP-servrarna för vĂ„ra tvĂ„ nĂ€tverk 10.0.1.0/24 och 10.0.2.0/24.
LĂ„t oss kontrollera att det Ă€r sĂ„. I detta namnrum finns endast en adress â 10.0.1.1 â adressen för sjĂ€lva DHCP-servern, och den ingĂ„r ocksĂ„ i br-int:
[heat-admin@overcloud-controller-0 ~]$ sudo ip netns exec qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 ifconfig
lo: flags=73 mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10
loop txqueuelen 1000 (Local Loopback)
RX packets 1 bytes 28 (28.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1 bytes 28 (28.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
tapca25a97e-64: flags=4163 mtu 1450
inet 10.0.1.1 netmask 255.255.255.0 broadcast 10.0.1.255
inet6 fe80::f816:3eff:fee6:2c5c prefixlen 64 scopeid 0x20
ether fa:16:3e:e6:2c:5c txqueuelen 1000 (Ethernet)
RX packets 129 bytes 9372 (9.1 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 49 bytes 6154 (6.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0LÄt oss se om det finns processer som innehÄller namnet qdhcp-67a3798c-32c0-4c18-8502-2531247e3cc2 pÄ kontrollnoden:
[heat-admin@overcloud-controller-0 ~]$ ps -aux | egrep qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638
root 640420 0.0 0.0 4220 348 ? Ss 11:31 0:00 dumb-init --single-child -- ip netns exec qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638 /usr/sbin/dnsmasq -k --no-hosts --no-resolv --pid-file=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/pid --dhcp-hostsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/host --addn-hosts=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/addn_hosts --dhcp-optsfile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/opts --dhcp-leasefile=/var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases --dhcp-match=set:ipxe,175 --local-service --bind-dynamic --dhcp-range=set:subnet-335552dd-b35b-456b-9df0-5aac36a3ca13,10.0.2.0,static,255.255.255.0,86400s --dhcp-option-force=option:mtu,1450 --dhcp-lease-max=256 --conf-file= --domain=openstacklocal
heat-ad+ 951620 0.0 0.0 112944 980 pts/0 S+ 18:50 0:00 grep -E --color=auto qdhcp-7d541e74-1c36-4e1d-a7c4-0968c8dbc638
[heat-admin@overcloud-controller-0 ~]$ Det finns en sÄdan process, och baserat pÄ informationen som presenteras ovan kan vi till exempel se vad vi har för uthyrning för tillfÀllet:
[heat-admin@overcloud-controller-0 ~]$ cat /var/lib/neutron/dhcp/7d541e74-1c36-4e1d-a7c4-0968c8dbc638/leases
1597492111 fa:16:3e:6c:ad:9c 10.0.2.8 host-10-0-2-8 01:fa:16:3e:6c:ad:9c
1597491115 fa:16:3e:76:c2:11 10.0.2.1 host-10-0-2-1 *
[heat-admin@overcloud-controller-0 ~]$Slutligen fÄr vi en sÄdan uppsÀttning tjÀnster pÄ kontrollnoden:

TĂ€nk pĂ„ att det hĂ€r bara handlar om 4 maskiner, 2 interna nĂ€tverk och en virtuell router⊠För nĂ€rvarande har vi inga externa nĂ€tverk, en massa olika projekt, var och en med sina egna (överlappande) nĂ€tverk, och vi har stĂ€ngt av den distribuerade routern. Dessutom, i testmiljön fanns det bara en kontrollnod (för redundans mĂ„ste det finnas ett kvorum av tre noder). Det Ă€r logiskt att det inom kommersiell verksamhet Ă€r "lite" mer komplicerat, men med det hĂ€r enkla exemplet förstĂ„r vi hur det borde fungera â oavsett om du har 3 eller 300 namespace Ă€r det viktigt, men nĂ€r det gĂ€ller hela konstruktionen förĂ€ndras inte speciellt mycket⊠förutsatt att du inte sĂ€tter in nĂ„gon leverantörsspecifik SDN. Men det Ă€r en helt annan historia.
Jag hoppas att det var intressant. Om det finns kommentarer/tillĂ€gg eller om jag dĂ€r jag har ljugit (jag Ă€r mĂ€nsklig och min Ă„sikt kommer alltid vara subjektiv) â skriv gĂ€rna vad som behöver justeras/tillĂ€ggas â sĂ„ fixar vi det.
Avslutningsvis vill jag sĂ€ga nĂ„gra ord om jĂ€mförelsen mellan OpenStack (bĂ„de vanilla och leverantörsspecifika versioner) och molnlösningen frĂ„n VMWare â de senaste Ă„ren har mĂ„nga stĂ€llt denna frĂ„ga och jag har Ă€rligt talat tröttnat pĂ„ den, men Ă€ndĂ„. Enligt min Ă„sikt Ă€r det vĂ€ldigt svĂ„rt att jĂ€mföra de hĂ€r tvĂ„ lösningarna, men det gĂ„r att sĂ€ga att det finns nackdelar med bĂ„da, sĂ„ nĂ€r man vĂ€ljer en lösning mĂ„ste man vĂ€ga för- och nackdelar noggrant.
Om OpenStack Ă€r en community-driven lösning, sĂ„ har VMWare rĂ€tt att göra precis vad de vill (lĂ€s â vad som Ă€r fördelaktigt för dem) och det Ă€r logiskt â eftersom det Ă€r ett kommersiellt företag som Ă€r van vid att tjĂ€na pengar pĂ„ sina kunder. Men hĂ€r finns en stor och viktig NACKDEL â du kan enkelt byta frĂ„n OpenStack, till exempel frĂ„n Nokia, och med lĂ€tthet gĂ„ över till en lösning frĂ„n Juniper (Contrail Cloud), men att byta frĂ„n VMWare kommer sannolikt vara mycket svĂ„rt. För mig ser de hĂ€r tvĂ„ lösningarna ut sĂ„ hĂ€r â OpenStack (leverantörsspecifik) Ă€r en enkel bur, dĂ€r du har en nyckel och kan gĂ„ ut nĂ€r som helst. VMWare Ă€r en gyllene bur, nyckeln till buren tillhör Ă€garen, och det kommer att kosta dig mycket.
Jag föresprĂ„kar varken den första produkten eller den andra â du vĂ€ljer det som passar dig. Men om jag skulle göra det valet skulle jag vĂ€lja bĂ„da lösningarna â VMWare för IT-molnet (lĂ€tta belastningar, enkel hantering), OpenStack frĂ„n nĂ„gon leverantör (Nokia och Juniper erbjuder mycket bra nyckelfĂ€rdiga lösningar) â för Telekom-molnet. Jag skulle inte anvĂ€nda OpenStack för rent IT â det Ă€r som att skjuta med kanoner pĂ„ mĂ„nget, men jag ser inga kontraindikationer för att anvĂ€nda det, förutom för överflödighet. Att anvĂ€nda VMWare i telekom Ă€r som att transportera grus med en Ford Raptor â snyggt frĂ„n utsidan, men föraren mĂ„ste göra 10 körningar istĂ€llet för en.
Enligt min mening Ă€r den största nackdelen med VMWare dess fullstĂ€ndiga slutna natur â företaget ger dig ingen information om hur exempelvis vSAN fungerar eller vad som finns i kĂ€rnan pĂ„ hypervisorn â det Ă€r helt enkelt inte i deras intresse â det vill sĂ€ga, du kommer aldrig att bli expert pĂ„ VMWare â utan leverantörsstöd Ă€r du dömd (jag trĂ€ffar ofta VMWare-experter som blir stĂ€llda av banala frĂ„gor). För mig Ă€r VMWare som att köpa en bil med ett lĂ„st motorhuv â ja, du kanske har specialister som kan byta kamremmen, men endast den som sĂ„lde dig lösningen kan öppna motorhuven. Personligen gillar jag inte lösningar som jag inte kan undersöka. Du kanske sĂ€ger att du förmodligen inte behöver gĂ„ ner under motorhuven. Ja, det kan vara sĂ„, men jag ser pĂ„ dig nĂ€r du behöver bygga en stor funktion i molnet med 20-30 virtuella maskiner, 40-50 nĂ€tverk, hĂ€lften av dem som vill gĂ„ utĂ„t och den andra hĂ€lften som begĂ€r SR-IOV-accelerering, annars behöver du ytterligare ett par dussin sĂ„dana maskiner â annars blir det inte tillrĂ€cklig prestanda.
Det finns ocksĂ„ andra synpunkter, sĂ„ det Ă€r bara du som kan avgöra vad du ska vĂ€lja, och viktigast av allt â det Ă€r du som sedan ansvarar för ditt val. Detta Ă€r bara min Ă„sikt â en person som har sett och rört vid minst 4 produkter â Nokia, Juniper, Red Hat och VMWare. Det vill sĂ€ga, jag har nĂ„got att jĂ€mföra med.
KĂ€lla: habr.com
