12-Puppet配置
本章節下載: 12-Puppet配置 (301.54 KB)
目 錄
Puppet是開源的配置管理工具,用戶使用Puppet語言將需要對設備進行的配置寫成腳本,並保存到服務器中,再通過服務器把這些配置腳本下發到各網絡設備,實現對網絡設備的集中配置管理。
圖1-1 Puppet網絡架構
如圖1-1所示,Puppet采用“服務器端/客戶端”網絡架構,服務器端稱為Puppet master,客戶端稱為Puppet agent,Puppet master與Puppet agent之間使用通過SSL加密的連接進行通信。
Puppet master用於對Puppet agent進行集中管理,其主要功能如下:
· 以守護進程的方式運行,監聽Puppet agent的請求。
· 建立連接時,Puppet master需要對Puppet agent進行認證。
· 集中保存配置腳本,並根據用戶要求將配置腳本下發到Puppet agent。
關於Puppet master的詳細安裝和配置,請參見Puppet官方網站:https://puppetlabs.com。
Puppet網絡中,由Puppet master集中管理的設備稱為Puppet agent。Puppet agent的工作過程如下:
(1) Puppet agent啟動Puppet進程,並向Puppet master發起認證請求。
(2) Puppet agent默認會周期性(缺省為2分鍾)檢查認證是否通過,認證通過後,Puppet agent與Puppet master建立連接。
(3) Puppet agent與Puppet master建立連接後,Puppet agent周期性(缺省為30分鍾)向Puppet master發送請求獲取最新配置。
(4) Puppet agent獲取到最新配置,並將最新配置與設備當前運行的配置進行對比,如果設備當前運行配置與獲取的配置不同,則運行最新配置。
(5) Puppet agent完成配置後,向Puppet master反饋配置結果。
H3C設備中,Puppet以Puppet agent方式運行,版本為3.7.3。
Puppet使用Puppet語言定義配置項,各配置項的集合即為一個配置腳本。在Puppet中,配置項叫做資源。
Puppet劃分了多個不同類型的資源,每個類型的資源都由名稱和多個屬性組成,每個屬性對應功能的一個配置,屬性值即為該配置應達到的狀態。用戶在對Puppet資源進行配置時,通過為不同屬性賦值,從而指定設備應該達到的狀態,而不需要關心如何達到這些狀態。例如:用戶隻需要指定設備創建哪一個VLAN,而不需要關心如何創建該VLAN。如下以創建VLAN 2,並為該VLAN配置描述信息為例介紹Puppet資源的構成:
netdev_vlan{'vlan2':
ensure => undo_shutdown,
id => 2,
description => 'sales-private',
require => Netdev_device['device'],
}
在該例中,各字段含義如下:
· netdev_vlan字段表示資源類型,netdev_vlan表示該資源用來配置VLAN。
· vlan2為資源名稱,在資源文件內,每個資源都有唯一的資源名稱,用於標識該資源。
· ensure、id、description和require分別表示該資源的屬性。每個資源都需要一係列屬性來確定他們最終達到的狀態。
¡ ensure的值為undo_shutdown、id的值為2表示創建VLAN ID為2的VLAN。如果要刪除VLAN,則需要將ensure屬性的值指定為shutdown。
¡ description的值為sales-private表示配置VLAN2的描述信息為sales-private。
¡ require屬性表示netdev_vlan資源依賴於名稱為device的netdev_device資源。有些資源之間存在依賴關係,此時需要配置require屬性,並在該屬性中指定該資源依賴的資源類型和資源名稱。
關於Puppet支持的所有資源類型,請參見2 Puppet資源列表。
Puppet master上部署的Puppet版本不能低於Puppet agent的Puppet版本。
配置Puppet功能前,用戶必須先配置如下功能:
· 開啟NETCONF over SSH功能:Puppet master通過NETCONF over SSH方式向Puppet agent下發配置。關於NETCONF over SSH功能的詳細配置請參見“網絡管理和監控配置指導”中的“NETCONF”。
· 配置設備可以通過SSH登錄:Puppet master與Puppet agent使用SSH進行通信。關於SSH登錄功能的詳細配置請參見“基礎配置指導”中的“登錄設備”。
· 配置Puppet agent與Puppet master之間使用NTP或手工方式進行時鍾同步,否則可能導致雙方無法互通。關於時鍾同步的詳細配置請參見“基礎配置指導”中的“設備管理”,以及“網絡管理和監控配置指導”中的“NTP”和“PTP”。
在Puppet master上創建並編輯資源。關於Puppet master的詳細配置方法,具體請參見Puppet master的安裝和使用指導。
(1) 進入係統視圖。
system-view
(2) 啟動Puppet。
third-part-process start name puppet arg agent --certname=certname --server=server
缺省情況下,Puppet處於關閉狀態。
參數 |
說明 |
--certname=certname |
Puppet agent的地址 |
--server=server |
Puppet master的地址 |
執行third-part-process start命令後,Puppet agent將向Puppet master發起認證請求。關於該命令的詳細介紹,請參見“網絡管理和監控”中的“進程監控和維護”。
在Puppet master上執行puppet cert sign certname命令對Puppet agent簽發證書。簽發成功後,Puppet agent將與Puppet master建立SSL通信,並下載資源對設備進行配置。
執行display process all命令查看所有進程信息,“THIRD”字段標識為“Y”的進程為第三方進程,“PID”字段即為進程pid。“COMMAND”字段為“puppet /opt/ruby/bin/pu”的進程為Puppet進程。
(1) 進入係統視圖。
system-view
(2) 關閉Puppet。
third-part-process stop pid pid-list
關於third-part-process stop命令的詳細介紹,請參見“網絡管理和監控”中的“進程監控和維護”。
Puppet agent與Puppet master相連,設備的IP地址和掩碼如圖1-2所示。
通過Puppet在設備上創建ID為3的VLAN。
設備作為SSH服務器登錄時的用戶名為user,密碼為passwd。
圖1-2 Puppet配置組網圖
(1) 在Puppet agent上配置設備通過SSH登錄,並開啟NETCONF over SSH功能。
(2) 在Puppet master上編輯資源。
# 在目錄/etc/puppet/下創建保存配置腳本文件的目錄modules/custom/manifests。
$ mkdir -p /etc/puppet/modules/custom/manifests
# 在目錄manifests下創建配置腳本文件init.pp,編輯內容如下:
netdev_device{'device':
ensure => undo_shutdown,
username => 'user',
password => 'passwd',
ipaddr => '1.1.1.1',
}
netdev_vlan{'vlan3':
ensure => undo_shutdown,
id => 3,
require => Netdev_device['device'],
}
(3) 在設備上執行third-part-process start命令啟動Puppet。
<PuppetAgent> system-view
[PuppetAgent] third-part-process start name puppet arg agent --certname=1.1.1.1 --server=1.1.1.2
(4) 在Puppet master上對Puppet agent的請求進行認證。
$ puppet cert sign 1.1.1.1
Puppet agent通過認證後,Puppet agent將獲取Puppet master中的配置腳本到本地,並運行該腳本,實現對設備各功能的配置。
該資源用來配置設備的名稱,並指定設備與Puppet master建立連接時使用的IP地址、SSH用戶名及密碼。
表2-1 netdev_device資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
ensure |
建立或斷開設備與Puppet master的NETCONF連接 |
無 |
數據類型為符號,取值包括: · undo_shutdown/present:表示建立設備與Puppet master的NETCONF連接 · shutdown/absent:表示斷開設備與Puppet master的NETCONF連接 |
hostname |
設備名稱 |
無 |
數據類型為字符串,取值為1~64個字符,區分大小寫 |
ipaddr |
設備的IP地址 |
無 |
數據類型為字符串,格式為點分十進製 |
username |
SSH登錄用戶名 |
無 |
數據類型為字符串,取值為1~55個字符,區分大小寫 |
password |
SSH用戶密碼 |
無 |
數據類型為字符串,區分大小寫。非FIPS模式下,明文密碼為1~63個字符;哈希密碼為1~110個字符;密文密碼為1~117個字符 |
配置設備的名稱為PuppetAgent,與Puppet master建立連接時使用的IP地址為1.1.1.1,SSH用戶名為user,SSH用戶密碼為123456。
netdev_device{'device':
ensure => undo_shutdown,
username => 'user',
password => '123456',
ipaddr => '1.1.1.1',
hostname => 'PuppetAgent'
}
該資源用來配置接口的屬性。
表2-2 netdev_interface資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
ifindex |
接口索引 |
索引 |
數據類型為整型 |
ensure |
接口的屬性 |
無 |
數據類型為符號,取值隻能為undo_shutdown/present |
description |
接口的描述信息 |
無 |
數據類型為字符串,取值為1~255個字符,區分大小寫 |
admin |
接口管理狀態 |
無 |
數據類型為符號,取值包括: · up:接口的管理狀態為開啟 · down:接口的管理狀態為關閉 |
speed |
接口速率 |
無 |
數據類型為符號,取值包括: · auto:表示接口速率處於自協商狀態 · 10m:表示接口速率為10Mbps · 100m:表示接口速率為100Mbps · 1g:表示接口速率為1Gbps · 10g:表示接口速率為10Gbps · 40g:表示接口速率為40Gbps · 100g:表示接口速率為100Gbps |
duplex |
以太網接口的雙工模式 |
無 |
數據類型為符號,取值包括: · full:全雙工狀態,接口在發送數據包的同時可以接收數據包 · half:半雙工狀態,接口同一時刻隻能發送數據包或接收數據包 · auto:接口與對端接口的雙工模式為自動協商 僅以太網接口支持該配置 |
linktype |
接口的鏈路類型 |
無 |
數據類型為符號,取值包括: · access:配置接口的鏈路類型為Access類型 · trunk:配置接口的鏈路類型為Trunk類型 · hybrid:配置接口的鏈路類型為Hybrid類型 僅二層以太網接口支持該配置 |
portlayer |
以太網接口的工作模式 |
無 |
數據類型為符號,取值包括: · bridge:配置以太網接口工作在二層模式 · route:配置以太網接口工作在三層模式 |
mtu |
三層以太網接口允許通過的MTU的大小 |
無 |
數據類型為整型,取值範圍取決於接口的類型,單位為字節 僅三層以太網接口支持該配置 |
配置索引為2的以太網接口的如下屬性:
· 接口的描述信息為puppet interface 2。
· 管理狀態為開啟。
· 接口速率為自動協商。
· 接口與對端接口的雙工模式為自動協商。
· 端口的鏈路類型為Hybrid類型。
· 以太網接口工作在二層模式。
· 配置三層以太網接口允許通過的MTU的大小為1500。
netdev_interface{'ifindex2':
ifindex => 2,
ensure => undo_shutdown,
description => 'puppet interface 2',
admin => up,
speed => auto,
duplex => auto,
linktype => hybrid,
portlayer => bridge,
mut => 1500,
require => Netdev _device['device'],
}
該資源用來配置二層以太網接口的VLAN屬性。
表2-3 netdev_l2_interface資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
ifindex |
二層以太網接口索引 |
索引 |
數據類型為整型 |
ensure |
二層以太網接口的VLAN屬性 |
無 |
數據類型為符號,取值隻能為undo_shutdown/present |
pvid |
端口的缺省VLAN |
無 |
數據類型為整型,取值範圍為1~4094 |
permit_vlan_list |
接口允許通過的VLAN列表 |
無 |
數據類型為字符串 VLAN的取值範圍為1~4094 一次可以配置多個VLAN,各VLAN間使用逗號分隔。兩個逗號之間可以是一個單獨的VLAN,也可以是一個VLAN範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個VLAN範圍的開始和結束。 字符串的結尾不能含有逗號、連字符“-”或空格 |
untagged_vlan_list |
端口在轉發指定的VLAN報文時將去掉VLAN Tag |
無 |
數據類型為字符串 VLAN的取值範圍為1~4094 一次可以配置多個VLAN,各VLAN間使用逗號分隔。兩個逗號之間可以是一個單獨的VLAN,也可以是一個VLAN範圍。例如:1,2,3,5-8,10-20 使用連字符-分隔一個VLAN範圍的開始和結束 字符串的結尾不能含有逗號、連字符“-”或空格 同一個VLAN不能在untagged_vlan_list和tagged_vlan_list列中同時指定 |
tagged_vlan_list |
轉發指定的VLAN報文時將攜帶VLAN Tag |
無 |
數據類型為字符串 VLAN的取值範圍為1~4094 一次可以配置多個VLAN,各VLAN間使用逗號分隔。兩個逗號之間可以是一個單獨的VLAN,也可以是一個VLAN範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個VLAN範圍的開始和結束。 字符串的結尾不能含有逗號、連字符“-”或空格 同一個VLAN不能在untagged_vlan_list和tagged_vlan_list列中同時指定 |
配置索引為3的接口的缺省VLAN為2,允許ID為1~6的VLAN通過,並設置VLAN1~VLAN3的報文通過該接口時去掉VLAN Tag,VLAN4~VLAN6的報文通過該接口時攜帶VLAN Tag。
netdev_l2_interface{'ifindex3':
ifindex => 3,
ensure => undo_shutdown,
pvid => 2,
permit_vlan_list => '1-6',
untagged_vlan_list => '1-3',
tagged_vlan_list => '4,6'
require => Netdev _device['device'],
}
該資源用來創建、修改或刪除聚合組。
表2-4 netdev_lagg資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
group_id |
聚合組ID |
索引 |
數據類型為整型 二層聚合組的組ID範圍為1~1024 三層聚合組的組ID範圍為16385~17408 |
ensure |
創建或刪除聚合組 |
無 |
數據類型為符號,取值包括: · present:表示創建或修改聚合組 · absent:表示刪除聚合組 |
linkmode |
聚合組工作模式 |
無 |
數據類型為符號,取值包括: · static:表示靜態聚合 · dynamic:表示動態聚合 |
addports |
加入聚合組的接口索引列表 |
無 |
數據類型為字符串 一次可以配置多個接口索引,各接口索引間使用逗號分隔。兩個逗號之間可以是一個單獨的接口索引,也可以是一個接口索引範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個接口索引範圍的開始和結束 字符串的結尾不能含有逗號、連字符“-”或空格 同一個接口不能在addports和deleteports列中同時指定 |
deleteports |
從聚合組刪除的接口索引列表 |
無 |
數據類型為字符串 一次可以配置多個接口索引,各接口索引間使用逗號分隔。兩個逗號之間可以是一個單獨的接口索引,也可以是一個接口索引範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個接口索引範圍的開始和結束 字符串的結尾不能含有逗號、連字符“-”或空格 同一個接口不能在addports和deleteports列中同時指定 |
配置ID為2的聚合組,將索引為1和2的接口加入聚合組,並從聚合組中刪除索引為3和4的接口。
netdev_lagg{ 'lagg2':
group_id => 2,
ensure => present,
addports => '1,2',
deleteports => '3,4',
require => Netdev _device['device'],
}
該資源用來創建、修改或刪除VLAN,並配置VLAN的描述信息。
表2-5 netdev_vlan資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
ensure |
創建、修改或刪除VLAN |
無 |
數據類型為符號,取值包括: · undo_shutdown/present:表示創建或修改VLAN · shutdown/absent:表示刪除VLAN |
id |
VLAN ID |
索引 |
數據類型為無符號整型,取值範圍為1~4094 |
description |
VLAN描述信息 |
無 |
數據類型為字符串,取值為1~255個字符,區分大小寫 |
創建VLAN 2,並將該VLAN的描述信息配置為sales-private。
netdev_vlan{'vlan2':
ensure => undo_shutdown,
id => 2,
description => 'sales-private',
require => Netdev_device['device'],
}
該資源用來創建、修改或刪除VSI。
表2-6 netdev_vsi資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
vsiname |
VSI的名稱 |
索引 |
數據類型為字符串,取值為1~31個字符,區分大小寫 |
ensure |
創建或刪除VSI |
無 |
數據類型為符號,取值包括: · present:表示創建或修改VSI · absent:表示刪除VSI |
description |
VSI的描述信息 |
無 |
數據類型為字符串,取值為1~80個字符,區分大小寫 |
創建名為vsia的VSI。
netdev_vsi{'vsia':
ensure => present,
vsiname => 'vsia',
require => Netdev_device['device'],
}
這個資源用來創建或刪除隧道。
表2-7 netdev_vte資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
id |
隧道 ID |
索引 |
數據類型為整型 |
ensure |
創建或刪除隧道 |
無 |
數據類型為符號,取值包括: · present:表示創建隧道 · absent:表示刪除隧道 |
mode |
隧道模式 |
無 |
數據類型為整型,取值包括: · 1:運行IPv4協議的GRE 隧道 · 2:運行IPv6協議的GRE 隧道 · 3:IPv4與IPv4之間的隧道 · 4:手動配置的IPv6到IPv4的隧道 · 5:IPv6到 IPv4的自動隧道 · 6:IPv6到IPv4 的6to4隧道 · 7:IPv6到IPv4的ISATAP隧道 · 8:用IPv6封裝IPv6 或IPv4報文 · 14:基於IPv4傳輸協議的組播GRE隧道 · 15:基於IPv6傳輸協議的組播GRE隧道 · 16:基於IPv4傳輸協議的IPsec隧道 · 17:基於IPv6傳輸協議的IPsec隧道 · 24:基於UDP passenger協議和IPv4傳輸協議的VXLAN隧道 · 25:基於UDP passenger協議和IPv6傳輸協議的VXLAN隧道 創建隧道時必須指定隧道模式,且創建後不能再對該隧道模式進行修改 |
創建ID為2、基於UDP passenger協議和IPv4傳輸協議的VXLAN隧道。
netdev_vte{'vte2':
ensure => present,
id => 2,
mode => 24,
require => Netdev_device['device'],
}
該資源用來創建、修改或刪除VXLAN。
表2-8 netdev_vxlan資源屬性描述表
列名 |
列描述 |
列類型 |
數據類型和限製 |
vxlan_id |
VXLAN ID |
索引 |
數據類型為整型,取值範圍為0~16777215 |
ensure |
創建或刪除VXLAN |
無 |
數據類型為符號,取值包括: · present:表示創建或修改VXLAN · absent:表示刪除VXLAN |
vsiname |
VSI的名稱 |
無 |
數據類型為字符串,取值為1~31個字符,區分大小寫 創建VSI時必須指定該列,且該列在創建後不能修改 |
add_tunnels |
配置VXLAN與隧道接口關聯 |
無 |
數據類型為字符串 一次可以配置多個隧道接口編號,各接口編號間使用逗號分隔。兩個逗號之間可以是一個單獨的接口編號,也可以是一個接口編號範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個接口編號範圍的開始和結束 字符串的結尾不能含有逗號、連字符“-”或空格 同一個隧道接口的編號不能在add_tunnels和delete_tunnels中同時指定 |
delete_tunnels |
取消VXLAN與隧道接口關聯 |
無 |
數據類型為字符串,隧道接口的編號 一次可以配置多個隧道接口編號,各接口編號間使用逗號分隔。兩個逗號之間可以是一個單獨的接口編號,也可以是一個接口編號範圍。例如:1,2,3,5-8,10-20 使用連字符“-”分隔一個接口編號範圍的開始和結束。 字符串的結尾不能含有逗號、連字符“-”或空格 同一個隧道接口的編號不能在add_tunnels和delete_tunnels中同時指定 |
創建ID為10的VXLAN,添加名為vsia的VSI,並將隧道接口7和8與該VXLAN關聯。
netdev_vxlan{'vxlan10':
ensure => present,
vxlan_id => 10,
vsiname => 'vsia',
add_tunnels => '7-8',
require=>Netdev_device['device'],
}
不同款型規格的資料略有差異, 詳細信息請向具體銷售和400谘詢。H3C保留在沒有任何通知或提示的情況下對資料內容進行修改的權利!