CNI 网络分析 3.3 Flannel vxlan

本文详细介绍了Flannel使用vxlan作为backend的实现原理,包括vxlan设备的配置,节点间路由信息,以及不同场景下的流量路径,如同节点Pod间通信、跨节点Pod通信和服务访问等。此外,还提到了vxlan的默认端口和VNI设置。
摘要由CSDN通过智能技术生成

Flannel vxlan

与 host-gw 对比,可以看出各个节点上 路由信息有所不同
指向其他节点网段的路由 10.244.1.0/24 via 192.168.100.112 dev ens10 变成 10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink

在这里插入图片描述

Flannel vxlan backend

接 Flannel 介绍中原理章节

  1. 使用 backendManager 去注册网络时,使用 vxlan 的实现
  2. 在节点上创建 vxlan 设备,vni = 1,name = flannel.1,vtepPort = 0,vtepIndex = ens10 的 index,vtepAddr = ens10 的 ip
# ip -d link  show flannel.1
12: flannel.1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1450 qdisc noqueue state UNKNOWN mode DEFAULT group default 
    link/ether 7e:6c:7d:fa:00:b0 brd ff:ff:ff:ff:ff:ff promiscuity 0 minmtu 68 maxmtu 65535 
    vxlan id 1 local 192.168.100.111 dev ens10 srcport 0 0 dstport 8472 nolearning ttl auto ageing 300 udpcsum noudp6zerocsumtx noudp6zerocsumrx addrgenmode eui64 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 gro_max_size 65536
  1. AcquireLease 去申请 subnet,k8s-api 的模式下,通过 Annotation 去分析;
metadata:
  annotations:
    flannel.alpha.coreos.com/backend-data: '{"VNI":1,"VtepMAC":"7e:6c:7d:fa:00:b0"}'
    flannel.alpha.coreos.com/backend-type: vxlan
    flannel.alpha.coreos.com/kube-subnet-manager: "true"
    flannel.alpha.coreos.com/public-ip: 192.168.100.111
  1. 配置 flannel.0 ip,通过分到的网段加 32 位掩码 如:10.244.0.0/32,写 32 位掩码是不要创建 广播路由

在 Flannel 启动后
接 Flannel 介绍中原理章节
当新增 node 时,配置本节点路由信息,其他 node 的 subnet 指向对端的 flannel.0 ip,通过本节点 flannel.0;

流量分析

同 node 不同 pod 之间

pod1 <-> pod2
和 host-gw 场景相同,通过 cni0 转发

不同 node 上 pod 之间

pod1 <-> pod3
在 pod1 和 pod3 抓包是实际报文

21:33:28.347401 ae:a4:10:a2:01:d7 > e6:9c:fa:e2:8e:20, ethertype IPv4 (0x0800), length 98: 10.244.0.7 > 10.244.1.20: ICMP echo request, id 48047, seq 7, length 64
21:33:28.352291 e6:9c:fa:e2:8e:20 > ae:a4:10:a2:01:d7, ethertype IPv4 (0x0800), length 98: 10.244.1.20 > 10.244.0.7: ICMP echo reply, id 48047, seq 7, length 64

在 业务网卡抓包 ens10,是 vxlan 报文
在这里插入图片描述

Node 到本 node 上的 pod

和 host-gw 场景相同,通过 cni0 转发

Node 到其他 node 上的 pod

在业务网卡抓包,内部报文 srcIP 为 flannel.0 ip,根据路由 ==10.244.1.0/24 via 10.244.1.0 dev flannel.1 onlink ==,外层报文即 两个 endpoint 信息。
在这里插入图片描述

Pod 访问 service clusterIP

和 host-gw 场景相同

Node 访问 service clusterIP

Pod 在当前节点的情况 和 host-gw 一样
Pod 在非当前节点的在 业务网卡抓到 vxlan 报文
在这里插入图片描述

外部访问 service NodePort,且 backend pod 在当前节点

和 host-gw 场景相同

外部访问 service NodePort,且 backend pod 不在当前节点

在 业务网卡抓包,根据路由组成业务报文,然后 vxlan 封装
在这里插入图片描述

总结

将 vxlan 和 host-gw 进行比对,可以看到跨节点的业务报文会被 vxlan 封装,默认端口 8472,vni ID 为 1。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值