• 产品与解决方案
  • 行业解决方案
  • 服务
  • 支持
  • 合作伙伴
  • 新华三人才研学中心
  • 关于我们

11-网络管理和监控配置指导

目录

15-Puppet配置

本章节下载 15-Puppet配置  (216.77 KB)

15-Puppet配置


1 Puppet

1.1  Puppet简介

Puppet是开源的配置管理工具,用户使用Puppet语言将需要对设备进行的配置写成脚本,并保存到服务器中,再通过服务器把这些配置脚本下发到各网络设备,实现对网络设备的集中配置管理。

1.1.1  Puppet网络架构

图1-1 Puppet网络架构

 

图1-1所示,Puppet采用“服务器端/客户端”网络架构,服务器端称为Puppet master,客户端称为Puppet agent,Puppet master与Puppet agent之间使用通过SSL加密的连接进行通信。

2. Puppet master

Puppet master用于对Puppet agent进行集中管理,其主要功能如下:

·     以守护进程的方式运行,监听Puppet agent的请求。

·     建立连接时,Puppet master需要对Puppet agent进行认证。

·     集中保存配置脚本,并根据用户要求将配置脚本下发到Puppet agent。

说明

·     Puppet master收到的Puppet agent认证请求无超时时间。

·     关于Puppet master的详细安装和配置,请参见Puppet官方网站:https://puppetlabs.com

 

3. Puppet agent

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。

1.1.2  Puppet资源

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支持的所有资源类型,请参见附录。

 

1.2  配置Puppet

1.2.1  配置准备

配置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”。

1.2.2  启动Puppet

分别对Puppet master和Puppet agent进行如下配置:

(1)     在Puppet master上编辑资源。关于Puppet master的详细配置方法,具体请参见Puppet master的安装和使用指导。

说明

Puppet master上部署的Puppet版本不能低于Puppet agent的Puppet版本。

 

(2)     在设备上执行third-part-process start命令启动Puppet。执行该命令后,Puppet agent将启动Puppet进程,并向Puppet master发起认证请求。

表1-1 启动Puppet

操作

命令

说明

进入系统视图

system-view

-

启动Puppet

third-part-process start name puppet arg agent --certname=certname --server=server

缺省情况下,Puppet处于关闭状态

--certname=certname表示Puppet agent的IP地址

--server=server表示Puppet master的IP地址

关于third-part-process start命令的详细介绍,请参见“网络管理和监控”中的“进程监控和维护”

 

(3)     在Puppet master上执行puppet cert sign certname命令对Puppet agent进行认证。认证通过后,Puppet agent将与Puppet master建立连接,并下载资源对设备进行配置。

1.2.3  关闭Puppet

表1-2 关闭Puppet

操作

命令

说明

进入系统视图

system-view

-

关闭Puppet

third-part-process stop pid pid-list

执行display process all命令查看所有进程信息,“THIRD”字段标识为“Y”的进程为第三方进程,“PID”字段即为进程pid

“COMMAND”字段为“puppet /opt/ruby/bin/pu”的进程为Puppet进程

关于third-part-process stop命令的详细介绍,请参见“网络管理和监控”中的“进程监控和维护”

 

1.3  Puppet典型配置举例

1. 组网需求

Puppet agent与Puppet master相连,设备的IP地址和掩码如图1-2所示。

通过Puppet在设备上创建ID为3的VLAN。

设备作为SSH服务器登录时的用户名为user,密码为passwd。

2. 组网图

图1-2 Puppet配置组网图

 

3. 配置步骤

(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中的配置脚本到本地,并运行该脚本,实现对设备各功能的配置。


2 附录 Puppet资源列表

2.1  netdev_vlan

该资源用来创建、修改或删除VLAN,并配置VLAN的描述信息。

1. 资源属性

表2-1 netdev_vlan资源属性描述表

列名

列描述

列类型

数据类型和限制

ensure

创建、修改或删除VLAN

数据类型为符号,取值包括:

·     undo_shutdown/present:表示创建或修改VLAN

·     shutdown/absent:表示删除VLAN

id

VLAN ID

索引

数据类型为无符号整型,取值范围为1~4094

description

VLAN描述信息

数据类型为字符串,取值为1~255个字符,区分大小写

 

2. 脚本示例

创建VLAN 2,并将该VLAN的描述信息配置为sales-private。

netdev_vlan{'vlan2':

 ensure => undo_shutdown,

 id => 2,

 description => 'sales-private',

 require => Netdev_device['device'],

}

2.2  netdev_device

该资源用来配置设备的名称,并指定设备与Puppet master建立连接时使用的IP地址、SSH用户名及密码。

1. 资源属性

表2-2 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个字符

 

2. 脚本示例

配置设备的名称为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.3  netdev_interface

该资源用来配置接口的属性。

1. 资源属性

表2-3 netdev_interface资源属性描述表

列名

列描述

列类型

数据类型和限制

ifindex

接口索引

索引

数据类型为整型

ensure

接口的属性

数据类型为符号取值只能为undo_shutdown/present

description

接口的描述信息

数据类型为字符串,取值1~255个字符,区分大小写

admin

接口管理状态

数据类型为符号,取值包括:

·     up:接口的管理状态为开启

·     down:接口的管理状态为关闭

speed

接口速率

数据类型为符号,取值包括:

·     auto:表示接口速率处于自协商状态

·     10m:表示接口速率为10Mbps

·     100m:表示接口速率为100Mbps

·     155m:表示接口速率为155Mbps

·     622m:表示接口速率为622Mbps

·     1g:表示接口速率为1Gbps

·     2g:表示接口速率为2Gbps

·     2.5g:表示接口速率为2.5Gbps

·     4g:表示接口速率为4Gbps

·     8g:表示接口速率为8Gbps

·     10g:表示接口速率为10Gbps

·     16g:表示接口速率为16Gbps

·     20g:表示接口速率为20Gbps

·     40g:表示接口速率为40Gbps

·     100g:表示接口速率为100Gbps

duplex

以太网接口的双工模式

数据类型为符号,取值包括:

·     full:全双工状态,接口在发送数据包的同时可以接收数据包

·     half:半双工状态,接口同一时刻只能发送数据包或接收数据包

·     auto:接口与对端接口的双工模式为自动协商

仅以太网接口支持该配置

linktype

接口的链路类型

数据类型为符号,取值包括:

·     access:配置接口的链路类型为Access类型

·     trunk:配置接口的链路类型为Trunk类型

·     hybrid:配置接口的链路类型为Hybrid类型

仅二层以太网接口支持该配置

portlayer

以太网接口的工作模式

数据类型为符号,取值包括:

·     bridge:配置以太网接口工作在二层模式

·     route:配置以太网接口工作在三层模式

mtu

三层以太网接口允许通过的MTU的大小

数据类型为整型,取值范围取决于接口的类型,单位为字节

仅三层以太网接口支持该配置

 

2. 脚本示例

配置索引为2的以太网接口的如下属性:

·     接口的描述信息为puppet interface 2。

·     管理状态为开启。

·     接口速率为1Gbps。

·     接口与对端接口的双工模式为自动协商。

·     端口的链路类型为Hybrid类型。

·     以太网接口工作在三层模式。

·     配置三层以太网接口允许通过的MTU的大小为1500。

netdev_interface{'ifindex2':

 ifindex => 2,

 ensure => undo_shutdown,

 description => 'puppet interface 2',

 admin => up,

 speed => 1g,

 duplex => auto,

 linktype => hybrid,

 portlayer => route,

 mut => 1500,

 require => Netdev _device['device'],

}

2.4  netdev_l2_interface

该资源用来配置二层以太网接口的VLAN属性。

1. 资源属性

表2-4 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列中同时指定

 

2. 脚本示例

配置索引为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.5  netdev_lagg

该资源用来创建、修改或删除聚合组。

1. 资源属性

表2-5 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列中同时指定

 

2. 脚本示例

配置ID为2的聚合组,将索引为1和2的接口加入聚合组,并从聚合组中删除索引为3和4的接口。

netdev_lagg{ 'lagg2':

 group_id => 2,

 ensure => present,

 addports => '1,2',

 deleteports => '3,4',

 require => Netdev _device['device'],

}

2.6  netdev_vsi

该资源用来创建、修改或删除VSI。

1. 资源属性

表2-6 netdev_vsi资源属性描述表

列名

列描述

列类型

数据类型和限制

vsiname

VSI的名称

索引

数据类型为字符串,取值为1~31个字符,区分大小写

ensure

创建或删除VSI

数据类型为符号,取值包括:

·     present:表示创建或修改VSI

·     absent:表示删除VSI

description

VSI的描述信息

数据类型为字符串,取值为1~80个字符,区分大小写

 

2. 脚本示例

创建名为vsia的VSI。

netdev_vsi{'vsia':

 ensure => present,

 vsiname => 'vsia',

 require => Netdev_device['device'],

}

2.7  netdev_vte

这个资源用来创建或删除隧道。

1. 资源属性

表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报文

·     9:基于UDP passenger协议和IPv4传输协议的DVPN隧道

·     10:基于GRE passenger协议和IPv4传输协议的DVPN隧道

·     11:基于UDP passenger协议和IPv6传输协议的DVPN隧道

·     12:基于GRE passenger协议和IPv6传输协议的DVPN隧道

·     13:CRLSP隧道

·     14:基于IPv4传输协议的组播GRE隧道

·     15:基于IPv6传输协议的组播GRE隧道

·     16:基于IPv4传输协议的IPsec隧道

·     17:基于IPv6传输协议的IPsec隧道

·     22:DS-Lite AFTR隧道

·     23:CRLSP自动隧道

·     24:基于UDP passenger协议和IPv4传输协议的VXLAN隧道

·     25:基于UDP passenger协议和IPv6传输协议的VXLAN隧道

创建隧道时必须指定隧道模式,且创建后不能再对该隧道模式进行修改

 

2. 脚本示例

创建ID为2、基于UDP passenger协议和IPv4传输协议的VXLAN隧道。

netdev_vte{'vte2':

 ensure => present,

 id => 2,

 mode => 24,

 require => Netdev_device['device'],

}

2.8  netdev_vxlan

该资源用来创建、修改或删除VXLAN。

1. 资源属性

表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_tunnelsdelete_tunnels中同时指定

delete_tunnels

取消VXLAN与隧道接口关联

数据类型为字符串,隧道接口的编号

一次可以配置多个隧道接口编号,各接口编号间使用逗号分隔。两个逗号之间可以是一个单独的接口编号,也可以是一个接口编号范围。例如:1,2,3,5-8,10-20

使用连字符“-”分隔一个接口编号范围的开始和结束。

字符串的结尾不能含有逗号、连字符“-”或空格

同一个隧道接口的编号不能在add_tunnelsdelete_tunnels中同时指定

 

2. 脚本示例

创建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保留在没有任何通知或提示的情况下对资料内容进行修改的权利!

新华三官网
联系我们