Flannel VXLAN 模式

背景 Flannel 是专为 Kubernetes 设计的一种用于容器的网络结构插件,用于在 Kubernetes 集群中构建 3 层网络,实现跨宿主机 Pod 之间在 3 层网络相互通信。 Flannel 支持的三种模式: UDP:通过 TUN + 用户空间 Flannel 进程实现,由于存在多次用户空间和内核空间之间的 COPY,性能比较差,基本不再使用。 HOST-GW:纯三层解决方案,把 HOST 作为网关,需要宿主机二层互通,性能比较好,但是存在一定局限。 VXLAN:在 VLAN 基础上进行扩展,通过构建 Tunnel 实现二层互通。 名词 VXLAN(Virtual Extensible LAN 虚拟可扩展局域网) VTEP(VXLAN Tunnel Endpoints,VXLAN 隧道端点) VNI(VXLAN Network Identifier,VXLAN 网络标识符) 原理 同 Pod 通信 Pod 内部容器通过 pause 容器共享一个网络。 同 Node 跨 Pod 通过 veth pair 设备和 cni0(docker0) 网桥实现通信。 跨 Node 首先数据包从pod1内的eth0出来到达cni0网桥,cni0网桥接收到数据包后发现目的IP跟自己不在一个网段,那么自然需要转发出去,而Linux Bridge有个特殊规则: 网桥不会将这个数据包转发给任何设备,而是直接转交给主机的三层协议栈进行处理, 因此通过本机的route得知,目的地址为10.224.1.0段的数据包都将转到flannel.1。 [node1]# route -n Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 10....

2022-12-24 · 2 min · 243 words · zhenran