flannel框架
提供容器网络功能的,是 Flannel 的后端实现
后端支持三种网络实现
1 UDP
2 vxlan
3 host-gw
一 udp模式
flannel设备
linux 上是一个tunnel设备 工作在三层的虚拟网络设备
功能 就是 操作系统内核 与用户应用程序之间传递 ip包
flannel设备 子网的概念
docker0 网桥的地址范围必须是 Flannel 为宿主机分配的子网
子网与宿主机ip 的关系 保存在etcd当中
$ etcdctl ls /coreos.com/network/subnets
/coreos.com/network/subnets/100.96.1.0-24
/coreos.com/network/subnets/100.96.2.0-24
/coreos.com/network/subnets/100.96.3.0-24
$ etcdctl get /coreos.com/network/subnets/100.96.2.0-24
{"PublicIP":"10.168.0.3"}
场景
宿主机 Node 1 上有一个容器 container-1,它的 IP 地址是 100.96.1.2,对应的 docker0 网桥的地址是:100.96.1.1/24。
宿主机Node2 上有一个容器 container-2 ip 地址是 100.96.2.3对应的 docker0网桥的地址是:100.96.2.1/24。
image.png任务让 container-1 访问 container-2。
container-1 发起ip包 源地址是100.96.1.2 目的地址100.96.2.3
node1发送时期:
在node1上的路由表规则只有flannel设备路由规则可以匹配到这个100.96.2.3
从而进入到flannel设备, flanneld 进程在处理由 flannel0 传入的 IP 包时 根据etcd存储的子网范围 与node ip之间的关系 获取到node2的ip地址 ,因为每台node 都会起一个flannel进程 端口为8285,所以 flanneld只要把udp 包发送给
node2的flannel进程即可.
node2接收时期:
node2上flannel进程接收到udp包之后传递ip包给flannel0设备 flannel0根据里面的ip包的源地址 100.96.2.3 根据node2上路由表规则进行匹配 从而进入到docker0. 之后的流程就是容器的通信过成了。
UDP方式的缺点
1 通信的ip包总是要从flannel0设备 与flannel进程之间传递, 从内核态到用户态
三次切换数据拷贝
第一次,用户态的容器进程发出的 IP 包经过 docker0 网桥进入内核态;
第二次,IP 包根据路由表进入 TUN(flannel0)设备,从而回到用户态的 flanneld 进程;
第三次,flanneld 进行 UDP 封包之后重新进入内核态,将 UDP 包通过宿主机的 eth0 发出去。
二 vxlan模式
vxlan概念
VXLAN virtual extensible lan 虚拟可扩展局域网
目的
image.png在内核态封装完成 udp模式中的对ip包的封装和解封装操作
场景
node1 container-1 访问 container-2
node2 加入集群之后
1: 会在node1 生成路由规则凡是发往 10.1.16.0/24 网段的 IP 包,都需要经过 flannel.1 设备发出,并且,它最后被发往的网关地址是:10.1.16.0。
2: 找出目的vtep设备mac地址 ,要用到的 ARP 记录也是 flanneld 进程在 Node2节点启动时,自动添加在 Node 1 上的
3: flannel.1“网桥”对应的 FDB 信息,也是 flanneld 进程负责维护的
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
...
10.1.16.0 10.1.16.0 255.255.255.0 UG 0 0 0 flannel.1
# 在Node 1上
$ ip neigh show dev flannel.1
10.1.16.0 lladdr 5e:f8:4f:00:e3:37 PERMANENT
# 在Node 1上,使用“目的VTEP设备”的MAC地址进行查询
$ bridge fdb show flannel.1 | grep 5e:f8:4f:00:e3:37
5e:f8:4f:00:e3:37 dev flannel.1 dst 10.168.0.3 self permanent
接下来的流程,就是一个正常的、宿主机网络上的封包工作。
网友评论