分flanneld和flannel cni兩部分
flanneld在k8s每個(gè)node上都運(yùn)行一份
啟動(dòng)時(shí)創(chuàng)建本機(jī)的vxlan設(shè)備

負(fù)責(zé)監(jiān)聽k8s的node變化 并設(shè)置到其他node的路由。

flannel cni是個(gè)可執(zhí)行文件,k8s配置好使用flannel,當(dāng)k8s創(chuàng)建pod時(shí)就會(huì)調(diào)用flannel cni,flannel cni只是把配置翻譯一下傳給bridge cni。
bridge cni一樣是個(gè)可執(zhí)行文件,他主要工作是創(chuàng)建容器eth,并掛載cni0上,還可以設(shè)置容器網(wǎng)絡(luò)空間的路由等功能,在flannel場(chǎng)景下,這些配置信息都來(lái)之flannel cni。
flanneld和flannel cni的分工不同,一個(gè)負(fù)責(zé)node之間的通信,一個(gè)負(fù)責(zé)容器在node內(nèi)的通信(包括容器間和到vxlan設(shè)備的通信)。
或者按動(dòng)態(tài)和靜態(tài)的配置分也行,cni plugin負(fù)責(zé)靜態(tài)配置,flanneld則需要監(jiān)聽配置變化,實(shí)現(xiàn)動(dòng)態(tài)配置。
其余的k8s網(wǎng)絡(luò)實(shí)現(xiàn)也是這么分工的,分cni plugin和node上運(yùn)行的daemon,復(fù)雜點(diǎn)的自己再搞一套中控,配置些網(wǎng)絡(luò)層面的功能,flannel的配置都是來(lái)自k8s,沒(méi)有自己的中控。