使用Netplan建立Linux网络,简便的声明性方法

在这里插入图片描述
除了周围网络环境的复杂性之外,由于使用的技术堆栈和工具范围很广,Linux 网络可能会令人困惑。网桥、绑定、VRF 或路由的配置可以通过编程、声明、手动或自动化方式使用 ifupdown、ifupdown2、ifupdown-ng、iproute2、NetworkManager、systemd-networkd 等工具完成。这些工具中的每一个都使用不同的格式和位置来存储其配置文件。Netplan 是一种用于在 Linux 系统上轻松配置网络的实用程序,旨在统一和标准化管理员与这些底层技术的交互方式。从所需网络接口的 YAML 描述以及每个接口应配置的功能开始,Netplan 将为您选择的工具生成所有必要的配置。

在本文中,我们将概述 Ubuntu 如何使用 Netplan 以统一的方式管理 Linux 网络。通过跨两个不同的技术堆栈创建通用界面,IT 管理员可以从跨桌面和服务器的统一体验中受益,同时保留底层技术的独特优势。

但首先,让我们从一些历史开始,然后详细介绍我们今天所处的位置。

Netplan 在 Ubuntu 中的历史

从 Ubuntu 16.10 开始,由于需要以通用方式跨云元数据和其他安装程序系统表达网络配置,我们有机会切换到与基于依赖项的引导模型更好地集成的网络堆栈。我们在服务器安装上选择了systemd-networkd,因为它的上游社区活跃,因为它已经是Systemd的一部分,因此包含在任何Ubuntu基本安装中。与我们之前使用的ifupdown工具相比,它使用现代开发技术,良好的测试覆盖率和CI集成,对未来有更好的前景。在桌面安装中,我们继续使用NetworkManager,因为它与用户界面的集成非常好。

根据所使用的 Ubuntu 变体,必须管理和配置两个单独的网络堆栈可能会令人困惑,我们希望在任何版本的 Ubuntu 中提供简化的用户体验。因此,我们引入了 Netplan.io 作为 systemd-networkd 和 NetworkManager 之上的控制层。Netplan 将 /etc/netplan/ 中的声明式 YAML 文件作为输入,并根据系统配置在 /run/systemd/network/ 或 /run/NetworkManager/ 中为相关网络堆栈后端生成相应的网络配置。同时保持充分的灵活性,在需要时以本机方式控制底层网络堆栈。
在这里插入图片描述

谁在使用Netplan?

最新版本的Netplan已经可用并准备好安装在许多发行版上,例如Ubuntu,Fedora,Red Hat Enterprise Linux,Debian和Arch Linux。

乌班图

如上所述,Netplan 自 2016 年以来默认安装在 Ubuntu 系统上,因此每天在 Ubuntu 的多个长期支持版本(18.04、20.04、22.04)中被数百万用户使用。这主要涵盖了 Ubuntu 服务器场景,例如网桥、绑定、VLAN、VXLAN、VRF、IP 隧道或 WireGuard 隧道,使用 systemd-networkd 作为后端渲染器。

在 Ubuntu 桌面系统上,Netplan 可以通过其声明性 YAML 配置文件手动使用,它将处理这些文件以配置 NetworkManager 堆栈。继续阅读以了解将来如何通过自动化和与桌面堆栈的集成来改进这一点。

这可能不那么明显,但是许多人在通过cloud-init在AWS,Google Cloud或其他地方配置公共云实例时一直在使用Netplan而不知情。这是因为 cloud-init 的“网络配置版本 2”是 Netplan 的直通配置,然后 Netplan 将在给定的云实例上设置底层网络堆栈。这就是为什么Netplan也是Debian发行版上的一个关键软件包,因为它也默认用于Debian云映像。

我们对 Linux 网络的愿景

我们知道 Linux 网络可能是一头野兽,我们希望让简单的事情变得简单。但也允许任何复杂的自定义设置。使用 Netplan,日常网络需求通过易于理解且文档很好的 YAML 文件来满足,这些文件描述了本地网络接口的所需状态,这些文件将被渲染到相关网络堆栈的相应配置文件中,并在(重新)启动或运行时使用“netplan apply”CLI 应用。例如 /etc/netplan/lan.yaml:

network:
  version: 2
  renderer: networkd
  ethernets:
    enp3s0:
      dhcp4: true

拥有网络配置的单一事实来源对于管理员来说也很重要,因此他们不需要了解多个网络堆栈,而是可以依靠 /etc/netplan/ 中给出的声明性数据来配置系统,独立于底层网络配置后端。这对于为新的Linux安装提供初始网络配置也非常有帮助,例如通过安装系统,如Subiquity,Ubuntu的桌面安装程序或跨公共云和私有云的cloud-init。

除了描述和应用网络配置外,“netplan status”CLI 还可用于从底层网络堆栈(例如 systemd-networkd、NetworkManager 或 iproute2)查询相关数据,并以统一的方式呈现它们。
在这里插入图片描述
在Netplan项目中,我们努力实现非常高的测试自动化和覆盖率,在多个Linux发行版中进行大量的单元测试,集成测试和linting步骤,这为支持更高级的网络用例提供了很高的信心,例如Open vSwitch或SR-IOV网络虚拟化,以及正常的有线(静态IP,DHCP,路由), 无线(例如 WWAN 调制解调器、WPA2/3 连接、WiFi 热点、控制监管域等)和常见服务器场景。

如果存在Netplan本机未涵盖的场景,除了通过Netplan控制的接口并行进行手动配置外,它还允许完全灵活地直接通过systemd覆盖配置或NetworkManager直通设置控制底层网络堆栈。

Netplan 桌面集成的未来

在工作站上,最常见的情况是最终用户通过其用户界面工具配置 NetworkManager,而不是通过 Netplan 的声明性 YAML 文件(使用 NetworkManager 的本机配置文件)对其进行驱动。为了避免Netplan只是将控制权移交给此类系统上的NetworkManager,我们正在研究NetworkManager和Netplan之间的双向集成,以进一步改进Ubuntu桌面安装上的“单一事实来源”用例。

Netplan 正在发布一个“libnetplan”库,该库提供了一个 API 来访问 Netplan 的解析器和验证内部,NetworkManager 可以使用该库来写回网络接口配置。例如,通过NetworkManager的UI工具或D-Bus API给出的配置可以导出为Netplan的本机YAML格式,位于/etc/netplan/的公共位置。这样,管理员在管理桌面安装队列时只需要关心Netplan。该解决方案目前用于更受限的环境,如 Ubuntu Core,当使用 NetworkManager snap 时,我们将以 24.04 LTS 将其交付给通用 Ubuntu 桌面系统。

除了 NetworkManager 之外,libnetplan 还可用于与网络空间中的其他工具集成,例如 cloud-init,用于在播种新 Linux 映像时改进用户数据或安装系统的验证。

结论

总体而言,Netplan 可以被认为是网络环境中的良好公民,它与其他网络工具携手合作,可以轻松地以通用、简化和声明的方式控制现代网络堆栈,例如 systemd-networkd 或 NetworkManager。它为网络管理员提供了有关网络状态的“单一事实来源”,同时保持简单的事情简单,但允许任意复杂的自定义设置。
https://ubuntu.com/blog/a-declarative-approach-to-linux-networking-with-netplan

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/85711.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

u盘数据丢失但占内存如何恢复?不要着急,这里有拯救方案

U盘数据丢失但占内存如何恢复?数据丢失是一种让人非常头疼的问题,尤其是当我们的U盘数据丢失了,但内存仍然被占用时,更令人困惑和焦虑。然而,不要慌张!在本文中,将为大家介绍一些有效的方法来恢…

Apache Hudi初探(二)(与flink的结合)--flink写hudi的操作(JobManager端的提交操作)

背景 在Apache Hudi初探(一)(与flink的结合)中,我们提到了Pipelines.hoodieStreamWrite 写hudi文件,这个操作真正写hudi是在Pipelines.hoodieStreamWrite方法下的transform(opName("stream_write", conf), TypeInformation.of(Object.class), operatorFa…

Vue的Ajax请求-axios、前后端分离练习

Vue的Ajax请求 axios简介 ​ Axios,是Web数据交互方式,是一个基于promise [5]的网络请求库,作用于node.js和浏览器中,它是 isomorphic 的(即同一套代码可以运行在浏览器和node.js中)。在服务端它使用原生node.js http模块, 而在…

手写模拟SpringBoot核心流程(一):实现极简一个SpringBoot——模拟SpringBoot启动过程

前言 Spring Boot 是一个开源的框架,用于简化 Spring 应用程序的开发和部署。它建立在 Spring Framework 的基础上,内置了web服务器——tomcat和jetty,使得 Spring 应用的构建变得更加快速、简单和可维护。 本文通过实现一个SpringBoot&…

HTTP连接管理

基础知识:非持久连接 HTTP初始时1.0版本在浏览器每一次向服务器请求完资源都会立即断开TCP连接,如果想要请求多个资源,就必须建立多个连接,这就导致了服务端和客户端维护连接的开销。 例如:一个网页中包含文字资源也包…

第一百三十三天学习记录:数据结构与算法基础:串、数组和广义表(串Ⅱ)(王卓教学视频)

注:在之前学习C语言的时候,了解过这一块。其中对KMP算法进行了自学,前面的学习记录也有提到过。这一次根据视频教学再系统性的学习学习一次。 串的模式匹配算法 KMP算法

[oneAPI] 基于BERT预训练模型的SQuAD问答任务

[oneAPI] 基于BERT预训练模型的SQuAD问答任务 Intel Optimization for PyTorch and Intel DevCloud for oneAPI基于BERT预训练模型的SQuAD问答任务语料介绍数据下载构建 模型 结果参考资料 比赛:https://marketing.csdn.net/p/f3e44fbfe46c465f4d9d6c23e38e0517 Int…

GPT-4一纸重洗:从97.6%降至2.4%的巨大挑战

斯坦福大学和加州大学伯克利分校合作进行的一项 “How Is ChatGPTs Behavior Changing Over Time?” 研究表明,随着时间的推移,GPT-4 的响应能力非但没有提高,反而随着语言模型的进一步更新而变得更糟糕。 研究小组评估了 2023 年 3 月和 20…

Django视图-HttpRequest请求对象和HttpResponse响应对象

文章目录 HttpRequestHttpResponse实践request对象的属性和方法响应 def index(request): 这个request其实就是内部已经封装好的Http请求HttpRequest,它是一个请求对象Django中的视图主要用来接受Web请求,并做出响应。 视图的本质就是一个Python中的函数…

Eduma主题 - 线上教育WordPress主题/网站

Eduma主题 – 线上教育WordPress主题是为教育网站、LMS、培训中心、课程中心、学院、大学、学校、幼儿园而制作的。基于我们使用以前的主题eLearning WP构建WordPress LMS的经验,Education WP是下一代,也是围绕WordPress最好的教育主题之一,它…

Qt下拉菜单

1,QComboBox 2,setMenu()---设置下拉菜单 AI对话未来丨智能写作对话: setMenu()是QWidget类的一个成员函数,在Qt中用于将一个菜单作为一个控件的下拉菜单设置。具体来说,它会把相应的菜单对象与该控件关联,并在控件上…

PySpark-核心编程

2. PySpark——RDD编程入门 文章目录 2. PySpark——RDD编程入门2.1 程序执行入口SparkContext对象2.2 RDD的创建2.2.1 并行化创建2.2.2 获取RDD分区数2.2.3 读取文件创建 2.3 RDD算子2.4 常用Transformation算子2.4.1 map算子2.4.2 flatMap算子2.4.3 reduceByKey算子2.4.4 Wor…

(一)idea连接GitHub的全部流程(注册GitHub、idea集成GitHub、增加合作伙伴、跨团队合作、分支操作)

(二)Git在公司中团队内合作和跨团队合作和分支操作的全部流程(一篇就够)https://blog.csdn.net/m0_65992672/article/details/132336481 4.1、简介 Git是一个免费的、开源的*分布式**版本控制**系统*,可以快速高效地…

mongodb 数据库管理(数据库、集合、文档)

目录 一、数据库操作 1、创建数据库 2、删除数据库 二、集合操作 1、创建集合 2、删除集合 三、文档操作 1、创建文档 2、 插入文档 3、查看文档 4、更新文档 1)update() 方法 2)replace() 方法 一、数据库操作 1、创建数据库 创建数据库…

hive表的全关联full join用法

背景:实际开发中需要用到全关联的用法,之前没遇到过,现在记录一下。需求是找到两张表的并集。 全关联的解释如下; 下面建两张表进行测试 test_a表的数据如下 test_b表的数据如下; 写第一个full join 的SQL进行查询…

树莓派时间更新为中国区时间

一、测试环境为:树莓派3B piraspberrypi:~/workfile/lorawan/lorawan-gw $ uname -a Linux raspberrypi 6.1.21-v7 #1642 SMP Mon Apr 3 17:20:52 BST 2023 armv7l GNU/Linux 测试过程中,请确保树莓派连接网络 ; 二、安装ntp相关命令&…

RK3399平台开发系列讲解(内核调试篇)Valgrind使用案例

🚀返回专栏总目录 文章目录 一、使用未初始化的内存案例二、内存泄露三、在内存被释放后进行读/写案例四、从已分配内存块的尾部进行读/写案例五、两次释放内存案例沉淀、分享、成长,让自己和他人都能有所收获!😄 📢Valgrind 是一个开源的内存调试和性能分析工具,用于…

【计算机网络篇】TCP协议

✅作者简介:大家好,我是小杨 📃个人主页:「小杨」的csdn博客 🐳希望大家多多支持🥰一起进步呀! TCP协议 1,TCP 简介 TCP(Transmission Control Protocol)是…

CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ CSS中如何实现文字溢出省略号(text-overflow: ellipsis)效果?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 记得点击上方或者右侧链接订阅本专栏哦 几何带你启航前端之旅 …

阿里云服务器-修改ecs操作系统,把window系统更换成Linux操作系统

其他sql格式也在更新中,可直接查看这个系列,要是没有你需要的格式,可在评论或私信我 总目录 目录-后期更新打算 hive的nvl中的子查询 总目录我这个是window,默认应该都是window,我需要改成Linux系统第一步&#xff…