Желіні автоматтандыру. Өз өмірінен алынған оқиға

Эй Хабр!

Бұл мақалада біз желілік инфрақұрылымды автоматтандыру туралы айтқымыз келеді. Бір шағын, бірақ өте мақтанарлық компанияда жұмыс істейтін желінің жұмыс диаграммасы ұсынылады. Нақты желілік жабдықпен сәйкестіктердің барлығы кездейсоқ. Біз бұл желіде орын алған жағдайды қарастырамыз, ол ұзақ уақыт бойы бизнестің тоқтап қалуына және елеулі қаржылық шығындарға әкелуі мүмкін. Бұл жағдайдың шешімі «Желілік инфрақұрылымды автоматтандыру» тұжырымдамасына өте жақсы сәйкес келеді. Автоматтандыру құралдарын пайдалана отырып, біз қысқа уақыт ішінде күрделі мәселелерді қалай тиімді шешуге болатынын көрсетеміз және бұл мәселелерді неге басқаша емес (консоль арқылы) осылай шешу керек екенін көрсетеміз.

Жауапкершіліктен бас тарту

Біздің автоматтандыруға арналған негізгі құралдарымыз Ansible (автоматтандыру құралы ретінде) және Git (Ansible ойын кітаптарының репозиторийі ретінде). Мен бұл кіріспе мақала емес екенін бірден ескерткім келеді, онда біз Ansible немесе Git логикасы туралы сөйлесеміз және негізгі нәрселерді түсіндіреміз (мысалы, рөлдік модульдер, инвентарлық файлдар, Ansible-дегі айнымалылар деген не немесе бұл кезде не болады) git push немесе git commit командаларын енгізесіз). Бұл әңгіме Ansible-ді қалай жаттықтыруға және жабдықта NTP немесе SMTP конфигурациялауға болатыны туралы емес. Бұл желі мәселесін қатесіз қалай тез және жақсырақ шешуге болатыны туралы әңгіме. Сондай-ақ, желінің қалай жұмыс істейтінін, атап айтқанда, TCP/IP, OSPF, BGP хаттама стегінің не екенін жақсы түсінген жөн. Біз сонымен қатар Ansible және Git таңдауын теңдеуден шығарамыз. Егер сізге әлі де нақты шешімді таңдау қажет болса, біз «Желілік бағдарламалау және автоматтандыру» кітабын оқуды ұсынамыз. Джейсон Эдельман, Скотт С. Лоу және Мэтт Освалттың келесі буын желі инженеріне арналған дағдылар».

Енді нүктеге.

Мәселенің тұжырымы

Бір жағдайды елестетіп көрейік: түнгі сағат 3-те сіз қатты ұйықтап, түс көріп жатырсыз. Телефон қоңырауы. Техникалық директор шақырады:

- Иә?
— ###, ####, #####, желіаралық қалқан кластері құлап, көтерілмей жатыр!!!
Сіз не болып жатқанын түсінуге тырысып, көзіңізді уқалайсыз және бұл қалай болуы мүмкін екенін елестетесіз. Телефонда директордың басындағы шашы жыртылып жатқанын естисіз, ол қайта қоңырау шалуды сұрайды, өйткені генерал оған екінші желіде қоңырау шалып жатыр.

Жарты сағаттан кейін сіз кезекшілік ауысымының алғашқы кіріспе жазбаларын жинадыңыз, оятуға болатын барлық адамдарды ояттыңыз. Нәтижесінде, техникалық директор өтірік айтпады, бәрі бұрынғыдай, брандмауэрлердің негізгі кластері құлады және дененің негізгі қозғалысы оны есін жимайды. Компания ұсынатын барлық қызметтер жұмыс істемейді.

Сіздің талғамыңызға байланысты мәселені таңдаңыз, әркім әртүрлі нәрсені есте сақтайды. Мысалы, ауыр жүктеме болмаған кезде түнгі жаңартудан кейін бәрі жақсы жұмыс істеді және бәрі бақытты төсекке кетті. Трафик ағып, желілік карта драйверіндегі қатеге байланысты интерфейс буферлері толып кете бастады.

Джеки Чан жағдайды жақсы сипаттай алады.

Желіні автоматтандыру. Өз өмірінен алынған оқиға

Рахмет, Джеки.

Өте жағымды жағдай емес, солай емес пе?

Бір сәт мұңды ойларымен желіні тастап кетейік ағайын.

Оқиғалардың әрі қарай қалай дамитынын талқылайық.

Біз материалды көрсетудің келесі ретін ұсынамыз

  1. Желілік диаграмманы қарастырайық және оның қалай жұмыс істейтінін көрейік;
  2. Біз Ansible көмегімен параметрлерді бір маршрутизатордан екіншісіне қалай тасымалдайтынымызды сипаттаймыз;
  3. Жалпы АТ-инфрақұрылымын автоматтандыру туралы айтайық.

Желінің диаграммасы және сипаттамасы

Схема

Желіні автоматтандыру. Өз өмірінен алынған оқиға

Ұйымымыздың логикалық сызбасын қарастырайық. Біз нақты жабдық өндірушілерін атамаймыз; осы мақаланың мақсаттары үшін бұл маңызды емес (Мұқият оқырман қандай жабдық қолданылатынын болжайды). Бұл Ansible-мен жұмыс істеудің жақсы артықшылықтарының бірі ғана; орнату кезінде біз оның қандай жабдық екеніне мән бермейміз. Түсіну үшін, бұл Cisco, Juniper, Check Point, Fortinet, Palo Alto сияқты танымал өндірушілердің жабдықтары ... сіз өзіңіздің опцияңызды ауыстыра аласыз.

Бізде трафикті жылжытудың екі негізгі міндеті бар:

  1. Компанияның қызметі болып табылатын қызметтерімізді жариялауды қамтамасыз ету;
  2. Филиалдармен, қашықтағы дата орталығымен және үшінші тарап ұйымдарымен (серіктестермен және клиенттермен) байланысты қамтамасыз ету, сондай-ақ орталық кеңсе арқылы филиалдардың Интернетке қолжетімділігін қамтамасыз ету.

Негізгі элементтерден бастайық:

  1. Екі шекаралық маршрутизатор (BRD-01, BRD-02);
  2. Брандмауэр кластері (FW-CLUSTER);
  3. Негізгі қосқыш (L3-CORE);
  4. Өмірлік желіге айналатын маршрутизатор (мәселені шешкен кезде біз желі параметрлерін FW-CLUSTER-ден EMMERGENCY күйіне көшіреміз) (EMERGENCY);
  5. Желілік инфрақұрылымды басқаруға арналған коммутаторлар (L2-MGMT);
  6. Git және Ansible бар виртуалды машина (VM-AUTOMATION);
  7. Ansible (Laptop-Automation) үшін ойын кітаптарын сынау және әзірлеу жүзеге асырылатын ноутбук.

Желі келесі аймақтары бар динамикалық OSPF маршруттау протоколымен конфигурацияланған:

  • 0-аймақ – айырбас аймағындағы трафикті жылжытуға жауапты маршрутизаторларды қамтитын аймақ;
  • 1-аймақ – компания қызметтерінің жұмысына жауапты маршрутизаторларды қамтитын аймақ;
  • 2-аймақ – трафикті басқаруға жауапты маршрутизаторларды қамтитын аймақ;
  • N ауданы – салалық желілердің аудандары.

Шекаралық маршрутизаторларда виртуалды маршрутизатор (VRF-INTERNET) жасалады, оған eBGP толық көрінісі сәйкес тағайындалған AS орнатылған. iBGP VRF арасында конфигурацияланған. Компанияда осы VRF-INTERNET-те жарияланған ақ мекенжайлар пулы бар. Кейбір ақ мекенжайлар тікелей FW-CLUSTER (компанияның қызметтері жұмыс істейтін мекенжайлар), кейбіреулері EXCHANGE аймағы (сыртқы IP мекенжайларын қажет ететін компанияның ішкі қызметтері және кеңселер үшін сыртқы NAT мекенжайлары) арқылы бағытталады. Содан кейін трафик ақ және сұр мекенжайлары (қауіпсіздік аймақтары) бар L3-CORE жүйесінде жасалған виртуалды маршрутизаторларға өтеді.

Басқару желісі бөлінген қосқыштарды пайдаланады және физикалық бөлінген желіні білдіреді. Басқару желісі де қауіпсіздік аймақтарына бөлінген.
EMERGENCY маршрутизаторы FW-CLUSTER-ді физикалық және логикалық түрде қайталайды. Басқару желісіне қарайтындардан басқа ондағы барлық интерфейстер өшірілген.

Автоматтандыру және оның сипаттамасы

Біз желінің қалай жұмыс істейтінін анықтадық. Енді трафикті FW-CLUSTER-ден Төтенше жағдайға ауыстыру үшін не істейтінімізді кезең-кезеңімен қарастырайық:

  1. Біз оны FW-CLUSTER-ге қосатын негізгі қосқыштағы (L3-CORE) интерфейстерді өшіреміз;
  2. Біз оны FW-CLUSTER-ге қосатын L2-MGMT ядро ​​қосқышындағы интерфейстерді өшіреміз;
  3. Біз EMERGENCY маршрутизаторын конфигурациялаймыз (әдепкі бойынша, онда L2-MGMT-мен байланыстырылғандардан басқа барлық интерфейстер өшірілген):

  • Біз EMERGENCY режимінде интерфейстерді қосамыз;
  • Біз FW-кластерінде болған сыртқы IP мекенжайын (NAT үшін) конфигурациялаймыз;
  • L3-CORE arp кестелеріндегі көкнәр мекенжайлары FW-Cluster-тен ТӨТЕНШЕ ЖАҒДАЙға өзгертілуі үшін gARP сұрауларын жасаймыз;
  • Біз әдепкі маршрутты BRD-01, BRD-02 үшін статикалық ретінде тіркейміз;
  • NAT ережелерін құру;
  • Төтенше жағдайдағы 1-ші аймаққа дейін көтеру;
  • Төтенше жағдайдағы 2-ші аймаққа дейін көтеру;
  • Біз 1-ден 10-ға дейінгі аумақтағы маршруттардың құнын өзгертеміз;
  • 1-аймақтағы әдепкі маршруттың құнын 10-ға өзгертеміз;
  • Біз L2-MGMT-мен байланысты IP мекенжайларын өзгертеміз (FW-CLUSTER-де болғандарға);
  • L2-MGMT arp кестелеріндегі көкнәр мекенжайлары FW-CLUSTER-ден ТӨТЕНШЕ ЖАҒДАЙға өзгертілуі үшін gARP сұрауларын жасаймыз.

Тағы да біз мәселенің бастапқы тұжырымына ораламыз. Таңғы сағат үш, орасан зор стресс, кез келген кезеңдегі қателік жаңа мәселелерге әкелуі мүмкін. CLI арқылы пәрмендерді теруге дайынсыз ба? Иә? Жарайды, тым болмаса бетіңді шайып, кофе ішіп, ерік-жігеріңді жина.
Брюс, өтінемін, жігіттерге көмектес.

Желіні автоматтандыру. Өз өмірінен алынған оқиға

Біз автоматтандыруды жақсартуды жалғастырамыз.
Төменде ойын кітабының Ansible терминдерінде қалай жұмыс істейтінінің диаграммасы берілген. Бұл схема жоғарыда сипаттағанымызды көрсетеді, бұл Ansible-дегі нақты іске асыру ғана.
Желіні автоматтандыру. Өз өмірінен алынған оқиға

Бұл кезеңде біз не істеу керектігін түсіндік, ойын кітапшасын әзірледік, тестілеу жүргіздік, енді оны іске қосуға дайынбыз.

Тағы бір шағын лирикалық шегініс. Әңгіменің жеңілдігі сізді адастырмауы керек. Ойын кітаптарын жазу процесі көрінетіндей қарапайым және жылдам болған жоқ. Тестілеу өте көп уақытты алды, виртуалды стенд жасалды, шешім бірнеше рет сынақтан өтті, 100-ге жуық сынақ жүргізілді.

Іске қосайық... Барлығы өте баяу болып жатыр, бір жерде қате бар, соңында бірдеңе істемейді деген сезім бар. Парашютпен секіру сезімі, бірақ парашют бірден ашқысы келмейді... бұл қалыпты жағдай.

Әрі қарай, біз Ansible ойын кітабының орындалған әрекеттерінің нәтижесін оқимыз (құпиялылық мақсатында IP мекенжайлары ауыстырылды):

[xxx@emergency ansible]$ ansible-playbook -i /etc/ansible/inventories/prod_inventory.ini /etc/ansible/playbooks/emergency_on.yml 

PLAY [------->Emergency on VCF] ********************************************************

TASK [vcf_junos_emergency_on : Disable PROD interfaces to FW-CLUSTER] *********************
changed: [vcf]

PLAY [------->Emergency on MGMT-CORE] ************************************************

TASK [mgmt_junos_emergency_on : Disable MGMT interfaces to FW-CLUSTER] ******************
changed: [m9-03-sw-03-mgmt-core]

PLAY [------->Emergency on] ****************************************************

TASK [mk_routeros_emergency_on : Enable EXT-INTERNET interface] **************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Generate gARP for EXT-INTERNET interface] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable static default route to EXT-INTERNET] ****************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change NAT rule to EXT-INTERNET interface] ****************
changed: [m9-04-r-04] => (item=12)
changed: [m9-04-r-04] => (item=14)
changed: [m9-04-r-04] => (item=15)
changed: [m9-04-r-04] => (item=16)
changed: [m9-04-r-04] => (item=17)

TASK [mk_routeros_emergency_on : Enable OSPF Area 1 PROD] ******************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Enable OSPF Area 2 MGMT] *****************************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change OSPF Area 1 interfaces costs to 10] *****************
changed: [m9-04-r-04] => (item=VLAN-1001)
changed: [m9-04-r-04] => (item=VLAN-1002)
changed: [m9-04-r-04] => (item=VLAN-1003)
changed: [m9-04-r-04] => (item=VLAN-1004)
changed: [m9-04-r-04] => (item=VLAN-1005)
changed: [m9-04-r-04] => (item=VLAN-1006)
changed: [m9-04-r-04] => (item=VLAN-1007)
changed: [m9-04-r-04] => (item=VLAN-1008)
changed: [m9-04-r-04] => (item=VLAN-1009)
changed: [m9-04-r-04] => (item=VLAN-1010)
changed: [m9-04-r-04] => (item=VLAN-1011)
changed: [m9-04-r-04] => (item=VLAN-1012)
changed: [m9-04-r-04] => (item=VLAN-1013)
changed: [m9-04-r-04] => (item=VLAN-1100)

TASK [mk_routeros_emergency_on : Change OSPF area1 default cost for to 10] ******************
changed: [m9-04-r-04]

TASK [mk_routeros_emergency_on : Change MGMT interfaces ip addresses] ********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

TASK [mk_routeros_emergency_on : Generate gARPs for MGMT interfaces] *********************
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n.254', u'name': u'VLAN-803'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+1.254', u'name': u'VLAN-805'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+2.254', u'name': u'VLAN-807'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+3.254', u'name': u'VLAN-809'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+4.254', u'name': u'VLAN-820'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+5.254', u'name': u'VLAN-822'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+6.254', u'name': u'VLAN-823'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+7.254', u'name': u'VLAN-824'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+8.254', u'name': u'VLAN-850'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+9.254', u'name': u'VLAN-851'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+10.254', u'name': u'VLAN-852'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+11.254', u'name': u'VLAN-853'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+12.254', u'name': u'VLAN-870'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+13.254', u'name': u'VLAN-898'})
changed: [m9-04-r-04] => (item={u'ip': u'х.х.n+14.254', u'name': u'VLAN-899'})

PLAY RECAP ************************************************************************

Аяқталды!

Шындығында, ол әлі дайын емес, динамикалық маршруттау протоколдарының конвергенциясы және FIB-ге көптеген бағыттар жүктелуі туралы ұмытпаңыз. Біз бұған ешқандай әсер ете алмаймыз. Күтеміз. Бұл нәтиже берді. Қазір ол дайын.

Ал Вилабахо ауылында (желі орнатуды автоматтандыруды қаламайды) олар ыдыс-аяқ жууды жалғастырады. Брюс (мына, қазірдің өзінде басқаша, бірақ одан кем емес) жабдықты қолмен қайта конфигурациялау қаншалықты көп болатынын түсінуге тырысады.

Желіні автоматтандыру. Өз өмірінен алынған оқиға

Мен де бір маңызды мәселеге тоқталғым келеді. Біз бәрін қалай қайтарамыз? Біраз уақыттан кейін біз FW-CLUSTER-ді қайта жандандырамыз. Бұл резервтік көшірме емес, негізгі жабдық, желі онымен жұмыс істеуі керек.

Сіз сетевиктердің қалай жанып жатқанын сезесіз бе? Техникалық директор неліктен мұны істеуге болмайтынын, неге мұны кейінірек жасауға болатынын мың дәлел естиді. Өкінішке орай, желі бұрынғы сән-салтанатының көптеген патчтардан, бөліктерден және қалдықтарынан осылай жұмыс істейді. Бұл патчворк көрпе болып шығады. Жалпы біздің міндетіміз, бұл нақты жағдайда емес, жалпы алғанда, IT мамандары ретінде, желі жұмысын ағылшынның әдемі «consistency» сөзіне жеткізу, ол өте көп қырлы, оны келесідей аударуға болады: coherence , жүйелілік, логикалық, жүйелілік, жүйелілік, салыстырмалылық, жүйелілік. Мұның бәрі оған қатысты. Тек осы күйде желіні басқаруға болады, біз ненің және қалай жұмыс істейтінін анық түсінеміз, нені өзгерту керектігін анық түсінеміз, қажет болса, проблемалар туындаса, қайда іздеу керектігін анық білеміз. Және тек осындай желіде біз жоғарыда сипаттаған трюктерді орындауға болады.

Іс жүзінде параметрлерді бастапқы күйіне қайтаратын тағы бір ойын кітабы дайындалды. Оның жұмыс істеу логикасы бірдей (тапсырмалардың реті өте маңызды екенін есте ұстаған жөн), қазірдің өзінде ұзақ мақаланы ұзартпау үшін біз ойын кітабының орындалу тізімін жарияламауды шештік. Осындай жаттығуларды орындағаннан кейін сіз өзіңізді әлдеқайда тыныш және болашаққа сенімді сезінесіз, сонымен қатар сіз сонда жинаған кез келген балдақ бірден өзін көрсетеді.

Кез келген адам бізге хат жазып, барлық жазылған кодтың көздерін, барлық палибуктермен бірге ала алады. Профильдегі контактілер.

қорытындылар

Біздің ойымызша, автоматтандыруға болатын процестер әлі кристалданған жоқ. Біз кездестірген нәрселерге және батыстық әріптестеріміз талқылап жатқан нәрселерге сүйене отырып, осы уақытқа дейін келесі тақырыптар көрінеді:

  • Құрылғыны қамтамасыз ету;
  • Мәліметтерді жинау;
  • Есеп беру;
  • Ақаулық себебін іздеу және түзету;
  • Комплаенс.

Егер қызығушылық болса, берілген тақырыптардың бірі бойынша талқылауды жалғастыра аламыз.

Мен автоматтандыру туралы аздап айтқым келеді. Біздің түсінігімізде ол не болуы керек:

  • Жүйені адамдар жетілдіре отырып, адамсыз өмір сүруі керек. Жүйе адамға тәуелді болмауы керек;
  • Операция маман болуы керек. Күнделікті тапсырмаларды орындайтын мамандар класы жоқ. Бүкіл тәртіпті автоматтандырған және тек күрделі мәселелерді шешетін мамандар бар;
  • Әдеттегі стандартты тапсырмалар «бір түймені басу арқылы» автоматты түрде орындалады, ешқандай ресурстар босқа жұмсалмайды. Мұндай тапсырмалардың нәтижесі әрқашан болжамды және түсінікті.

Және бұл нүктелер неге әкелуі керек:

  • АТ-инфрақұрылымының ашықтығы (Жұмыс, жаңғырту, енгізу тәуекелдері аз. Жылына аз тоқтап тұру);
  • АТ-ресурстарды жоспарлау мүмкіндігі (Сыйымдылықты жоспарлау жүйесі - сіз қанша тұтынылатынын көре аласыз, сіз хаттар мен жоғарғы бөлімдерге бару арқылы емес, бір жүйеде қанша ресурстар қажет екенін көре аласыз);
  • IT персоналының санын қысқарту мүмкіндігі.

Мақала авторлары: Александр Человеков (CCIE RS, CCIE SP) және Павел Кириллов. Біз АТ-инфрақұрылымын автоматтандыру тақырыбы бойынша шешімдерді талқылауға және ұсынуға мүдделіміз.


Ақпарат көзі: www.habr.com

пікір қалдыру