首页 > 其他分享 >CNI

CNI

时间:2024-08-26 11:07:15浏览次数:8  
标签:容器 插件 Plugin 网络 CNI cni

CNI 网络模型

Container Network Interface,CNI 提供了一种应用容器插件化网络解决方案,定义对容器网络进行操作和配置的规范,通过插件(plugin)的形式对CNI接口进行实现,CNI 仅仅关注在容器创建时分配网络资源及在销毁容器时删除网络资源。

CNI 模型中只涉及两个概念:

  • 容器(Container) :容器是拥有独立Linux网络命名空间的环境,如使用Docker或rkt创建的容器。
  • 网络(Network):网络表示可以互连的实体,这些实体拥有各自独立,唯一的IP地址。这些实体可以是容器,物理机或者其他网络设备。

对容器网络的设置和操作都通过插件(Plugin)进行具体实现,CNI插件包括两种类型:

  • CNI Plugin :负责为容器配置网络资源,它包括两个基本的接口:
  1. 配置网络: AddNetwork(net NetworkConfig, rt RuntimeConf) (types.Result, error)
  2. 清理网络: DelNetwork(net NetworkConfig, rt RuntimeConf) error
  • IPAM Plugin(IP Address Management) :负责对容器的IP地址进行分配 ,作为CNI Plugin的一部分与 CNI Plugin 一起工作,为了减轻CNI Plugin 对IP地址管理的负担,CNI规范中设置了一个新的插件,专门用于管理容器的IP地址(还包括网关、路由等信息)被称为IPAM Plugin,典型的实现有host-local和dhcp。通常由CNI Plugin在运行时自动调用 IPAM Plugin 完成IP地址、网关、路由、DNS的分配。IPAM 类似 CNI Plugin 也可以通过可执行程序完成IP地址分配,处理传递给CNI的环境变量和通过标准输入(stdin)传入网络配置参数,如果完成了容器IP地址的分配,IPAM通过标准输出(stdout)返回含有具体信息的json报文。

cni插件的使用方式

kubernetes配置了cni网络插件后,其容器网络创建流程为:

  • kubelet先创建pause容器生成对应的network namespace
  • 调用网络driver,因为配置的是CNI,所以会调用CNI相关代码,识别CNI的配置目录为/etc/cni/net.d
  • CNI driver根据配置调用具体的CNI插件,二进制调用,可执行文件目录为/opt/cni/bin,项目
  • CNI插件给pause容器配置正确的网络,pod中其他的容器都是用pause的网络

可以在此查看社区中的CNI实现,https://github.com/containernetworking/cni

使用CNI插件时,需要做三个配置:

  1. kubelet启动参数中networkPlugin设置为cni
    image

  2. 在/etc/cni/net.d中增加cni的配置文件,配置文件中可以指定需要使用的cni组件及参数
    image

  3. 将需要用到的cni组件(二进制可执行文件)放到/opt/cni/bin目录下
    image

Flannel网络模型实现剖析

标签:容器,插件,Plugin,网络,CNI,cni
From: https://www.cnblogs.com/LI-XinYu/p/17377669.html

相关文章

  • 二进制部署k8s集群之cni网络插件flannel和calico工作原理(中)
    目录1.k8s的三种网络模式2.flannel网络插件3.部署CNI网络组件4.Calico介绍1.k8s的三种网络模式k8s集群中pod网络通信分类1、pod内容器之间的通信在同一个Pod内的容器(Pod内的容器是不会跨宿主机的)共享同一个网络命令空间,相当于它们在同一台机器上一样,可以用loc......
  • 在K8S中,calico和cilium这两种cni有什么区别?cailico的ipip模型和ciliume的vxlan模型,两
    在Kubernetes(K8S)中,Calico和Cilium是两种流行的容器网络接口(CNI)插件,它们各自具有独特的特点和优势。下面将详细比较这两种CNI插件,并探讨Calico的IPIP模型和Cilium的VXLAN模型在数据处理上的差异。1.Calico与Cilium的区别CalicoCilium基础架构基于BGP的纯三层网络方案......
  • 在K8S中,优先优选哪个CNI插件?为何使用该插件?
    在Kubernetes(K8s)中,选择哪个CNI(ContainerNetworkInterface)插件并没有绝对的“最优”选择,因为不同的插件适用于不同的场景和需求。以下是一些常见的CNI插件及其特点,以及选择它们时可能考虑的因素:1.Flannel特点:最常用的K8s网络插件之一。使用虚拟网络技术(如VXLAN、UDP和Host-......
  • 在K8S中,什么是CNI?平时K8s集群常用什么网络插件?
    1.什么是CNI?CNI(ContainerNetworkInterface)是容器网络接口,它是一种标准的设计,旨在简化容器网络配置的过程。CNI允许容器在创建或销毁时动态地配置网络。CNI插件负责为容器配置和管理IP地址,并提供与IP管理、每个容器的IP分配以及多主机连接相关的功能。CNI的主要作用是......
  • P2853 [USACO06DEC] Cow Picnic S
    简单的一道深搜:思路:让每个有奶牛的农场沿着道路跑下去,跑到的农场加上root地方的奶牛数量,最后统计能有k头奶牛的农场数量就是答案代码:#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<string.h>#inclu......
  • kube-ovn中ovn-cni如何访问ovs
    ovs-ovnpod把ovs的db.sock暴露在宿主机上。ovn-cnipod挂载该目录到容器中。ovsdbsocket默认路径就在/run/openvswitch/db.sock。#拷贝ovn-cnipod中ovs-vsctl到pod所在宿主机上kubectlcp-nkube-system-ccni-serverkube-ovn-cni-2hrsn:usr/bin/ovs-vsctlovs-vsc......
  • kube-ovn cni处理流程
    kubelet调用二进制文件/opt/cni/bin/kube-ovn。cmd/cni/cni.go创建和删除分别对应cmdAdd和cmdDel函数。pkg/request/cniserver.go二进制文件/opt/cni/bin/kube-ovn调用本地unixsocket,把cni请求转发给kubeovncnidaemon。pkg/daemon/server.goRunServer函数监听本地unixsock......
  • cni
    网络配置格式graphLRA[配置格式]A1[cniVersion]A2[name]A3[plugins]A4[disableCheck]A-->A1A-->A2A-->A3A-->|大多数cni中没有配置这块|A4A31(type)A32(capabilities)A33(bridge)A34(ipam)A35(dns)A3-.->A31A3-.->A32A3-.->A33A3-.->......
  • kubernetes CNI(Container Network Inferface)
    为什么需要CNI在kubernetes中,pod的网络是使用networknamespace隔离的,但是我们有时又需要互相访问网络,这就需要一个网络插件来实现pod之间的网络通信。CNI就是为了解决这个问题而诞生的。CNI是containernetworkinterface的缩写,它是一个规范,定义了容器运行时如何配......
  • 【云原生篇】深入理解K8S CNI、CRI 和 CSI
    在Kubernetes(K8s)生态系统中,CNI、CRI和CSI是三个关键的接口,它们分别代表ContainerNetworkInterface、ContainerRuntimeInterface和ContainerStorageInterface。这些接口定义了Kubernetes如何与网络、容器运行时和存储系统进行交互,使得Kubernetes能够与......