k8s网络插件cni工作原理

k8s网络插件cni工作原理

Posted by lwk on March 7, 2020

本文从kubelet调用cni插件入手,分析cni插件工作原理

首先进入到kubelet的main入口

image

image

image

image

Docker运行时NewDockerService

image

image

image

image

image

image

image

以上主要是CNI获取当前网络环境 接着执行RunDockershim函数 image image

image

image

image

这里可以总结一下 CNI 的第二步就是:kubelet启动时会根据插件名执行对应插件的init函数。

接下来看下cni插件是如何实现的。其实cni插件并没有什么晦涩难懂的地方,都是一个套路:实现cmdAdd、cmdDel等函数的逻辑,也就是实现网络/ip的管理逻辑。

下面我们看下cni plugins中bridge是如何实现add/del的

image

image

image image

image 看下loadNetConf函数 image

NetConf结构如下

image

image 这里的struct结构和上面kubelet里的配置是一样的。

接下来就是对bridge的实操。 image

总结cni插件的执行主要是三部分内容:1、解析配置信息,2、执行具体的网络配置ADD或DEL,3、对于ADD操作还需输出结果