浅析Flannel模式VXLAN与Host-GW

VXLAN

vxlan,即Virtual Extensible LAN(虚拟可扩展局域网),是Linux内核本身就支持的一种网络虚拟化技术。
所以说,VXLAN完全可以在内核态实现封装和解封装的工作,构建出覆盖网络(Overlay Network)。

点对点通信
  • VTEP:VXLAN网络的边缘设备,用来进行VXLAN报文的处理。
  • VNI:VNI是每个VXLAN的标识。
#node1
ip link add vxlan20 type vxlan id 20 remote 192.168.188.9 dstport 4789 dev ens33
ip link set vxlan20 up
ip addr add 10.0.136.11/24 dev vxlan20
#node2
ip link add vxlan20 type vxlan id 20 remote 192.168.188.8 dstport 4789 dev ens33
ip link set vxlan20 up
ip addr add 10.0.136.12/24 dev vxlan20
route -n
跨主机容器网络的通信
#node1
docker network create --subnet 172.18.0.0/16 hapacc
docker run -d -name test --net hapacc --ip 172.18.0.2 nginx:alpine
brctl show
ip link add vxlan_docker type vxlan id 100 remote 192.168.188.9 dstport 4789 dev ens33
ip link set vxlan_docker up
brctl addif br-904603a77yhs vxlan_docker #接入网桥
K8S不同节点POD网络通信
  • POD中产生数据,根据POD的路由信息,将数据发送到Cni0
  • Cni0 根据节点的路由表,将数据发送到隧道设备Flannel.1
  • Flannel.1查看数据包的目的ip,从flanneld获得对端隧道设备的必要信息,封装数据包。
  • Flannel.1将数据包发送到对端设备。对端节点的网卡接收到数据包,发现数据包为overlay数据包,解开外层封装,并发送内层封装到Flannel.1设备。
  • Flannel.1设备查看数据包,根据路由表匹配,将数据发送给Cni0设备。
  • Cni0匹配路由表,发送数据给网桥上对应的端口。

Host-GW

集群节点必须在同一二层网络

sed -i 's/vxlan/host-gw'  /etc/kube-flannel/net-conf.json

发表评论