ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

90DaysOfDevOps 第 21 天:NetDevOps 全景入门——把 DevOps 的版本控制与自动化实践带到网络

90DaysOfDevOps 第 21 天:NetDevOps 全景入门——把 DevOps 的版本控制与自动化实践带到网络 文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载90DaysOfDevOps 是一个持续更新的社区学习地图本文对应仓库中 2022/tr/Days/day21.md英文原版见 2022/Days/day21.md也是整个网络Networking专题 7 天旅程的起点。读完本文你将掌握 NetDevOps 的核心思想——为什么网络必须与虚拟机、容器、Kubernetes 一样纳入 DevOps 的自动化与版本控制体系同时补齐 Host、IP 地址、网络、交换机、路由器等最基础的网络概念并看到仓库中真实可运行的网络自动化脚本Paramiko、Netmiko如何把这些理念落地。为什么 DevOps 离不开网络前面 20 天我们反复强调DevOps 本质上是组织内的文化与流程变革其承载对象可以是虚拟机VM、容器或 Kubernetes。但需要特别指出的是这个承载对象同样可以是网络本身。只要我们在为基础设施应用 DevOps 原则就必须把网络包含进来。从 DevOps 的视角看你还得了解网络——包括不同的网络拓扑topologies、可用的网络工具tools以及网络上可能存在的技术栈stacks。更进一步作者给出的建议是网络设备应当像虚拟机一样用基础设施即代码IaC的方式配置并把一切都自动化。而自动化的前提是先对自己要自动化的对象有充分的理解——这正是本专题先用数天时间讲网络基础的原因。NetDevOps / Network DevOps 是什么在网络与云的文化语境中你会频繁听到Network DevOps或NetDevOps这两个词。如果你本身就是网络工程师可能已经对 DHCP、DNS、NAT 等网络要素以及硬件/软件定义网络SDN选项、交换机、路由器等设备非常熟悉如果你不是网络工程师就需要先建立这些领域的基础认知才能真正理解 Network DevOps 的目标是什么。简而言之可以把NetDevOps 理解为把 DevOps 的原则与实践应用到网络上也就是把版本控制version control和自动化工具automation tools应用到网络的创建、测试、监控与部署流程中。其核心要点包括打破团队孤岛DevOps 的目标是消除团队之间的壁垒。如果网络团队不转向类似的模型与流程他们就会成为整个交付链的瓶颈甚至成为整体的失败点。自动化贯穿全生命周期围绕**供给provisioning、配置configuration、测试testing、版本控制version control与部署deployment**应用自动化原则是很好的起点。速度、稳定与可复用自动化整体上能带来更快的部署速度、更稳定的网络基础设施和持续改进同时由于流程以代码形式存在经过一个环境完整测试的网络策略Network Policy可以快速复用到另一个位置——这远比过去手工编写流程的方式更可靠。仓库里的 NetDevOps 落地实践仓库 2022/Days/Networking 目录正是这一思想的实际产物它包含一组针对 Cisco IOS 网络实验环境一台路由器 R1 与四台交换机 SW1~SW4的自动化脚本与设备配置文件演示了网络即代码的几种典型操作backup.py基于 Paramiko 的批量配置备份脚本paramiko_show.py基于 Paramiko 的交互式命令采集脚本netmiko_con_multi.py基于 Netmiko 对多台设备批量执行show ip int briefnetmiko_con_multi_vlan.py对四台交换机批量执行show int trunknetmiko_sendchange.py以代码形式向设备推送配置变更trunk 接口配置设备清单 backup.txt 与设备配置文件 R1、SW1、SW2、SW3、SW4。这些脚本会在后文结合设备概念详细解读。注意脚本中出现的admin/access123是仓库实验环境的演示凭据真实生产环境务必改用密钥管理、环境变量或 getpass 交互输入等方式。网络基础四大核心概念接下来暂时放下 DevOps 视角快速过一遍网络最基础的概念。这些概念是理解后面所有网络专题内容的基石。Host主机Host 是任何发送或接收流量的设备——无论是服务器、PC、手机还是网络设备本身只要参与流量收发就是一台主机。IP 地址IP 地址是每一台主机的身份标识identity。就像门牌号一样它让数据能够准确找到目标主机同一个网络内的主机共享同一段 IP 地址空间。Network网络网络是负责在主机之间传输流量的结构。如果没有网络数据将只能依靠人工搬运——这在现代基础设施中显然不可接受。更严谨地说网络是需要相似连通性的一组主机的逻辑分组。Switch交换机交换机负责在网络内部within a network促进通信。它把数据包packets在主机之间转发并且是直接把数据包送达目标主机——不需要经过其他无关设备。网络需要相似连通性的主机分组同一网络内的主机共享同一 IP 地址空间。注更高级的交换机可以表现得像路由器一样能在相似特性的设备之间做路由但通常不具备路由器所能提供的全部路由协议能力。Router路由器路由器负责在网络之间between networks促进通信。如果说交换机管理的是网络内部的通信那么路由器就是把多个网络连接起来或在允许的情况下让它们彼此访问。路由器的关键特性流量控制点路由器可以提供安全、过滤、重定向等流量控制能力如今越来越多的交换机也具备了其中部分功能学习路由路由器会学习自己连接了哪些网络这些被称为路由routes路由表routing table就是路由器所知道的全部网络的集合网关Gateway路由器在其所连接的网络中各有一个 IP 地址这个 IP 同时也是每台主机离开本地网络的出口即通常所说的网关层级结构路由器也构成了前面提到的网络层级hierarchy。澄清一个常见误解我们家里从 ISP 那里拿到的路由器设备实际上通常由 4 个组件合体而成——路由器Router、交换机Switch、接入点Access Point和调制解调器Modem。理解这些设备之间的差异是区分它们各自职能的前提。Switches vs. Routers路由与交换的本质区别Routing路由在网络之间搬运数据的过程。路由器Router就是以路由为主要职责的设备。Switching交换在网络内部搬运数据的过程。交换机Switch就是以交换为主要职责的设备。一句话总结交换管内部路由管之间。这是理解一切网络设备的基础框架。更多网络设备一览上述只是设备层面的基础概览。实际网络中还有大量承担其他职能的设备包括设备类型说明Access Point接入点提供无线接入能力Firewall防火墙物理或基于硬件的安全过滤设备Load Balancer负载均衡器物理或基于硬件的流量分发设备Layer 3 Switch三层交换机兼具路由能力的交换机IDS / IPS入侵检测系统 / 入侵防御系统Proxy代理转发并缓存请求的中间设备Virtual Switch虚拟交换机逻辑的、基于软件实现的交换机Virtual Router虚拟路由器逻辑的、基于软件实现的路由器需要注意的是以上所有设备本质上都在以某种方式执行路由routing和/或交换switching。理解了这一点后续学习任何具体设备都会轻松很多。用代码管理网络的实战佐证回到 NetDevOps 的主题仓库中的脚本展示了网络即代码的两种主流实现路径低层 Paramiko 与高层 Netmiko。基于 Paramiko 的命令采集paramiko_show.py 演示了最底层的自动化方式通过 SSH 建立通道、进入交互式 shell然后逐条发送enable、密码、terminal length 0、show ip int b、show arp等命令并读取缓冲区输出。它连接的正是路由器 R1192.168.169.115与 R1 配置文件中开启的 SSH v2、本地认证等设置一一对应。基于 Netmiko 的多设备批量操作netmiko_con_multi.py 使用 Netmiko 的ConnectHandler以字典描述每台设备device_type: cisco_ios然后对 R1 与 SW1~SW4 循环执行show ip int brief、打印设备提示符并断开连接。相比 ParamikoNetmiko 封装了交互细节代码更简洁、更接近声明式。netmiko_con_multi_vlan.py 则对四台交换机批量执行show int trunk用于核查 VLAN trunk 链路状态。以代码形式变更配置最能体现配置即代码的是 netmiko_sendchange.py它把一组配置以 Python 列表形式定义core_sw_config [int range gig0/1 - 2, switchport trunk encapsulation dot1q, switchport mode trunk, switchport trunk allowed vlan 1,2]随后通过net_connect.enable()进入特权模式再用send_config_set(core_sw_config)一次性下发。这段代码正是文章开头所说网络策略以代码形式存在、可版本控制、可快速复用到其他位置的直观体现。自动化备份运维闭环backup.py 从 backup.txt 读取 5 台设备 IP192.168.169.115/178/193/125/197通过 Paramiko 登录后依次发送enable、term len 0、sh run把运行配置按IP_时间戳命名保存并统计整个备份过程的耗时。这正是 NetDevOps 中监控与合规环节的自动化实践——设备配置的定期备份与审计不再依赖人工登设备。设备端配置的自动化前提上述所有脚本之所以能无人值守运行是因为设备侧预先配置好了自动化接口。以 R1 为例其配置文件包含ip ssh version 2SSH v2、ip scp server enable开启 SCP、AAA 本地认证、vty 线路开放 login local、exec-timeout 0 0避免会话超时、以及 SNMP 陷阱与 syslog 日志上报等。也就是说网络自动化的另一半功夫在设备配置本身——这正好印证了文中要自动化必须先深刻理解被自动化的对象的观点。接下来 6 天网络的进阶地图第 21 天之后专题将依次深入以下主题它们共同构成理解网络的基础OSI 模型七层参考模型理解网络分层的标准框架网络协议TCP/IP 等实际通信协议的工作机制DNS域名系统域名到 IP 的解析NAT网络地址转换DHCP动态主机配置协议子网SubnetsIP 地址空间的划分。如果你对这些术语还不熟悉建议按顺序继续学习如果已经掌握可以直接进入下一个主题云提供商Cloud Provider或从 Day 22 继续网络专题之旅。小结第 21 天的核心结论可以浓缩为三点DevOps 的自动化原则必须延伸到网络网络自动化NetDevOps的前提是扎实掌握 Host、IP、网络、交换机、路由器等基础概念路由跨网络搬运数据与交换网络内部搬运数据是一切网络设备的底层职能。仓库 2022/Days/Networking 下的 Paramiko/Netmiko 脚本与设备配置文件为网络即代码提供了可运行、可复现的参考实现值得在理解理论后动手实践。赞分享文档/教程【免费下载链接】90DaysOfDevOpsThis repository started out as a learning in public project for myself and has now become a structured learning map for many in the community. We have 3 years under our belt covering all things DevOps, including Principles, Processes, Tooling and Use Cases surrounding this vast topic.项目地址https://gitcode.com/gh_mirrors/90/90DaysOfDevOps点击查看免费下载相关推荐90DaysOfDevOps 第21天DevOps 与网络全景 —— 从 NetDevOps 到网络基础概念90DaysOfDevOps 第21天DevOps 与网络全景 —— 从 NetDevOps 到网络基础概念 导读 本文对应 90DaysOfDevOps 学文档/教程90DaysOfDevOps Day 21DevOps 与网络全景——从网络基础到 NetDevOps 自动化90DaysOfDevOps Day 21DevOps 与网络全景——从网络基础到 NetDevOps 自动化 本文是 90DaysOfDevOps 学习路线文档/教程90DaysOfDevOps 第 21 天DevOps 与网络的大局观——从 NetDevOps 到网络设备基础90DaysOfDevOps 第 21 天DevOps 与网络的大局观——从 NetDevOps 到网络设备基础 导读 本文是 90DaysOfDevOps文档/教程上一篇SOFARegistry高性能、可扩展的服务注册与发现组件下一篇Bootstrap Ruby Gem性能优化技巧如何通过选择性导入组件减少打包体积创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表