(註: 以下使用粗體字標示GNS3上模擬的設備)

目標說明

只需設定ManagementStation,讓Leaf1Bridge.100成功pingLeaf2Bridge.200

方法說明

在不使用Ansible(或Puppet、Chef等自動化工具)時,網管人員需要登入Leaf1設定網路介面、啟動介面、設定路由協定、啟動路由服務,再登入Leaf2設定網路介面、啟動介面、設定路由協定等,如果有100台Leaf就瘋了。

本篇介紹的方法會透過ManagementStation上的Ansible,將參數化的設定檔同時傳入Leaf1Leaf2,並啟用路由相關服務。如此,當需要添增或移除Leaf時,網管人員只需要實際操作拔線、接線、開機,而不再需要個別登入設定。

環境準備

  • Cumulus VX - Leaf1Leaf2DHCP Server的NOS (Network Operating System),請到官網下載OVA檔。
  • CentOS 7 - ManagementStation的作業系統,請到官網下載ISO檔,再至VirtualBox新增VM,至少保留一個Network Adapter為NAT或Bridged Adapter,匯出OVA檔。
  • Oracle VM VirtualBox - 匯入Leaf1Leaf2DHCP ServerManagementStation的OVA檔。
  • GNS3 - 網路模擬器,使用VirtualBox中的VM作為專案新增設備時的作業系統範本。

設備用途

  • Cloud - 用來連接ManagementStation與實體主機(桌機或筆電)的網卡,讓ManagementStation可以隨時下載需要的工具。
  • ManagementStation (CentOS 7) -
    • 架設Web server - 用來放置ZTP Script與SSH公鑰。
    • 安裝Ansible - 用來配置與啟動Leaf1Leaf2的路由協定。
  • DHCP Server (Cumulus VX) - 架設DHCP server,用來動態分配IP與ZTP (Zero Touch Provisioning)給Leaf1Leaf2
  • Leaf1Leaf2 (Cumulus VX) - 接線、開機即可。

(註: 環境請自行準備 :p )

環境測試

為確保環境自行準備無誤,此階段暫時將TestLeaf加入網路拓樸,並將配置如下:

環境準備目的

Ansible預設依賴SSH溝通Leaf,此階段要確認ManagamentStation能否成功SSH到TestLeaf

  • 設定DHCP Server
  • DHCP Server動態配置IP與ZTP到TestLeaf
  • ZTP自動化過程
    • TestLeafManagementStation的Web server請求ZTP Script
    • TestLeaf本地執行ZTP Script
  • ZTP Script執行過程
    • TestLeafManagementStation的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-AUTOPROVISIONINGexit 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

  1. TestLeaf開機後,eth0應配得IP
    sudo ip addr show | grep -A3 eth0
  2. ZTP自動化完成後,得到SSH公鑰
    sudo ls /root/.ssh/authorized_keys
  3. 若要重新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,接上Leaf1Leaf2bond0,並將所有設備開機,配置如下:

執行Ansible目錄的playbook.yml

  • 操作ManagementStation
    cd ansible-cumulus-ospf
    sudo ansible-playbook playbook.yml
    (看到test.cumulus failed的訊息是正常的,如果不喜歡就從hosts移除test.cumulus

檢查路由

  • 操作Leaf1
    檢查Leaf1是否成功學習到Leaf2bridge.200的路由
    sudo ip route show
  • 操作Leaf2
    檢查Leaf2是否成功學習到Leaf1bridge.100的路由
    sudo ip route show

ping測試

  • 操作Leaf1
    ping 10.1.1.22
  • 操作Leaf2
    ping 10.1.1.11