本文从kubelet调用cni插件入手,分析cni插件工作原理
首先进入到kubelet的main入口
Docker运行时NewDockerService
以上主要是CNI获取当前网络环境 接着执行RunDockershim函数
这里可以总结一下 CNI 的第二步就是:kubelet启动时会根据插件名执行对应插件的init函数。
接下来看下cni插件是如何实现的。其实cni插件并没有什么晦涩难懂的地方,都是一个套路:实现cmdAdd、cmdDel等函数的逻辑,也就是实现网络/ip的管理逻辑。
下面我们看下cni plugins中bridge是如何实现add/del的
看下loadNetConf函数
NetConf结构如下
这里的struct结构和上面kubelet里的配置是一样的。
接下来就是对bridge的实操。
总结cni插件的执行主要是三部分内容:1、解析配置信息,2、执行具体的网络配置ADD或DEL,3、对于ADD操作还需输出结果