Automatyzacja sieci. Sprawa z życia

Hej Habra!

W tym artykule chcielibyśmy porozmawiać o automatyzacji infrastruktury sieciowej. Zaprezentowany zostanie działający schemat sieci działającej w jednej małej, ale bardzo dumnej firmie. Wszystkie mecze z prawdziwym sprzętem sieciowym są losowe. Przyjrzymy się przypadkowi, który miał miejsce w tej sieci, który mógł zakończyć się zamknięciem działalności na długi czas i poważnymi stratami finansowymi. Rozwiązanie tego przypadku bardzo dobrze wpisuje się w koncepcję „Automatyzacji infrastruktury sieciowej”. Korzystając z narzędzi automatyzacji pokażemy jak skutecznie w krótkim czasie rozwiązać złożone problemy oraz zastanowimy się dlaczego problemy te należy rozwiązywać w ten a nie inny sposób (poprzez konsolę).

Odpowiedzialność

Naszymi głównymi narzędziami do automatyzacji są Ansible (jako narzędzie do automatyzacji) i Git (jako repozytorium podręczników Ansible). Od razu zastrzegam, że nie jest to artykuł wprowadzający, w którym rozmawiamy o logice Ansible czy Gita i wyjaśniamy podstawowe rzeczy (na przykład czym są roletaskimodule, pliki inwentarza, zmienne w Ansible, czy co się dzieje, gdy wpisujesz polecenia git push lub git commit). Ta historia nie dotyczy tego, jak możesz ćwiczyć Ansible i konfigurować NTP lub SMTP na swoim sprzęcie. To opowieść o tym, jak szybko i najlepiej rozwiązać problem z siecią bez błędów. Wskazane jest również dobre zrozumienie sposobu działania sieci, w szczególności tego, jaki jest stos protokołów TCP/IP, OSPF, BGP. Wykluczymy także z równania wybór Ansible i Git. Jeśli nadal musisz wybrać konkretne rozwiązanie, gorąco polecamy przeczytanie książki „Programowanie i automatyzacja sieci. Umiejętności inżyniera sieci nowej generacji” autorstwa Jasona Edelmana, Scotta S. Lowe'a i Matta Oswalta.

Teraz do biznesu.

Stwierdzenie problemu

Wyobraźmy sobie sytuację: o trzeciej w nocy mocno śpisz i śnisz. Połączenie telefoniczne. Dyrektor techniczny dzwoni:

- Tak?
— ###, ####, #####, klaster zapory sieciowej upadł i nie rośnie!!!
Przecierasz oczy, próbując zrozumieć, co się dzieje, i wyobrażasz sobie, jak to się w ogóle mogło wydarzyć. W telefonie słychać, jak reżyserowi jeżą się włosy na głowie, a on prosi o oddzwonienie, bo generał dzwoni do niego na drugiej linii.

Pół godziny później zebrałeś pierwsze notatki wprowadzające ze zmiany dyżurowej, obudziłeś wszystkich, których dało się obudzić. W rezultacie dyrektor techniczny nie kłamał, wszystko jest tak, jak jest, główne skupisko firewalli upadło i żadne podstawowe ruchy ciała nie przywracają mu zmysłów. Wszystkie usługi oferowane przez firmę nie działają.

Wybierz problem według własnego gustu, każdy zapamięta coś innego. Na przykład po nocnej aktualizacji przy braku dużego obciążenia wszystko działało dobrze i wszyscy szli spać szczęśliwi. Ruch zaczął przepływać, a bufory interfejsu zaczęły się przepełniać z powodu błędu w sterowniku karty sieciowej.

Jackie Chan potrafi dobrze opisać sytuację.

Automatyzacja sieci. Sprawa z życia

Dziękuję, Jackie.

Niezbyt przyjemna sytuacja, prawda?

Zostawmy na chwilę naszego sieciowego brata z jego smutnymi myślami.

Porozmawiajmy o dalszym rozwoju wydarzeń.

Sugerujemy następującą kolejność prezentacji materiału

  1. Spójrzmy na schemat sieci i zobaczmy, jak to działa;
  2. Opiszemy, jak przenosimy ustawienia z jednego routera na drugi za pomocą Ansible;
  3. Porozmawiajmy o automatyzacji infrastruktury IT jako całości.

Schemat i opis sieci

Schemat

Automatyzacja sieci. Sprawa z życia

Rozważmy schemat logiczny naszej organizacji. Nie będziemy wymieniać konkretnych producentów sprzętu, na potrzeby tego artykułu nie ma to znaczenia (Uważny czytelnik zgadnie, jakiego rodzaju sprzęt jest używany). To tylko jedna z dobrych zalet pracy z Ansible; podczas konfiguracji zazwyczaj nie zwracamy uwagi na rodzaj sprzętu. Żeby zrozumieć, jest to sprzęt od znanych dostawców, takich jak Cisco, Juniper, Check Point, Fortinet, Palo Alto... możesz zastąpić go własną opcją.

W zakresie przemieszczania ruchu mamy dwa główne zadania:

  1. Zapewnij publikację naszych usług, które są przedmiotem działalności firmy;
  2. Zapewnij komunikację z oddziałami, zdalnym centrum danych i organizacjami zewnętrznymi (partnerami i klientami), a także dostęp oddziałów do Internetu za pośrednictwem centrali.

Zacznijmy od podstawowych elementów:

  1. Dwa routery graniczne (BRD-01, BRD-02);
  2. Klaster zapory sieciowej (FW-CLUSTER);
  3. Przełącznik rdzeniowy (L3-CORE);
  4. Router, który stanie się ratunkiem (po rozwiązaniu problemu przeniesiemy ustawienia sieciowe z FW-CLUSTER do EMERGENCY) (EMERGENCY);
  5. Przełączniki do zarządzania infrastrukturą sieciową (L2-MGMT);
  6. Maszyna wirtualna z Git i Ansible (VM-AUTOMATION);
  7. Laptop, na którym prowadzone są testy i rozwój podręczników dla Ansible (Laptop-Automation).

Sieć jest skonfigurowana przy użyciu dynamicznego protokołu routingu OSPF z następującymi obszarami:

  • Obszar 0 – obszar obejmujący routery odpowiedzialne za ruch w strefie EXCHANGE;
  • Obszar 1 – obszar obejmujący routery odpowiedzialne za działanie usług firmy;
  • Obszar 2 – obszar obejmujący routery odpowiedzialne za ruch związany z zarządzaniem routingiem;
  • Obszar N – obszary sieci oddziałów.

Na routerach granicznych tworzony jest router wirtualny (VRF-INTERNET), na którym instalowany jest pełny widok eBGP z odpowiednim przypisanym AS. iBGP jest konfigurowany pomiędzy VRF. Firma posiada pulę białych adresów, które są publikowane w tych VRF-INTERNET. Część białych adresów kierowana jest bezpośrednio do FW-CLUSTER (adresy, na których działają usługi firmy), część kierowana jest przez strefę EXCHANGE (wewnętrzne usługi firmowe wymagające zewnętrznych adresów IP oraz zewnętrzne adresy NAT dla biur). Następnie ruch trafia do routerów wirtualnych utworzonych na L3-CORE z białymi i szarymi adresami (strefy bezpieczeństwa).

Sieć zarządzania wykorzystuje dedykowane przełączniki i reprezentuje fizycznie dedykowaną sieć. Sieć zarządzania jest również podzielona na strefy bezpieczeństwa.
Router EMERGENCY fizycznie i logicznie duplikuje FW-CLUSTER. Wszystkie interfejsy na nim są wyłączone, z wyjątkiem tych, które przeglądają sieć zarządzającą.

Automatyka i jej opis

Ustaliliśmy, jak działa sieć. Przyjrzyjmy się teraz krok po kroku, co zrobimy, aby przenieść ruch z FW-CLUSTER do EMERGENCY:

  1. Wyłączamy interfejsy na przełączniku rdzeniowym (L3-CORE), które łączą go z FW-CLUSTER;
  2. Wyłączamy interfejsy przełącznika jądra L2-MGMT, które łączą go z FW-CLUSTER;
  3. Konfigurujemy router AWARYJNY (domyślnie wszystkie interfejsy są na nim wyłączone, z wyjątkiem tych związanych z L2-MGMT):

  • Udostępniamy interfejsy w trybie AWARYJNYM;
  • Konfigurujemy zewnętrzny adres IP (dla NAT), który znajdował się w klastrze FW;
  • Generujemy żądania gARP, dzięki czemu adresy maków w tablicach arp L3-CORE zostaną zmienione z FW-Cluster na EMERGENCY;
  • Trasę domyślną rejestrujemy jako statyczną do BRD-01, BRD-02;
  • Utwórz reguły NAT;
  • Podnieś do AWARYJNEGO obszaru OSPF 1;
  • Podnieś do AWARYJNEGO obszaru OSPF 2;
  • Zmieniamy koszt tras w Strefie 1 na 10;
  • Zmieniamy koszt trasy domyślnej w Strefie 1 na 10;
  • Zmieniamy adresy IP powiązane z L2-MGMT (na te, które były na FW-CLUSTER);
  • Generujemy żądania gARP, dzięki czemu adresy maków w tablicach arp L2-MGMT zostały zmienione z FW-CLUSTER na EMERGENCY.

Ponownie wracamy do pierwotnego sformułowania problemu. Trzecia w nocy, ogromny stres, błąd na którymkolwiek etapie może skutkować nowymi problemami. Gotowy do wpisywania poleceń za pośrednictwem interfejsu CLI? Tak? Ok, chociaż idź opłucz twarz, napij się kawy i zbierz siłę woli.
Bruce, pomóż chłopakom.

Automatyzacja sieci. Sprawa z życia

Cóż, nadal udoskonalamy naszą automatyzację.
Poniżej znajduje się schemat działania podręcznika w języku Ansible. Ten schemat odzwierciedla to, co opisaliśmy tuż powyżej, jest to po prostu konkretna implementacja w Ansible.
Automatyzacja sieci. Sprawa z życia

Na tym etapie zdaliśmy sobie sprawę, co należy zrobić, opracowaliśmy playbook, przeprowadziliśmy testy i teraz jesteśmy gotowi go uruchomić.

Kolejna mała dygresja liryczna. Łatwość narracji nie powinna Cię zmylić. Proces pisania podręczników nie był tak prosty i szybki, jak mogłoby się wydawać. Testowanie trwało dość długo, powstało wirtualne stanowisko, rozwiązanie było wielokrotnie testowane, przeprowadzono około 100 testów.

Odpalamy... Jest wrażenie, że wszystko dzieje się bardzo powoli, gdzieś jest błąd, coś w końcu nie zadziała. Uczucie, że skaczesz ze spadochronem, ale spadochron nie chce się od razu otworzyć… to normalne.

Następnie odczytujemy wynik wykonanych operacji playbooka Ansible (w celu zachowania tajemnicy adresy IP zostały zamienione):

[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 ************************************************************************

Gotowe!

Tak naprawdę nie jest jeszcze całkiem gotowy, nie zapomnij o zbieżności protokołów routingu dynamicznego i załadowaniu dużej liczby tras do FIB. Nie mamy na to żadnego wpływu. Czekamy. To się sprawdziło. Teraz jest gotowe.

A we wsi Vilabajo (która nie chce automatyzować konfiguracji sieci) nadal zmywają naczynia. Bruce (co prawda już inny, ale nie mniej fajny) próbuje zrozumieć, o ile bardziej będzie miała miejsce ręczna rekonfiguracja sprzętu.

Automatyzacja sieci. Sprawa z życia

Chciałbym też poruszyć jedną ważną kwestię. Jak możemy wszystko odzyskać? Po pewnym czasie przywrócimy do życia nasz FW-CLUSTER. To jest sprzęt główny, a nie zapasowy, sieć musi na nim działać.

Czy czujesz, jak networkerzy zaczynają się wypalać? Dyrektor techniczny usłyszy tysiąc argumentów, dlaczego nie należy tego robić, dlaczego można to zrobić później. Niestety tak właśnie działa sieć oparta na zlepkach, kawałkach i pozostałościach dawnego luksusu. Okazuje się, że to patchworkowa kołdra. Naszym zadaniem w ogóle, nie w tej konkretnej sytuacji, ale w ogóle w zasadzie, jako informatyków, jest sprowadzenie pracy sieci do pięknego angielskiego słowa „spójność”, jest ona bardzo wieloaspektowa, można to przetłumaczyć jako: spójność , konsekwencja, logika, spójność, systematyczność, porównywalność, spójność. To wszystko o nim. Tylko w tym stanie sieć jest możliwa do zarządzania, jasno rozumiemy co i jak działa, jasno rozumiemy, co należy zmienić, jeśli to konieczne, doskonale wiemy, gdzie szukać, jeśli pojawią się problemy. I tylko w takiej sieci można wykonywać triki takie jak te, które właśnie opisaliśmy.

Właściwie przygotowano kolejny playbook, który przywrócił ustawienia do pierwotnego stanu. Logika jego działania jest taka sama (trzeba pamiętać, że kolejność zadań jest bardzo ważna), aby nie przedłużać i tak już dość długiego artykułu, postanowiliśmy nie publikować zestawienia wykonania playbooka. Po wykonaniu takich ćwiczeń poczujesz się znacznie spokojniejszy i pewniejszy siebie w przyszłości, ponadto wszelkie kule, które tam zgromadziłeś, natychmiast się ujawnią.

Każdy może do nas napisać i otrzymać źródła całego napisanego kodu wraz ze wszystkimi książeczkami. Kontakty w profilu.

odkrycia

Naszym zdaniem procesy, które można zautomatyzować, jeszcze się nie wykrystalizowały. Na podstawie tego, co napotkaliśmy i o czym dyskutują nasi zachodni koledzy, jak dotąd widoczne są następujące tematy:

  • Udostępnianie urządzeń;
  • Gromadzenie danych;
  • Raportowanie;
  • Rozwiązywanie problemów;
  • Spełnienie.

Jeżeli będzie zainteresowanie, możemy kontynuować dyskusję na jeden z podanych tematów.

Chciałbym też porozmawiać trochę o automatyzacji. Co powinno być w naszym rozumieniu:

  • System musi żyć bez człowieka, będąc przez człowieka udoskonalany. System nie powinien zależeć od ludzi;
  • Obsługa musi być fachowa. Nie ma klasy specjalistów wykonujących rutynowe zadania. Istnieją eksperci, którzy zautomatyzowali całą procedurę i rozwiązali tylko złożone problemy;
  • Rutynowe, standardowe zadania są wykonywane automatycznie „za naciśnięciem jednego przycisku”, bez marnowania zasobów. Wynik takich zadań jest zawsze przewidywalny i zrozumiały.

I do czego powinny prowadzić te punkty:

  • Przejrzystość infrastruktury IT (Mniejsze ryzyko eksploatacji, modernizacji, wdrożenia. Mniej przestojów w skali roku);
  • Możliwość planowania zasobów IT (system planowania wydajności - możesz zobaczyć, ile jest zużywane, możesz zobaczyć, ile zasobów potrzeba w jednym systemie, a nie poprzez listy i wizyty w najwyższych działach);
  • Możliwość zmniejszenia liczby pracowników IT.

Autorzy artykułu: Alexander Chelovekov (CCIE RS, CCIE SP) i Pavel Kirillov. Jesteśmy zainteresowani dyskusją i propozycją rozwiązań w temacie automatyzacji infrastruktury IT.


Źródło: www.habr.com

Dodaj komentarz