深度解析 containerd 中的 CNI 插件

CNI(Container Network Interface)插件是独立的可执行文件,遵循 CNI 规范。Kubernetes 通过 kubelet 调用这些插件来创建和管理容器的网络接口。CNI 插件的主要职责包括网络接口的创建和删除、IP 地址的分配和回收、以及相关网络资源的配置和清理。

2. CNI 插件的工作流程简述

2.1 Pod 创建

当一个新的 Pod 被创建时,kubelet 会调用 CNI 插件的 ADD 命令。CNI 插件会为 Pod 分配一个网络接口,并设置相关的网络配置,如 IP 地址和路由。这包括配置 Pod 的网络命名空间,使其能够与其他 Pod 进行通信。

2.2 Pod 删除

当 Pod 被删除时,kubelet 会调用 CNI 插件的 DEL 命令。CNI 插件会清理之前为该 Pod 分配的网络资源,如回收 IP 地址和删除网络接口。这一过程确保资源不会被浪费,并且系统能够持续高效地运行。

3. CNI 插件的功能

3.1 自动网络配置

CNI 插件的一个主要功能是自动为新创建的容器分配 IP 地址并配置网络。这包括以下步骤:

  • IP 地址分配:CNI 插件借助 IPAM(IP Address Management)模块为每个容器分配唯一的 IP 地址。

  • 网络配置:设置路由和防火墙规则,确保容器能够与外部网络及其他容器进行通信。

3.2 保证网络连接

CNI 插件确保容器能够与同一 Pod 内的其他容器、同一 Node 上的其他 Pod 以及不同 Node 上的 Pod 进行通信。这包括以下方面:

  • Pod 内通信:在同一个 Pod 内,CNI 插件通过创建共享网络命名空间,使得同一 Pod 内的所有容器可以直接进行通信。

  • 节点间通信:通过 Overlay 网络或直接路由,确保不同节点上的 Pod 可以无缝通信。

  • 网络策略:实现安全性和隔离,通过网络策略控制不同 Pod 之间的访问权限。

3.3 灵活的网络管理

CNI 插件提供了灵活的网络管理功能,使网络管理员可以灵活地选择和更换网络实现,而不需要对容器进行任何改动。这包括:

  • 插件可插拔性:管理员可以根据需求选择不同的 CNI 插件(如 Flannel、Calico 等)来实现不同的网络功能。

  • 动态配置:无需重启容器即可应用新的网络配置,支持动态扩展和调整网络结构。

通过这些功能,CNI 插件不仅简化了容器网络的配置和管理,还提供了灵活性和可扩展性,使 Kubernetes 集群的网络架构更加高效和安全。

CNI 的主要功能是在容器启动时,为其分配网络资源,并在容器停止时释放这些资源。通过标准化接口,CNI 可以与不同的网络插件配合使用,实现灵活的网络配置。

4. 常见 CNI 插件的介绍

4.1 Calico 插件

Calico 是一种高性能的 CNI 插件,提供安全的 L3 网络,并支持丰富的网络策略。它使用 BGP 协议在集群中分发路由信息,实现高效的网络连接。

  • 高性能:由于直接在 L3 层进行路由,Calico 性能优异。

  • 网络安全:Calico 支持网络策略,可以精细控制 Pod 之间的通信。

详见:https://www.tigera.io/project-calico/[1]。

4.2 Bridge 插件

Bridge 插件是 CNI 中最基本的插件之一,通常用于本地主机网络。它通过创建 Linux 桥接(bridge)设备来连接容器和宿主机网络。

  • 简单可靠:适合小型集群或单节点部署。

  • 配置灵活:可以根据需要配置桥接设备的各种参数。

详见:https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md[2]。

4.3 IPVlan 插件

IPVlan 插件是一种高性能的网络解决方案,允许容器直接使用主机的网络接口。它有两种模式:L2 模式和 L3 模式。

  • 性能优越:由于直接使用主机网络接口,性能非常高。

  • 简化网络管理:不需要复杂的网络配置,适合高性能场景

详见:https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md[3]。

5. 如何选择适合的 CNI 插件?

选择 CNI 插件时,需要考虑以下几个因素:

  • 集群规模:对于小型集群,Flannel 是一个简单易用的选择;对于大型集群,Calico 提供了强大的网络策略和隔离功能。

  • 网络需求:如果需要复杂的网络功能和安全策略,Calico 和 Cilium 是不错的选择;如果注重简单和快速部署,Weave 和 Flannel 可能更适合。

  • 性能要求:对于高性能需求的场景,IPVlan 和 MACVlan 提供了更高效的网络通信方式。

6. CNI 网络插件实现模式

容器网络接口(CNI)插件是容器网络架构的核心组件之一。它们的主要作用是管理容器的网络接口,为容器分配 IP 地址,并配置网络。CNI 插件有多种实现模式,每种模式都适用于不同的场景和需求。主要的实现模式包括 Overlay 模式和 Underlay 模式。

6.1 Overlay 模式

Overlay 模式是一种虚拟化网络的实现方式,通过在现有的物理网络上构建逻辑网络隧道来实现容器之间的通信。以下是 Overlay 模式的核心特点:

  • 逻辑隔离:Overlay 网络在物理网络之上创建逻辑网络,使不同的容器能够在同一物理网络上运行而不会相互干扰。这种逻辑隔离有助于提高网络的安全性和管理性。

  • 灵活性:Overlay 网络可以在不改变物理网络架构的情况下轻松扩展和缩减。这使得在需要动态调整网络拓扑的场景中,Overlay 模式非常适用。

  • 常见实现:常见的 Overlay 网络实现包括 VXLAN 和 GRE。这些技术通过封装原始数据包,并在物理网络上传输封装后的数据包,来实现跨节点的容器通信。

6.2 Underlay 模式

与 Overlay 模式不同,Underlay 模式直接利用底层物理网络来实现容器之间的通信。这种模式通常用于对网络性能要求较高的场景。以下是 Underlay 模式的核心特点:

  • 高性能:由于 Underlay 模式直接利用物理网络,因此减少了封装和解封装的开销,能够提供更高的网络性能。

  • 直接互通:在 Underlay 模式下,容器的网络接口可以直接与物理网络设备通信,实现容器与物理网络资源的无缝互通。这对于需要与外部系统进行大量数据交换的应用非常重要。

  • 常见实现:常见的 Underlay 网络实现包括 MAC VLAN、IP VLAN 和直接路由等。这些技术利用物理网络的能力,直接配置容器的网络接口,使其能够与底层网络进行通信。

6.3 路由模式

除了 Overlay 和 Underlay 模式外,CNI 网络插件的实现模式还包括一种路由模式。路由模式的主要特点是利用现有的物理网络设备和路由协议来实现容器之间的通信。

  • 高性能:减少了封装和解封装的开销,提供更高的网络性能。

  • 可扩展性:利用现有的路由协议和网络设备,容易扩展到大型集群。

  • 简单性:网络拓扑较为简单,无需额外的 Overlay 网络配置。

6.4 选择合适的 CNI 插件模式

在选择 CNI 插件模式时,需要根据具体的应用场景和需求进行权衡:

  • Overlay 模式适合:需要灵活调整网络拓扑、对网络隔离要求高的场景,如多租户环境或开发测试环境。

  • Underlay 模式适合:对网络性能要求高、需要与外部系统进行大量数据交换的生产环境。

  • 路由模式适合:追求高性能网络通信、需要精细的网络策略控制和可扩展性的大型企业级生产环境,特别是在多集群间需要一致的网络策略和高级路由功能的场景。

实战练习

1. 配置 containerd 使用 CNI 插件

1.1 选用 Calico 插件作为演示

下载 Calico 安装清单。

kubectl apply -f https://docs.projectcalico.org/manifests/calico.yaml
kubectl get pod -A

1.2 验证集群是否正确配置 Caclico
cat /etc/cni/net.d/0-calico.conflist

完成上述步骤后,Kubernetes 集群应该已经安装并配置好 Calico 网络插件 , 以实现高效的网络管理

2. 开发自定义 CNI 插件

然而,不同企业的网络需求各不相同,有时标准的 CNI 插件,如 Calico、Flannel 等,可能无法满足特定的网络策略或性能要求。因此,开发自定义 CNI 插件成为了扩展和定制 Kubernetes 网络能力的重要途径。

开发自定义 CNI 插件需要以下步骤:

  • 编写插件代码:使用 Go 语言编写插件代码,定义插件的初始化、配置和删除逻辑。

  • 实现 CNI 接口:实现 CNI 规范定义的接口,包括ADDDEL等操作。

  • 编译插件**:将插件代码编译成可执行文件。

  • 配置 CNI 插件:在 CNI 配置文件中添加自定义插件的配置,指定插件路径和参数。

  • 测试和调试:通过创建和删除容器来测试插件功能,使用日志和调试工具排查问题。

例如,以下是一个简单的 CNI 插件示例:

package mainimport ("fmt""os""github.com/containernetworking/cni/pkg/skel""github.com/containernetworking/cni/pkg/types/current""github.com/containernetworking/cni/pkg/types"
)func main() {skel.PluginMain(cmdAdd, cmdCheck, cmdDel, version.All, bv.BuildString("example"))
}func cmdAdd(args *skel.CmdArgs) error {// 实现ADD逻辑result := &current.Result{}return types.PrintResult(result, "0.3.1")
}func cmdCheck(args *skel.CmdArgs) error {// 实现CHECK逻辑return nil
}func cmdDel(args *skel.CmdArgs) error {// 实现DEL逻辑return nil
}

简化容器通信,让 Kubernetes 网络更高效

通过本文,我们深入了解了 CNI 插件在 containerd 中的重要作用,并通过实际案例展示了如何在 Kubernetes 中配置和使用 CNI 插件。CNI 插件不仅简化了容器的网络配置,还提供了灵活的网络管理和安全隔离功能。

KubeSphere (https://kubesphere.io)是在 Kubernetes 之上构建的开源容器平台,提供全栈的 IT 自动化运维的能力,简化企业的 DevOps 工作流。

CNCF公众号:让容器通信变得简单:深度解析 containerd 中的 CNI 插件

引用链接

[1]https://www.tigera.io/project-calico/: https://www.tigera.io/project-calico/

[2]https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md: https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md

[3]https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md: https://www.bookstack.cn/read/feiskyer-kubernetes-handbook-202005/network-cni-cni.md

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Memcached介绍与使用

引言 本文是笔者对Memcached这个高性能分布式缓存组件的实践案例,Memcached是一种高性能的分布式内存对象缓存系统,用于减轻数据库负载,加速动态Web应用,提高网站访问速度。它通过在内存中缓存数据和对象来减少读取数据库的次数&…

IAR嵌入式开发解决方案已全面支持芯科集成CX3288系列车规RISC-V MCU,共同推动汽车高品质应用的安全开发

中国上海,2024年7月16日 — 全球领先的嵌入式系统开发软件解决方案供应商IAR与芯科集成电路(以下简称“芯科集成”)联合宣布,最新版本IAR Embedded Workbench for RISC-V 3.30.2功能安全版已全面支持芯科集成CX3288系列车规RISC-V…

解决vue多层弹框时存在遮挡问题

本文给大家介绍vue多层弹框时存在遮挡问题,解决思路首先想到的是找到对应的遮挡层的css标签,然后修改z-index值,但是本思路只能解决首次问题,再次打开还会存在相同的问题,故该思路错误,下面给大家带来一种正…

中间件的理解

内容来源于学习网站整理。【一看就会】什么是前端开发的中间件?_哔哩哔哩_bilibili 每日八股文~白话说mq,消息中间件_哔哩哔哩_bilibili 例如: 1)两个人打电话,中间的通信网络就是中间件。 2)菜鸟驿站&…

流式数据库 |RisingWave 的架构、容错、数据持久化

在上一篇文章中,已经为大家分享了 RisingWave 相关核心概念和术语。本文将在此基础上为大家介绍 RisingWave 的架构、容错以及数据持久化。 1. 架构 RisingWave 的架构如下图所示。它由三个主要部分组成:Meta 节点、Compute 节点和 Compactor 节点。 …

linux环境安装mongoDB

一、安装单体mogodb 目标:在Linux中部署一个单机的MongoDB,作为生产环境下使用。 提示:和Windows下操作差不多。 步骤如下: (1)先到官网下载压缩包 mongod-linux-x86_64-4.0.10.tgz 。 (2&…

SpringBoot Bean管理

我们知道可以通过Spring当中提供的注解Component以及它的三个衍生注解(Controller、Service、Repository)来声明IOC容器中的bean对象,同时我们也学习了如何为应用程序注入运行时所需要依赖的bean对象,也就是依赖注入DI。 本篇主要…

c++初阶知识——内存管理与c语言内存管理对比

目录 前言: 1.c++内存管理方式 1.1 new和delete操作自定义类型 2.operator new与operator delete函数 2.1 operator new与operator delete函数 3.new和delete的实现原理 3.1 内置类型 3.2 自定义类型 new的原理 delete的原理 new…

gite+picgo+typora打造个人免费笔记软件

文章目录 1️⃣个人笔记软件2️⃣ 配置教程2.1 使用软件2.2 node 环境配置2.3 软件安装2.4 gite仓库设置2.5 配置picgo2.6 测试检验2.7 github教程 🎡 完结撒花 1️⃣个人笔记软件 最近换了环境,没有之前的生产环境舒适,写笔记也没有劲头&…

图——图的遍历(DFS与BFS算法详解)

前面的文章中我们学习了图的基本概念和存储结构,大家可以通过下面的链接学习: 图的定义和基本术语 图的类型定义和存储结构 这篇文章就来学习一下图的重要章节——图的遍历。 目录 一,图的遍历定义: 二,深度优先…

【代码随想录】【算法训练营】【第58天 2】 [卡码102]沉没孤岛

前言 思路及算法思维,指路 代码随想录。 题目来自 卡码网。 day 58,周四,ding~ 题目详情 [卡码102] 沉没孤岛 题目描述 卡码102 沉没孤岛 解题思路 前提:修改孤岛的值 思路:DFS or BFS,使用visite…

探寻大模型回答9.9和9.11犯错的根本原因

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

每日OJ_牛客_排序子序列

目录 牛客_排序子序列 题解及代码 牛客_排序子序列 排序子序列_牛客笔试题_牛客网 题解及代码 本题依次比较整个数组 v[i1]>v[i] &#xff0c;则进入非递减序列判断&#xff0c;直到遍历到下一个值不大于等于为止count&#xff0c;然后进行下一位置的判断v[i1]<v[i]…

算法之判断对称二叉树

94. 二叉树的中序遍历101. 对称二叉树 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 示例 1&#xff1a; 输入&#xff1a;root [1,2,2,3,4,4,3] 输出&#xff1a;true示例 2&#xff1a; 输入&#xff1a;root [1,2,2,null,3,null,3] 输出&#xff1a;fa…

特斯拉新一代人形机器人Optimus二代:听说行走速度能够提升30%?

在当今这个快速变化的时代&#xff0c;人工智能已成为我们探索未来的一大驱动力。特斯拉以其在电动汽车领域的创新而闻名&#xff0c;而Optimus智能机器人的发布&#xff0c;更是将这种创新精神带到了一个新的领域 1. 智能机器人&#xff1a;Optimus的起源 2021年8月&#xff…

虚拟摄像头怎么用?安卓虚拟相机替换本地摄像头教程(内含3个虚拟摄像头)

虚拟摄像头是一个软件摄像机&#xff0c;电脑没有物理摄像头时可以借助虚拟摄像头进行视频通话。当我们电脑没有自带的摄像头时&#xff0c;必须要外接摄像头才可以进行网络会议、视频直播。普通的摄像头像素不高&#xff0c;直接将手机充当电脑摄像头效果更佳哦。 虚拟摄像头我…

自动驾驶算法——Vehicle Control(一)

“ 在过去的几年里&#xff0c;无人驾驶汽车已成为人工智能领域的主要主力之一。鉴于交通死亡人数众多、老年人和残疾人的行动能力有限以及交通拥堵和拥堵问题日益严重&#xff0c;自动驾驶汽车有望解决我们社会最重要的问题之一&#xff1a;移动的未来。然而&#xff0c;让汽车…

数学建模(1)

论文&#xff1a;做流程图 论文查重不能高于30% 论文 分模块备战 摘要不能超过一页的四分之三 数学建模的六个步骤: 【写作】---学术语言 团队练题

科普文:TaobaoVM信息收集

网上关于TaobaoVM的信息很少&#xff0c;只有一个简介&#xff0c;就没有其他信息。毕竟这是别人企业自己的jvm&#xff0c;不可能公开。 Taobao VM 由AliJVM团队发布。阿里&#xff0c;国内使用Java最强大的公司&#xff0c;覆盖云计算、金融、物流、电商等众多领域&#xf…

zabbix“专家坐诊”第246期问答

问题一 Q&#xff1a;有哪位大哥知道这是啥情况&#xff0c;6.4主动检查接口显示未知&#xff1f; A&#xff1a;看看agent配置文件的主采集有没有填写正确IP。 Q&#xff1a;我刚刚客户端重新授权&#xff0c;发现可以预警了&#xff0c;但是还是灰色的&#xff0c;我尝试输…