En thriller om serverkonfiguration utan mirakel med Configuration Management

Det nĂ€rmade sig nyĂ„r. Barnen i hela landet hade redan skickat sina brev till Jultomten eller önskat sig presenter, och den frĂ€msta aktören — en av de stora Ă„terförsĂ€ljarna — förberedde sig för försĂ€ljningens apoteos. I december ökar belastningen pĂ„ deras datacenter flera gĂ„nger om. DĂ€rför beslutade företaget att modernisera datacentret och ta i drift flera dussin nya servrar istĂ€llet för utrustning vars livslĂ€ngd hade nĂ„tt slutet. HĂ€r slutar berĂ€ttelsen mot bakgrund av snurrande snöflingor, och en thriller börjar.

En thriller om serverkonfiguration utan mirakel med Configuration Management
Utrustningen kom till platsen flera mÄnader innan försÀljningstoppen. Driftavdelningen vet sjÀlvklart hur man stÀller in servrarna för att sÀtta dem i produktionsmiljö. Men vi behövde automatisera detta och eliminera den mÀnskliga faktorn. Dessutom ersatte servrarna en uppsÀttning av kritiskt viktiga SAP-system inför migreringen för företaget.

Inverkan av de nya servrarna var strikt kopplad till en deadline. Att flytta pĂ„ den skulle sĂ€tta bĂ„de utskicken av en miljard presenter och migreringen av systemen i fara. Inte ens ett team bestĂ„ende av Jultomten och Santa Claus skulle kunna Ă€ndra datumet — överflyttningen av SAP-systemet för lagerhantering kan endast göras en gĂ„ng om Ă„ret. Mellan den 31 december och 1 januari stĂ€nger de enorma lagren hos Ă„terförsĂ€ljaren, som sammanlagt Ă€r som 20 fotbollsplaner, sin verksamhet i 15 timmar. Och detta Ă€r den enda tidsperioden för systemets flytt. Vi hade ingen marginal för fel vid införandet av servrarna.

LÄt mig förklara direkt: min berÀttelse Äterspeglar det verktyg och den process för konfigurationshantering som vÄrt team anvÀnder.

Konfigurationshanteringssystemet bestÄr av flera nivÄer. Den centrala komponenten Àr CMS-systemet. I industriell drift skulle frÄnvaron av en av nivÄerna ofrÄnkomligen leda till obehagliga överraskningar.

Hantera installationen av operativsystem

Den första nivÄn Àr systemet för hantering av installationen av operativsystem pÄ fysiska och virtuella servrar. Det skapar grundkonfigurationer av OS och eliminerar den mÀnskliga faktorn.

Med detta system fick vi typiska och för framtida automatisering anvÀndbara exemplar av servrar med operativsystem. Vid "utdelning" fick de en minimal uppsÀttning lokala anvÀndare och offentliga SSH-nycklar, samt en överenskommen konfiguration av operativsystemet. Vi kunde garantera styrning av servrarna via CMS och var sÀkra pÄ att det inte fanns nÄgra överraskningar "nÀr nere", pÄ operativsystemnivÄ.

Maximalt mÄl för installationshanteringssystemet Àr att automatiskt konfigurera servrar frÄn BIOS/Firmware-nivÄ till operativsystemet. Mycket beror hÀr pÄ hÄrdvara och konfigurationsuppgifter. För heterogen hÄrdvara kan man övervÀga REDFISH API. Om all "hÄrdvara" kommer frÄn en och samma leverantör Àr det ofta bekvÀmare att anvÀnda fÀrdiga hanteringsverktyg (t.ex. HP ILO Amplifier, DELL OpenManage osv.).

För installation av operativsystem pÄ fysiska servrar anvÀnde vi det vÀlkÀnda Cobbler, dÀr en uppsÀttning av överenskomna installationsprofiler definieras med driftavdelningen. NÀr en ny server lÀggs till infrastrukturen kopplade ingenjören MAC-adressen för servern till den nödvÀndiga profilen i Cobbler. Vid första nÀtverksstart fick servern en tillfÀllig adress och en ny operativsystem. DÀrefter flyttades den till den avsedda VLAN/IP-adresseringen och fortsatte sitt arbete dÀr. Ja, bytet av VLAN tar tid och krÀver samordning, men det ger ytterligare skydd mot oavsiktlig installation av en server i produktionsmiljön.

Vi skapade virtuella servrar baserat pÄ mallar, förberedda med hjÀlp av HashiCorp Packer. Anledningen var densamma: att förhindra potentiella mÀnskliga fel vid installation av operativsystem. Men till skillnad frÄn fysiska servrar tillÄter Packer att man inte behöver anvÀnda PXE, nÀtverksstart och VLAN-byte. Detta underlÀttade och förenklade skapandet av virtuella servrar.

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 1. Hantering av installation av operativsystem.

Hantera hemligheter

Alla konfigurationshanteringssystem innehar data som ska döljas för vanliga anvÀndare, men som behövs för systemförberedelse. Detta inkluderar lösenord för lokala anvÀndare och tjÀnstekonton, certifikatnycklar, olika API-tokens osv. De kallas vanligtvis "hemligheter".

Om man inte frÄn början bestÀmmer var och hur man ska lagra dessa hemligheter, sÄ finns det, beroende pÄ strÀngheten i informationssÀkerhetskraven, flera möjliga lagringsmetoder:

  • direkt i konfigurationshanteringskoden eller i filerna i repositoryt;
  • i specialiserade verktyg för konfigurationshantering (t.ex. Ansible Vault);
  • i CI/CD-system (Jenkins/TeamCity/GitLab/ etc.) eller i konfigurationshanteringssystem (Ansible Tower/Ansible AWX);
  • ocksĂ„ kan hemligheter överföras med "manuell hantering". Till exempel lĂ€ggs de ut pĂ„ en överenskommen plats och anvĂ€nds sedan av konfigurationshanteringssystem;
  • olika kombinationer av ovanstĂ„ende.

Varje metod har sina nackdelar. Den största Àr avsaknaden av Ätkomstpolitiker för hemligheter: det gÄr inte att eller Àr svÄrt att bestÀmma vem som kan anvÀnda vissa hemligheter. En annan nackdel Àr bristen pÄ Ätkomstrevision och en fullstÀndig livscykel. Hur snabbt kan man byta ut, till exempel, en offentlig nyckel som Àr inskriven i koden och i flera angrÀnsande system?

Vi har anvÀnt det centrala hemlagret HashiCorp Vault. Det har gjort att vi kan:

  • lagra hemligheter sĂ€kert. De Ă€r krypterade, och Ă€ven om nĂ„gon fĂ„r tillgĂ„ng till databasen i Vault-lagret (t.ex. Ă„terstĂ€ller den frĂ„n en sĂ€kerhetskopia), kan de inte lĂ€sa de hemligheter som lagras dĂ€r;
  • organisera Ă„tkomstpolitiker för hemligheter. AnvĂ€ndare och applikationer har endast tillgĂ„ng till de hemligheter som "tilldelats" dem;
  • genomföra revision av Ă„tkomst till hemligheter. Alla Ă„tgĂ€rder med hemligheter registreras i Vaults revisionslogg;
  • organisera en fullstĂ€ndig "livscykel" för arbete med hemligheter. De kan skapas, Ă„terkallas, sĂ€ttas med en utgĂ„ngstid osv.
  • enkelt integrera med andra system som behöver Ă„tkomst till hemligheter;
  • och ocksĂ„ tillĂ€mpa end-to-end-kryptering, engĂ„ngslösenord för OS och databaser, certifikat frĂ„n auktoriserade centra osv.

Nu gÄr vi vidare till det centrala autentiserings- och auktoriseringssystemet. Det skulle ha gÄtt utan det, men att administrera anvÀndare i mÄnga nÀrstÄende system Àr för komplicerat. Vi har stÀllt in autentisering och auktorisering via LDAP-tjÀnsten. Annars skulle det i Vault ha krÀvts ett kontinuerligt utfÀrdande och uppföljning av autentiseringstokens för anvÀndarna. Att ta bort och lÀgga till anvÀndare skulle ha förvandlats till ett Àventyr: "har jag skapat/ tagit bort detta konto överallt?"

Vi lÀgger till ytterligare ett lager i vÄrt system: hantering av hemligheter och central autentisering/auktorisering:

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 2. Hantering av hemligheter.

Konfigurationhantering

Vi har kommit till kÀrnan - till CMS-systemet. I vÄrt fall Àr det en kombination av Ansible och Red Hat Ansible AWX.

IstÀllet för Ansible kan Chef, Puppet eller SaltStack anvÀndas. Vi valde Ansible av flera anledningar.

  • För det första Ă€r det mĂ„ngsidighet. Utbudet av fĂ€rdiga moduler för hantering imponerar.Om det skulle saknas nĂ„got kan man leta pĂ„ GitHub och Galaxy.
  • För det andra behöver man inte installera och underhĂ„lla agenter pĂ„ den hanterade utrustningen, bevisa att de inte pĂ„verkar belastningen och bekrĂ€fta att det inte finns nĂ„gra "bakdörrar".
  • För det tredje har Ansible en lĂ„g inlĂ€rningströskel. En kunnig ingenjör kan skriva en fungerande playbook redan första dagen med produkten.

Men bara Ansible rÀcker inte i industriella miljöer. Annars skulle det uppstÄ mÄnga problem med ÄtkomstbegrÀnsningar och granskning av administratörernas ÄtgÀrder. Hur ska man avgrÀnsa Ätkomsten? Det behövdes sÄ att varje avdelning hanterade (lÀs - körde Ansible playbooks) "sitt" set av servrar. Hur ska man tillÄta att endast vissa anstÀllda fÄr köra specifika Ansible playbooks? Eller hur ska man spÄra vem som körde en playbook utan att skapa mÄnga lokala anvÀndarkonton pÄ servrar och utrustning som hanteras av Ansible?

Det mesta av sÄdana frÄgor löses av Red Hat Ansible Tower, eller dess open-source upstream-projekt Ansible AWX. DÀrför föredrog vi det för kunden.

Och ytterligare en detalj om vÄr CMS-system. Ansible playbook mÄste lagras i kodhanteringssystem. I vÄrt fall Àr det GitLab CE.

SÄ konfigurationerna hanteras av en kombination av Ansible/Ansible AWX/GitLab (se Fig. 3). Naturligtvis Àr AWX/GitLab integrerade med ett enhetligt autentiseringssystem, och Ansible playbook Àr kopplad till HashiCorp Vault. Konfigurationerna gÄr in i produktionsmiljön endast genom Ansible AWX, dÀr alla "spelregler" anges: vem som kan konfigurera vad, varifrÄn man tar kod för konfigurationerna för CMS osv.

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 3. Konfigurationhantering.

Testhantering

VÄr konfiguration representeras som kod. DÀrför tvingas vi spela efter samma regler som programvaruutvecklarna. Vi behövde organisera processer för utveckling, kontinuerlig testning, leverans och tillÀmpning av konfigurationskod pÄ produktionsservrar.

Om detta inte görs direkt, slutar de skrivna rollerna för konfigurationen antingen att stödjas och förÀndras, eller sÄ slutar de att köras i produktion. Botemedlet för denna smÀrta Àr vÀlkÀnt, och det har visat sig framgÄngsrikt i detta projekt:

  • varje roll Ă€r tĂ€ckt av modulĂ€ra tester;
  • testerna körs automatiskt vid varje Ă€ndring i koden som hanterar konfigurationerna;
  • Ă€ndringar i koden som hanterar konfigurationer gĂ„r i produktion endast efter att alla tester och code review har genomförts med framgĂ„ng.

Utvecklingen av kod och hantering av konfigurationer har blivit lugnare och mer förutsÀgbar. För att organisera kontinuerlig testning anvÀnde vi GitLab CI/CD-verktyg, och som ramverk för att organisera tester valde vi Ansible Molecule.

Vid varje Àndring i koden som hanterar konfigurationer anropar GitLab CI/CD Molecule:

  • den kontrollerar syntaxen i koden,
  • startar en Docker-behĂ„llare,
  • tillĂ€mpa den Ă€ndrade koden i den skapade behĂ„llaren,
  • kontrollerar rollen för idempotens och kör tester för denna kod (granularitet hĂ€r Ă€r pĂ„ nivĂ„n ansible-roll, se Fig. 4).

Vi levererade konfigurationer till produktion med hjÀlp av Ansible AWX. Ansvarsfulla ingenjörer för drift tillÀmpade Àndringar i konfigurationen genom pÄ förhand bestÀmda mallar. AWX begÀrde automatiskt den senaste versionen av koden frÄn master-grenen i GitLab vid varje tillÀmpning. SÄ uteslöt vi anvÀndningen av icke-kontrollerad eller förÄldrad kod i produktion. Naturligtvis kom koden till master-grenen endast efter testning, granskning och godkÀnnande.

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 4. Automatiserad testning av roller i GitLab CI/CD.

Det finns ocksÄ ett problem relaterat till driften av produktionssystem. I verkliga livet Àr det mycket svÄrt att göra Àndringar i konfigurationen endast genom CMS-kod. Det uppstÄr nödsituationer dÀr ingenjören mÄste Àndra konfigurationen "hÀr och nu", utan att vÀnta pÄ kodÀndringar, testning, godkÀnnande osv.

Som ett resultat av manuella förÀndringar uppstÄr skillnader i konfigurationen pÄ liknande utrustning (till exempel har noderna i HA-klustret olika sysctl-konfigurationer). Eller sÄ skiljer sig den verkliga konfigurationen pÄ utrustningen frÄn den som anges i CMS-koden.

DÀrför, utöver kontinuerlig testning, kontrollerar vi produktionsmiljöerna för att upptÀcka konfigurationsavvikelser. Vi valde det enklaste alternativet: att köra kodkonfigurationen för CMS i "dry run"-lÀge, vilket innebÀr utan att tillÀmpa Àndringar men med meddelande om alla avvikelser mellan den planerade och den verkliga konfigurationen. Vi implementerade detta genom periodiska körningar av alla Ansible-playbooks med alternativet "--check" pÄ produktionsservrarna. För körning och aktualitet av playbooks ansvarar alltid Ansible AWX (se Fig. 5):

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 5. Kontroller för konfigurationsavvikelser i Ansible AWX.

Efter kontrollerna skickar AWX en rapport om avvikelser till administratörerna. De granskar den problematiska konfigurationen och rÀttar sedan till den via justerade playbooks. PÄ sÄ sÀtt hÄller vi konfigurationen i produktionsmiljön och CMS Àr alltid i ett aktuellt och synkroniserat tillstÄnd. Detta förhindrar obehagliga "under" nÀr CMS-kod tillÀmpas pÄ "live"-servrar.

Nu har vi fÄtt en viktig nivÄ av testning bestÄende av Ansible AWX/GitLab/Molecule (Fig. 6).

En thriller om serverkonfiguration utan mirakel med Configuration Management
Fig. 6. Hantering av testning.

SvÄrt? Jag hÄller med. Men en sÄdan sammanstÀllning av konfigurationshantering har blivit ett uttömmande svar pÄ mÄnga frÄgor relaterade till automatisering av serverkonfigurering. Nu har ÄterförsÀljaren alltid en strikt definierad konfiguration för typiska servrar. Till skillnad frÄn en ingenjör kommer CMS inte att glömma att lÀgga till nödvÀndiga instÀllningar, skapa anvÀndare och utföra dussintals eller hundratals erforderliga instÀllningar.

I instÀllningarna för servrar och miljöer finns det i dag inga "hemliga kunskaper". Alla nödvÀndiga detaljer Äterspeglas i playbooks. Ingen mer kreativitet och oklara instruktioner: "stÀll som en vanlig Oracle, men dÀr mÄste ett par sysctl-instÀllningar skrivas in, och anvÀndare med rÀtt UID lÀggas till. FrÄga killarna frÄn driften, de vet.».

Möjligheten att upptÀcka konfigurationsavvikelser och ÄtgÀrda dem i förvÀg ger trygghet. Utan system för konfigurationshantering ser det vanligtvis annorlunda ut. Problem samlas pÄ hög tills de plötsligt "exploderar" i produktionen. Sedan görs en utredning, konfigurationerna kontrolleras och rÀttas. Och cykeln upprepas igen.

Och vi har sjÀlvklart pÄskyndat lanseringen av servrar i drift frÄn flera dagar till timmar.

Men pÄ sjÀlva nyÄrsnatten, nÀr barnen glÀdjefullt rev upp sina presenter och de vuxna önskade sig saker under klockslaget, migrerade vÄra ingenjörer SAP-systemet till nya servrar. Till och med Jultomten skulle sÀga att de bÀsta miraklen Àr vÀl förberedda.

P.S. VĂ„rt team stöter ofta pĂ„ att kunderna vill lösa hanteringen av konfigurationer sĂ„ enkelt som möjligt. Helst som om det vore magi — med ett enda verktyg. Men i verkligheten Ă€r det mer komplicerat (ja, de har inte skickat nĂ„gra silverkulor igen): det blir nödvĂ€ndigt att skapa en hel process med hjĂ€lp av verktyg som Ă€r bekvĂ€ma för kundens team.

Författare: Sergey Artemov, avdelningsarkitekt DevOps-lösningar «Infosytemer Jet»

KĂ€lla: habr.com

Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar đŸ”„ Köp pĂ„litlig webbhotell med DDoS-skydd, VPS VDS-servrar | ProHoster