设为首页 收藏本站
查看: 1152|回复: 0

[经验分享] 用puppet管理网络设备

[复制链接]

尚未签到

发表于 2018-8-3 08:14:34 | 显示全部楼层 |阅读模式
  Puppet 基于C/S的模型,利用agent和master两种角色提供扩展性极强的批量配置变更方案,在服务器/桌面领域的自动化配置方面得到了广泛使用,在数据中心和云计算如火如荼的今天,Google /Cisco/Vmware 这些业界大佬都投资了这家以开源软件puppet为基础的商业化公司puppetlabs, 足见其发展潜力较大,这家公司也推出了商用版本Puppet Enterprise。Puppet提供的模块化平台forge 也方便管理模块的共享,扩展其管理的广度。

          数据中心领域涉及到对服务器、存储设备及网络设备的管理,网上对服务器的管理例子有很多,包括传统的NTP, Mysql管理、云计算平台的Openstack管理和虚拟化平台vCenter的管理,但对于网络设备直接管理的例子较少。这主要是由于网络设备实现的特殊性,一般不能直接安装puppet作为agent实现被管理端的功能。在2.7之后的版本puppet提供了proxy的机制来实现对远端网络设备的管理。
Puppet的官网上提供了两个例子来实现对网络设备的管理。
1.       Cisco设备的管理。
2.       F5 Load Balance设备的管理。
本文就这些例子做些深入剖析,探讨下如何自己开发模块支持其他厂商设备。
Puppet提供device 机制来实现对远端网络设备的管理,目前版本仅支持对Cisco IOS设备的管理,且管理功能极其有限,仅可以支持接口和VLAN的配置。当然如果使用模块来扩展对设备的支持,比如对F5设备的管理模块puppetlabs-f5,就可以实现丰富的管理功能。下面详细分析下这两种方法。
Cisco 设备的原生支持


在/etc/puppet/device.conf中如下配置

  


  • [device1 certname]
  •   type cisco
  •   url ssh://puppet:letmein@device.domain.com/

  •   [device2 certname]
  •   type cisco
  •   url telnet://puppet:letmein@router.domain.com/?enable=enablepassword
  

  目前Type仅支持cisco一种,URL方法也仅支持Telnet和SSH两种,具体实现可以参考源码中“lib\puppet\util\network_device”这个目录的实现。
  设备的Puppet配置及运行命令puppet device --server 后检查执行效果如下。
  


  • node "c2950.domain.com" {
  • interface {
  •       "GigabitEthernet0/1":
  •         description => "--> to upstream router",
  •         mode => trunk,
  •         allowed_trunk_vlans => "99, 1000"
  • }
  • }
  


  • c2950#sh running-config interface GigabitEthernet 0/1
  •   Building configuration...
  •   ...
  •   interface GigabitEthernet0/1
  •    description --> to upstream router
  •    switchport trunk allowed vlan 99,1000
  •    switchport mode trunk
  •   end
  

  如何将这种配置映射成相应的IOS命令,并通过Telnet/SSH下发给具体的设备,就是实现各种设备适配的重点了。举一个例子说明,对于Interface的配置,参考源码中类“Puppet::Util::NetworkDevice::Cisco::Interface”的实现就可以管中窥豹。
  


  • COMMANDS = {
  •     # property     => order, ios command/block/array
  •     :description   => [1, "description %s"],
  •     :speed         => [2, "speed %s"],
  •     :duplex        => [3, "duplex %s"],
  •     :native_vlan   => [4, "switchport access vlan %s"],
  

  如此看来,扩展其他厂商的设备或者增加路由/ACL之类的配置实现并不困难,也就是体力活,只是抽象好的话,实现起来或许能再简洁些。

F5设备的模块支持
  Cisco设备的支持是通过Telnet/SSH等传统的登陆方法,而F5的TMOS就是基于Linux系统的,且提供了基于SOAP的iControl API来实现对设备的管理功能。
  
puppetlabs-f5模块就是利用Rudy实现的iControl API来和设备进行交互通信的。
  
在/etc/puppet/device.conf中如下配置
  


  • [f5.puppetlabs.lan]
  • type f5
  • url https://username:password@f5.puppetlabs.lan/partition
  

  设备的Puppet配置如下,配置一个rule及一个服务器池。
  


  • node f5.puppetlabs.lan {
  •   f5_rule { 'redirect_404':
  •     ensure     => 'present',
  •     definition => 'when HTTP_RESPONSE {
  • if { [HTTP::status] eq "404" } {
  • redirect to "http://www.puppetlabs.com/redirect/404"}}',
  •   f5_pool { 'webapp':
  •     ensure                          => 'present',
  •     action_on_service_down          => 'SERVICE_DOWN_ACTION_NONE'',
  •     member                          => {
  •       '10.10.0.1:80' => {'connection_limit' => '0',
  •                          'dynamic_ratio'    => '1',
  •                          'priority'         => '0',
  •                          'ratio'            => '1'},
  •       '10.10.0.2:80' => {'connection_limit' => '0',
  •                          'dynamic_ratio'    => '1',
  •                          'priority'         => '0',
  •                          'ratio'            => '1'},
  •     },
  •     minimum_active_member           => '1',
  •     minimum_up_member               => '0',
  •   }
  • }
  

  通过对puppetlabs-f5源码中类“Puppet::Util::NetworkDevice::F5::Device”的分析,不难看出 iControl API 是其实现的基础。
  @transport ||= F5::IControl.new(@url.host, @url.user, @url.password, modules).get_interfaces
  

  
通过这个接口获取各个模块的配置接口,从而可以完成VirtualServer、NodeAddress及Monitor等重要元素的配置。
  总结一下,这种方法适合被管设备侧实现了基于SOAP或Netconf等高级的网管配置协议,并且厂商提供了完善的SDK。比如H3C的IPS及ACG产品就提供了基于SOAP的管理API。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-545614-1-1.html 上篇帖子: puppet系列 下篇帖子: 自动化运维工具puppet学习笔记之基础篇
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表