)
文档/教程【免费下载链接】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 年路线图网络模块的开篇Day 21核心回答两个问题为什么网络必须纳入 DevOps 的自动化与版本控制体系即 NetDevOps / Network DevOps以及在动手自动化之前工程师需要掌握哪些最基础的网络概念主机、IP 地址、网络、交换机、路由器。读完本篇你将理解网络自动化背后的动机与收益模型建立起网络设备同样可以用代码定义、测试与部署的心智框架并掌握判断网络组件职责路由 vs 交换的基本能力为后续七天的 OSI 模型、协议、DNS、NAT、DHCP、子网等专题打下地基。为什么网络必须进入 DevOps 的视野在之前的日子里我们已经反复强调DevOps 本质上是组织内的一场文化与流程变革其对象可以是虚拟机、容器、Kubernetes也同样可以是网络。如果我们用 DevOps 原则来管理基础设施那这当中就必然包含网络本身更进一步说从 DevOps 的视角看问题工程师同样需要了解网络——不同拓扑、网络工具与可用技术栈。作者在这一天给出了一个非常明确的立场我们应该像配置虚拟机一样用基础设施即代码Infrastructure as Code来配置网络设备并把一切都自动化但在自动化之前我们必须先真正理解我们正在自动化的对象是什么。这正是本篇文章的底层逻辑自动化不是目的前提是对被自动化对象的透彻理解。什么是 NetDevOps / Network DevOps你可能也会听到 Network DevOps 或 NetDevOps 的说法。如果你本身就是网络工程师可能已经对基础设施中的网络组件DHCP、DNS、NAT 等以及硬件或软件定义网络方案交换机、路由器等了如指掌但如果你不是网络工程师就需要先建立这些领域的基础知识才能真正理解 Network DevOps 的终极目标。关于这两个术语可以这样定义NetDevOps / Network DevOps 把 DevOps 的原则与实践应用到网络上即将版本控制和自动化工具应用到网络的创建、测试、监控与部署全流程中。换言之NetDevOps 要求网络团队也必须具备自动化能力。我们之前提到 DevOps 在打破团队之间的孤岛——如果网络团队不转向类似的模型和流程那么他们就会成为整个交付链路的瓶颈甚至成为整体失败点。自动化可以围绕以下环节展开这也是一个很好的起步框架自动化环节说明Provisioning供应用代码声明式地创建网络设备、接口、VLAN、路由等资源Configuration配置把设备配置固化为可审计、可复用的代码与模板Testing测试在隔离环境验证网络策略与配置的正确性Version Control版本控制配置与策略进入 Git 等版本库可追溯、可回滚Deployment部署将经过验证的配置快速、一致地推广到多个环境自动化的整体收益体现在三方面提升部署速度、增强网络基础设施的稳定性、实现持续改进。更重要的是流程一旦写成代码就可以在多个环境之间共享复用——例如一个在某环境被完整验证过的网络策略Network Policy可以因为它是代码而不是手工流程而快速复制到另一个位置使用这在过去纯手工运维的时代是难以想象的。仓库里的 NetDevOps 实践印证这一理念并非纸上谈兵本仓库 2022 年路线图自带的 Networking 目录 中就有成套的网络自动化脚本恰好对应了配置、测试、版本控制、部署中的配置与版本控制环节我们将在后文结合这些脚本进一步展开。网络基础概念动手自动化前的必修课在谈 DevOps 之前我们先把网络工程师的基本功过一遍——不需要多深但以下每个概念都是后续理解 NetDevOps 的基石。网络设备Network DevicesHost主机——任何发送或接收流量的设备都叫主机。想一想任何能连接互联网的东西台式机、笔记本、服务器、智能手机、智能电视、打印机都是主机。凡是通过网络收发流量的设备都算。IP 地址IP Address——每个主机的身份标识。IP 地址是 32 位的二进制数用四个八位组Octet表示每个八位组取值范围 0255IP 地址是分层分配的这就是子网划分 Subnetting 的由来。图中两个主机通信时每条流量的报头里都带着源 IP 与目的 IP例如86.172.200.94与8.8.8.8。网络Network——负责在主机之间传输流量。如果没有网络我们就只能靠人工搬运数据网络在逻辑上被定义为一组需要相似连通性的主机的逻辑分组。网络可以包含其他网络子网也可以连接到其他网络最终接入互联网Internet。交换机Switch——负责网络内部的通信。交换机在主机之间转发数据包并且是直达式的它只把数据发送给它真正要送达的那一台设备而不是向全网广播。网络 一组需要相似连通性的主机的分组同一网络中的主机共享同一个 IP 地址空间。路由器Router——负责网络之间的通信。如果说交换机打理网络内部的通信那么路由器就是把不同网络连接起来、在允许的前提下让它们互相访问。路由器可以充当流量控制点安全、过滤、重定向如今越来越多的交换机也具备了部分这类功能。关于路由器需要记住几个关键事实路由器会学习自己连接了哪些网络这些记录被称为路由Routes一个路由器知道的所有网络合起来就是它的路由表Routing Table路由器在每个它所连接的网络里都拥有一个 IP 地址这个 IP 也是该网络中每台主机离开本地网络的出口即网关Gateway路由器还创造了我们前面提到的网络层级Hierarchy。交换机 vs 路由器路由与交换的本质区别这两个设备是网络世界最容易混淆的一对用过程来区分最清晰路由Routing是在网络之间移动数据的过程路由器就是主要职责为路由的设备。交换Switching是在网络内部移动数据的过程交换机就是主要职责为交换的设备。这只是对设备的奠基性概述。现实中的网络设备远不止这两种例如接入点Access Points防火墙Firewalls负载均衡器Load Balancers三层交换机Layer 3 SwitchesIDS / IPS入侵检测 / 入侵防御系统代理Proxies虚拟交换机Virtual Switches虚拟路由器Virtual Routers虽然设备种类繁多但本质上它们最终都在执行路由和/或交换这两类核心工作。用仓库脚本演示网络设备的配置即代码回到 Day 21 的核心论点——用 DevOps 原则自动化网络。仓库的 2022/Days/Networking 目录就是一套活生生的 NetDevOps 示例它以 Cisco 设备一个路由器 R1 与四台交换机 SW1SW4IP 分布在192.168.169.115192.168.169.197网段为对象展示了从读取配置到批量执行命令再到推送变更配置、备份运行配置的完整自动化链路恰好覆盖了前文自动化框架中的供应、配置、版本控制环节。用 Paramiko 手动走一遍 SSH 交互流程paramiko_show.py 展示的是最底层的自动化方式用 Python 的 Paramiko 库建立 SSH 会话进入 enable 模式后执行show ip int b、show arp等命令并抓取回显。这段脚本的价值在于让你理解网络自动化的本质——设备依然是人机交互界面但交互者从人类变成了程序shell Channel.invoke_shell() # 打开交互式 shell shell.send(enable\n) shell.send(access123\n) shell.send(terminal length 0\n) shell.send(show ip int b\n) shell.send(show arp \n) print(shell.recv(5000)) # 读取缓冲区回显用 Netmiko 批量收集设备状态netmiko_con_multi.py 把手工登录五台设备敲命令变成了循环脚本用ConnectHandler定义了一台路由器 R1 和四台交换机 SW1SW4 的连接信息device_type为cisco_ios然后对每个设备执行show ip int brief打印提示符与回显后断开连接。这正是把可重复操作固化为代码的直观体现for device in (R1, SW1, SW2, SW3, SW4): net_connect ConnectHandler(**device) print(net_connect.find_prompt()) print(net_connect.send_command(command)) net_connect.disconnect()推送配置变更从手改命令行到代码下发netmiko_sendchange.py 展示了配置变更如何以代码形式下发脚本以列表形式定义了对 SW2 的配置意图int range gig0/1 - 2、switchport mode trunk、switchport trunk allowed vlan 1,2通过send_config_set一次性推送到设备。网络配置从手工输入变成了可版本化、可评审、可复现的代码对象这正是网络策略可以在一个环境验证后快速复用到其他环境这一 NetDevOps 理念的最小实现。core_sw_config [int range gig0/1 - 2, switchport trunk encapsulation dot1q, switchport mode trunk, switchport trunk allowed vlan 1,2] net_connect ConnectHandler(**SW2) net_connect.enable() net_connect.send_config_set(core_sw_config)批量备份运行配置为版本控制铺路backup.py 则对应版本控制环节的原料采集脚本读取 backup.txt 中的设备列表通过 Paramiko 逐个 SSH 登录、进入 enable 模式、执行sh run把每台设备的运行配置以带时间戳的文件名落盘保存。设备配置一旦被批量、定时地抓取为文件就可以进入 Git 等版本库进行差异对比、审计与回滚——这正是网络基础设施的持续改进的起点。从这些脚本可以看到Day 21 所倡导的像管虚拟机一样用 IaC 管网络在实践层面落地为三层能力连接自动化SSH/Netmiko、配置下发自动化send_config_set、配置备份与版本化批量抓取落盘。理解主机、IP、网络、交换机、路由器这些概念正是为了安全、正确地编写和使用这样的自动化代码。接下来七天的网络学习路线从 Day 21 开始我们将用接下来的时间深入这些网络专题逐步把今天建立的框架填满细节OSI 模型OSI Model网络协议Network ProtocolsDNS域名系统NATDHCP子网SubnetsDay 22 首先会进入 OSI 模型七层详解把数据如何从一台主机的一层一路封装、逐层跨越网络到达另一台主机的过程完整拆开。建议按顺序跟进因为后续 DNS、NAT、DHCP、子网等主题都会复用本篇文章建立的设备与寻址概念。小结Day 21 为整个网络模块定下了基调网络不是 DevOps 的例外而是必须被自动化和版本化的基础设施的一部分。NetDevOps 的实质就是把供应、配置、测试、版本控制、部署这套 DevOps 实践平移到网络领域避免网络团队成为交付链路中的瓶颈而这一切的前提是对主机、IP 地址、网络、交换机、路由器等基础概念的扎实理解以及路由网间移动、交换网内移动的清晰区分。仓库 Networking 目录 中的 Paramiko/Netmiko 脚本已经为我们演示了这条路径的起点——接下来七天我们将沿着 OSI 模型与各种网络协议把这张地图的细节全部点亮。赞分享文档/教程【免费下载链接】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 Día 21DevOps 与网络全景——从 NetDevOps 理念到网络设备基础90DaysOfDevOps Día 21DevOps 与网络全景——从 NetDevOps 理念到网络设备基础 在 90DaysOfDevOps 的 90文档/教程上一篇Awesome Ratatui生产力工具推荐10款提升终端工作流的实用应用下一篇如何在5分钟内搭建vim-lsc环境从安装到配置的完整教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考