
回复
Flannel 同节点通信利用了 veth pair 对的形式,一端连接到 pod,一端连接到宿主机的网卡,同时作为宿主机 cni0 网卡的的接口,使得同节点的通信,直接是二层互通。
和 calico vxlan 不一样的是,pod 对应的网口并没有使用 proxy-arp 的特性,所以就和传统的二层交换,三层路由一样,理解起来更为简单。
在集群中运行 pod ,查看在 node1 上的 pod
pod1 10.244.1.2
pod2 10.244.1.3
我们可以见到 pod 对应的 veth 网卡会有 master cni0 选项,这个意思是 cni0 的桥接网卡的接口。
通过查看 cni0 网卡接口信息,确定 pod 对端的 veth pair 网卡是在 cni0 上的接口
通过查看 node1 的路由,我们可以看到 10.244.1.0 指向了 cni0 网卡,所以可以确认,同节点的通信经过的都是 cni0 网桥,而两端的接口分别指向了两个 pod 的对端的 MAC 地址。
针对同节点通信,我们通过抓包演示
针对 pod eth0 网卡以及对应 veth 网卡,还有 cni0 进行抓包