kubernetes学习笔记5:cni
cni是容器网络的API接口,它是k8s中一个调用网络实现的接口,通过这个API调用不同的网络插件,包括calico,flannel,terway,weaver以及contiv。
k8s通过配置文件决定使用什么样的cni:首先在每个节点上配置cni配置文件(/etc/cni/net.d/xxnet.conf),其中xxnet.conf是某一个网络配置文件的名称,然后安装cni配置文件中对应的二进制插件(/opt/cni/bin/xxnet),安装完成之后,在这个节点上创建pod,创建完成之后,kubelet会根据cni配置文件执行cni插件,自此pod网络配置就好了。
但是用户安装插件很简单使用kubelet apply flannel的一个template模板,它就能自动将配置,二进制文件安装到每一个节点上去。
cni插件有overlay(靠隧道打通,不依赖底层网络,它独立于主机的IP段,这个IP段跨主机网络通信时,在主机之间建立隧道,将整个容器网段的包全部封装成底层的物理网络主机中的包),路由(主机和容器分属不同的网段,它跨主机通信通过路由打通 但是路由打通需要部分依赖底层网络,要去底层网络有二层l2可达能力)和underlay(主机跟容器同属一个网络,容器打通主要依赖底层网络,属于强依赖)。
选择什么cni插件按照环境限制(虚拟化环境比如openstack网络限制多,不允许二层l2协议访问,必须带IP地址的三层l3做转发,使用overlay,有插件flannel-vxlan,calico-ipip,weave。
物理机环境底层网络限制少,可以二层l2通信,可以选择underlay和路由插件,使用underlay时在物理机上插多个网卡或者在网卡上最硬件虚拟化,使用路由时依赖Linux路由协议打通,避免了vxlan,这种环境有插件clico-bgp,flannel-hostgw,stiov等。公有云环境也是虚拟化,底层限制多,选择公有云厂商提供的插件。),功能需求(安全考虑k8s支持network policy,其次是否需要集群外资源与集群内资源互联互通,可以选择underlay,最后考虑k8s负载均衡和服务发现的能力,这两种能力不是所有插件都支持),性能需求(第一个就是创建pod速度,overlay和路由快,因为它在机器里面做虚拟化,所有只有调用内核接口就可以,但是underlay要创建底层网络资源,第二个就是pod网络性能,overlay差,因为它在节点上做虚拟化,还要去封包,其他两个较好)。
开发自己的cni插件包含两部分:实现一个二进制cni插件,并配置pod网卡和IP地址,相当于给pod插上网线,然后daemon进程去管理pod之间的网络打通,相当于给pod连上网络,让pod之间能够互相通信。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?