Flannel是kubernetes的网络插件之一,通过构建k8s集群节点之间的overlay网络,实现跨节点通信等功能。flannel常用的网络转发模式有hostgw、udp、vxlan等,在实际生产中常用的是vxlan模式。
子网划分
k8s会为每个集群节点划分子网,这样pod调度到某节点时,就会按照该节点的子网网段分配ip,保障pod ip的集群唯一性。
我们可以查看/run/flannel/subnet.env 文件,里面主要包括当前节点的子网信息。例如本机集群192.168.249.10节点子网网段是10.244.0.0/24,192.168.249.12节点子网网段是10.244.1.0/24

Flannel通过daemonset的方式在每个k8s节点上运行了一个flanneld的服务,通过flanneld进程对节点进行创建隧道,添加路由信息,修改iptables等操作。
跨节点Pod通信
我们以vxlan模式为例看一下flannel如何实现的pod间的通信。
Flannel创建名为flannel.1的vxlan设备(nolearning),设备ip是子网的第一个IP 10.244.1.0,并把设备的mac和ip和本节点的ip记录到etcd中。还会创建名为cni0的网桥,网桥的ip是子网的第二个ip 10.244.1.1,起到docker0网桥的作用。

本文介绍了Kubernetes网络插件flannel的工作原理,包括子网划分、跨节点与同节点Pod通信,以及UDP与Host-gw模式。flannel通过创建overlay网络实现跨节点通信,主要使用vxlan模式。在vxlan模式中,flannel创建vxlan设备和网桥,通过etcd协调节点间通信;而在Host-gw模式下,所有节点需在同二层网络,直接使用宿主机IP通信。
最低0.47元/天 解锁文章
5298

被折叠的 条评论
为什么被折叠?



