網路自動化。 一個生活中的案例

嘿哈布爾!

在本文中,我們想討論網路基礎設施的自動化。 將展示一家小型但非常自豪的公司所經營的網路工作圖。 所有與真實網路設備的匹配都是隨機的。 我們將看看該網路中發生的一個案例,該案例可能導致企業長期關閉並造成嚴重的財務損失。 此案例的解決方案非常符合「網路基礎設施自動化」的概念。 使用自動化工具,我們將向您展示如何在短時間內有效地解決複雜的問題,並且我們將反思為什麼應該以這種方式解決這些問題,而不是其他方式(透過控制台)。

免責聲明

我們主要的自動化工具是 Ansible(作為自動化工具)和 Git(作為 Ansible playbook 的儲存庫)。 我想立即保留這不是一篇介紹性文章,我們在其中討論 Ansible 或 Git 的邏輯,並解釋基本的東西(例如,什麼是 RoleTaskiModules、Inventory 文件、Ansible 中的變量,或者當您輸入git push 或git commit 指令)。 這個故事不是關於如何練習 Ansible 以及如何在裝置上設定 NTP 或 SMTP。 這是一個關於如何快速、更好地解決網路問題而不會出現錯誤的故事。 也建議充分了解網路的工作原理,特別是 TCP/IP、OSPF、BGP 協定堆疊是什麼。 我們也將把 Ansible 和 Git 的選擇排除在外。 如果您仍然需要選擇特定的解決方案,我們強烈建議您閱讀《網頁可程式性和自動化》一書。 Jason Edelman、Scott S. Lowe 和 Matt Oswalt 撰寫的《下一代網路工程師的技能》。

現在進入正題。

制定問題

讓我們想像一個狀況:凌晨3點,你正在熟睡,正在做夢。 電話。 技術總監致電:

- 是的?
— ###、####、#####,防火牆集群已倒下,不再上升!!!
你揉揉眼睛,試著理解正在發生的事情,並想像這是如何發生的。 電話裡你可以聽到主任的頭髮在撕裂,他要求回電,因為將軍正在二線打電話給他。

半小時後,你收集了值班的第一張介紹筆記,叫醒了所有可以叫醒的人。 結果,技術總監並沒有說謊,一切都如常,防火牆主簇已經倒塌,基本的身體動作都沒有讓他回過神來。 該公司提供的所有服務均無效。

選擇一個適合你口味的問題,每個人都會記得不同的東西。 例如,在沒有重負載的情況下進行了一整夜的更新後,一切都很順利,每個人都高興地睡覺了。 由於網路卡驅動程式中的錯誤,流量開始流動,介面緩衝區開始溢位。

成龍可以很好地描述當時的情況。

網路自動化。 一個生活中的案例

謝謝你,傑基。

情況不太愉快,不是嗎?

讓我們的網路兄弟暫時離開他悲傷的想法。

讓我們討論一下事件將如何進一步發展。

我們建議按照以下材料呈現順序

  1. 讓我們來看看網路圖,看看它是如何運作的;
  2. 我們將描述如何使用 Ansible 將設定從一台路由器傳輸到另一台路由器;
  3. 讓我們來談談整個 IT 基礎架構的自動化。

網絡圖及說明

駕駛

網路自動化。 一個生活中的案例

讓我們考慮一下我們組織的邏輯圖。 我們不會透露特定設備製造商的名稱;就本文而言,這並不重要 (細心的讀者一定會猜到用的是什麼設備)。 這只是使用 Ansible 的好處之一;在設定時,我們通常不關心它是哪種類型的設備。 請注意,這是來自知名供應商的設備,例如 Cisco、Juniper、Check Point、Fortinet、Palo Alto...您可以替換您自己的選項。

我們有兩個主要任務來移動流量:

  1. 確保我們的服務得到公開,這是公司的業務;
  2. 提供與分公司、遠端資料中心和第三方組織(合作夥伴和客戶)的通信,以及分公司透過中心辦公室存取網際網路。

讓我們從基本要素開始:

  1. 兩個邊界路由器(BRD-01、BRD-02);
  2. 防火牆集群(FW-CLUSTER);
  3. 核心交換器(L3-CORE);
  4. 一個將成為生命線的路由器(當我們解決問題時,我們將網路設定從FW-CLUSTER轉移到EMERGENCY)(EMERGENCY);
  5. 用於網路基礎設施管理的交換器(L2-MGMT);
  6. 帶有 Git 和 Ansible 的虛擬機器 (VM-AUTOMATION);
  7. 一台筆記型電腦,用於測試和開發 Ansible 的劇本(筆記型電腦自動化)。

網路配置有動態 OSPF 路由協議,具有以下區域:

  • 區域 0 – 包括負責在 EXCHANGE 區域中傳輸流量的路由器的區域;
  • 區域 1 – 包括負責公司服務運作的路由器的區域;
  • 區域 2 – 包含負責路由管理流量的路由器的區域;
  • N 區 – 分支網路區域。

在邊界路由器上,建立一個虛擬路由器(VRF-INTERNET),在該路由器上安裝eBGP全視圖以及對應指派的AS。 iBGP 在 VRF 之間配置。 該公司擁有一個在這些 VRF-INTERNET 上發布的白色地址池。 其中一些白色位址直接路由到FW-CLUSTER(公司服務運作的位址),有些透過EXCHANGE區域路由(需要外部IP位址的公司內部服務,以及辦公室的外部NAT位址)。 接下來,流量進入在 L3-CORE 上建立的具有白色和灰色位址(安全區域)的虛擬路由器。

管理網路使用專用交換器並代表實體專用網路。 管理網路也分為安全區域。
緊急路由器在物理和邏輯上複製FW-CLUSTER。 除那些查看管理網路的介面外,其上的所有介面均已停用。

自動化及其描述

我們弄清楚了網路是如何運作的。 現在讓我們一步步看看如何將流量從 FW-CLUSTER 轉移到 EMERGENCY:

  1. 我們禁用核心交換器(L3-CORE)上連接到FW-CLUSTER的介面;
  2. 我們禁用 L2-MGMT 核心交換器上將其連接到 FW-CLUSTER 的介面;
  3. 我們配置緊急路由器(預設情況下,除與 L2-MGMT 相關的介面外,所有介面均已停用):

  • 我們在緊急情況下啟用介面;
  • 我們配置 FW 叢集上的外部 IP 位址(用於 NAT);
  • 我們產生 gARP 請求,以便將 L3-CORE arp 表中的 poppy 位址從 FW-Cluster 變更為 EMERGENCY;
  • 我們將預設路由註冊為靜態到 BRD-01、BRD-02;
  • 建立NAT規則;
  • 升至緊急 OSPF 區域 1;
  • 升至緊急 OSPF 區域 2;
  • 我們將1區的路線成本改為10區;
  • 我們將區域1的預設路由的cost改為10;
  • 我們更改與 L2-MGMT 關聯的 IP 位址(更改為 FW-CLUSTER 上的 IP 位址);
  • 我們產生 gARP 請求,以便 L2-MGMT arp 表中的 poppy 位址從 FW-CLUSTER 變更為 EMERGENCY。

我們再次回到問題的最初表達。 凌晨三點,壓力巨大,任何一個階段的失誤都可能引發新的問題。 準備好透過 CLI 輸入指令了嗎? 是的? 好吧,至少去洗個臉,喝點咖啡,集中一下意志力吧。
布魯斯,請幫助大家。

網路自動化。 一個生活中的案例

嗯,我們繼續改進我們的自動化。
以下是該劇本如何以 Ansible 術語工作的圖表。 這個方案反映了我們上面描述的內容,它只是 Ansible 中的一個具體實作。
網路自動化。 一個生活中的案例

在這個階段,我們意識到需要做什麼,開發了劇本,進行了測試,現在我們準備推出它。

又是一個小小的抒情題外話。 這個故事的輕鬆不該誤導你。 編寫劇本的過程並不像看起來那麼簡單和快速。 測試花了相當多的時間,創建了虛擬展位,對解決方案進行了多次測試,進行了大約100次測試。

讓我們開始吧……有一種感覺,一切都發生得很慢,某個地方出現了錯誤,有些東西最終無法正常工作。 帶著降落傘跳起來,但降落傘又不想馬上打開的感覺……這很正常。

接下來,我們讀取 Ansible playbook 執行操作的結果(出於保密目的,替換了 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中。 我們無法以任何方式影響這一點。 我們等。 成功了。 現在已經準備好了。

在 Vilabajo 村(該村不想實現網路設定自動化),他們繼續洗碗。 Bruce(誠然,已經不同了,但同樣很酷)正在嘗試了解設備的手動重新配置將會發生多少。

網路自動化。 一個生活中的案例

我還想談一個重要的問題。 我們怎麼才能拿回一切? 一段時間後,我們將使 FW-CLUSTER 恢復生機。 這是主設備,不是備份設備,網路必須在上面運行。

您是否覺得網路工作者開始精疲力盡? 技術總監會聽到一千個理由為什麼不應該這樣做,為什麼可以稍後再這樣做。 不幸的是,這就是網路在一堆補丁、碎片和以前奢華的殘餘中運作的方式。 原來是拼布被子。 我們的一般任務,不是在這種特定情況下,而是一般原則上,作為IT 專家,是將網絡的工作帶到美麗的英語單詞“一致性”,它是非常多方面的,可以翻譯為:連貫性、一致性、邏輯性、連貫性、系統性、可比較性、連貫性。 都是關於他的。 只有在這種狀態下,網路才是可管理的,我們清楚地了解哪些工作以及如何工作,我們清楚地了解需要更改哪些內容,如有必要,我們清楚地知道出現問題時該去哪裡查找。 只有在這樣的網路中,你才能執行我們剛才所描述的技巧。

實際上,還準備了另一個劇本,將設定恢復到原來的狀態。 其操作邏輯是相同的(重要的是要記住任務的順序非常重要),為了不延長已經相當長的文章,我們決定不發布 playbook 執行的清單。 進行這樣的練習後,你會感到更加平靜,對未來更有信心,而且你堆在那裡的任何拐杖都會立即顯現出來。

任何人都可以寫信給我們並接收所有書面代碼以及所有紙牌的來源。 個人資料中的聯絡人。

發現

我們認為,可自動化的流程尚未具體化。 根據我們所遇到的情況以及我們西方同事正在討論的內容,到目前為止可以看到以下主題:

  • 設備配置;
  • 數據採集;
  • 報告;
  • 故障排除;
  • 合規性。

如果有興趣,我們可以繼續就給定主題之一進行討論。

我還想談談自動化。 我們的理解應該是這樣的:

  • 系統必須在沒有人的情況下生存,同時由人來改進。 系統不應該依賴人類;
  • 操作一定要熟練。 不存在執行日常任務的專家階層。 有些專家已經自動化了整個例程並只解決複雜的問題;
  • 常規標準任務「只需按一下按鈕」即可自動完成,不會浪費任何資源。 此類任務的結果總是可以預測和理解的。

這些點應該導致什麼:

  • IT 基礎架構的透明度(營運、現代化、實施風險較低。每年停機時間較少);
  • 規劃IT資源的能力(容量規劃系統-可以看到消耗了多少,可以看到單一系統需要多少資源,而不是透過信訪高層部門);
  • 可以減少 IT 員工數。

文章作者:Alexander Chelovekov(CCIE RS、CCIE SP)和 Pavel Kirillov。 我們有興趣討論並提出有關 IT 基礎設施自動化主題的解決方案。


來源: www.habr.com

添加評論