使用Ansible對Cumulus Linux設定OSPF路由協定
(註: 以下使用粗體字標示GNS3上模擬的設備)
目標說明
只需設定ManagementStation,讓Leaf1的Bridge.100成功ping到Leaf2的Bridge.200。
方法說明
在不使用Ansible(或Puppet、Chef等自動化工具)時,網管人員需要登入Leaf1設定網路介面、啟動介面、設定路由協定、啟動路由服務,再登入Leaf2設定網路介面、啟動介面、設定路由協定等,如果有100台Leaf就瘋了。
本篇介紹的方法會透過ManagementStation上的Ansible,將參數化的設定檔同時傳入Leaf1和Leaf2,並啟用路由相關服務。如此,當需要添增或移除Leaf時,網管人員只需要實際操作拔線、接線、開機,而不再需要個別登入設定。
環境準備
- Cumulus VX - Leaf1、Leaf2、DHCP Server的NOS (Network Operating System),請到官網下載OVA檔。
- CentOS 7 - ManagementStation的作業系統,請到官網下載ISO檔,再至VirtualBox新增VM,至少保留一個Network Adapter為NAT或Bridged Adapter,匯出OVA檔。
- Oracle VM VirtualBox - 匯入Leaf1、Leaf2、DHCP Server、ManagementStation的OVA檔。
- GNS3 - 網路模擬器,使用VirtualBox中的VM作為專案新增設備時的作業系統範本。
設備用途
- Cloud - 用來連接ManagementStation與實體主機(桌機或筆電)的網卡,讓ManagementStation可以隨時下載需要的工具。
- ManagementStation (CentOS 7) -
- 架設Web server - 用來放置ZTP Script與SSH公鑰。
- 安裝Ansible - 用來配置與啟動Leaf1與Leaf2的路由協定。
- DHCP Server (Cumulus VX) - 架設DHCP server,用來動態分配IP與ZTP (Zero Touch Provisioning)給Leaf1與Leaf2。
- Leaf1與Leaf2 (Cumulus VX) - 接線、開機即可。
(註: 環境請自行準備 :p )
環境測試
為確保環境自行準備無誤,此階段暫時將TestLeaf加入網路拓樸,並將配置如下:
環境準備目的
Ansible預設依賴SSH溝通Leaf,此階段要確認ManagamentStation能否成功SSH到TestLeaf。
- 設定DHCP Server
- DHCP Server動態配置IP與ZTP到TestLeaf
- ZTP自動化過程
- TestLeaf向ManagementStation的Web server請求ZTP Script
- TestLeaf本地執行ZTP Script
- ZTP Script執行過程
- TestLeaf向ManagementStation的Web server請求SSH公鑰
- TestLeaf將SSH公鑰儲存在本地
- ManagementStation能以公鑰認證(無須密碼)SSH到TestLeaf
環境測試步驟
如果此階段不成功,請自行補足省略的操作過程,否則無法進行操作Ansible。
操作ManagementStation
- 設定Web server靜態IP
sudo cat /etc/sysconfig/network-scripts/ifcfg-Wired_connection_1
- 重啟網路介面
sudo /etc/init.d/network restart
- 放置ZTP Script
ZTP Script 必要包含# CUMULUS-AUTOPROVISIONING
和exit 0
sudo cat /var/www/html/ztp-ansible.sh
- 重啟Web server
sudo systemctl restart httpd.service
操作DHCP Server
- 設定 /etc/network/interfaces
實體介面 (除了Loopback是邏輯介面)
SVI (Switch Virtual Interface)
- 重啟網路介面
sudo ifreload -a
- 設定 /etc/dhcp/dhcpd.conf
包含ZTP option和ZTP Script URL
主機名稱、對應網路介面所分配的IP
- 設定 /etc/default/isc-dhcp-server
分配subnet的網路介面
- 重啟DHCP server
sudo systemctl restart dhcpd.service
- 若分配IP失敗,請檢查
sudo grep dhcpd /var/log/syslog | less
操作TestLeaf
- TestLeaf開機後,
eth0
應配得IP
sudo ip addr show | grep -A3 eth0
- ZTP自動化完成後,得到SSH公鑰
sudo ls /root/.ssh/authorized_keys
- 若要重新ZTP,務必刪掉所有ZTP相關檔案
sudo ztp --reset && sudo reboot
操作ManagementStation
- 設定TestLeaf的主機名稱與對應的IP
sudo cat /etc/hosts
- 測試SSH到TestLeaf
Cumulus VX 預設已啟動SSH server,並監聽22 port
sudo ssh root@test.cumulus
Ansible目錄
以下操作ManagementStation:
- 創建Ansible目錄
sudo git clone https://github.com/derailment/ansible-cumulus-ospf
cd ansible-cumulus-ospf
sudo tree
- 安裝Cumulus Linux的Ansible add-on
sudo ansible-galaxy install cumulus.CumulusLinux
- ansible.cfg
inventory: 放置主機名稱清單的位置
library: 放置Cumulus Linux的Ansible add-on的位置
- hosts
Ansible所管理的主機名稱
(必須在/etc/hosts或DNS server找得到對應的IP) - playbook.yml
- playbook.yml為ospf角色指定以下行為:
- 如果roles/ospf/tasks/main.yml存在,就將其所列出的task加進play。
- 所有template task可以引用roles/ospf/templates/中的Jinja2檔案,不需指明檔案路徑。
- 獲取遠端主機資訊
sudo ansible test.cumulus -m setup | grep ansible_nodename
- 如果roles/ospf/vars/main.yml存在,就將其所列出的variable加進play。
- 如果roles/ospf/handlers/main.yml存在,就將其所列出的handler加進play。
目標測試
拔掉TestLeaf,接上Leaf1、Leaf2、bond0,並將所有設備開機,配置如下:
執行Ansible目錄的playbook.yml
- 操作ManagementStation
cd ansible-cumulus-ospf
sudo ansible-playbook playbook.yml
(看到test.cumulus failed的訊息是正常的,如果不喜歡就從hosts移除test.cumulus)
檢查路由
- 操作Leaf1
檢查Leaf1是否成功學習到Leaf2的bridge.200的路由
sudo ip route show
- 操作Leaf2
檢查Leaf2是否成功學習到Leaf1的bridge.100的路由
sudo ip route show
ping測試
- 操作Leaf1
ping 10.1.1.22
- 操作Leaf2
ping 10.1.1.11