1、介绍
Flannel 是一个轻量级、易于配置的网络插件,旨在简化 Kubernetes 集群中 Pod 网络的管理。Flannel 的核心功能是提供一个虚拟的网络,允许每个 Pod 获取一个独立的 IP 地址,并实现不同节点间的 Pod 之间的通信
2、网络模式
-
vxlan(默认):基于 VXLAN(Virtual Extensible LAN)隧道协议,通过隧道将不同主机上的 Pod 网络连接起来。适合大部分场景,特别是在跨节点的环境下。
-
host-gw:这种模式依赖于主机间的路由表,而不需要额外的隧道。它适合于节点之间有直通路由的环境,例如同一数据中心内的节点。
特性 | vxlan(默认) | host-gw |
---|---|---|
原理 | 基于 VXLAN 隧道协议,将 Pod 流量封装在 VXLAN 数据包内,跨节点传输数据 | 利用节点的路由表,通过主机间的直接路由进行通信 |
优点 | 1、支持跨数据中心部署。 2、 网络封装灵活 | 1、性能高,无需额外开销 2、维护简单 |
缺点 | 1、性能开销较大,特别是对于大规模集群 2、配置和故障排查较复杂 | 不适用于复杂网络环境或跨数据中心部署 |
适用场景 | 跨数据中心或不同网络环境的集群,适用于没有直接路由的网络。 | 节点间网络有直接路由的环境(例如同一数据中心内) |
3、原理详细
3.1 vxlan
发送端:节点上的pod通过虚拟网卡,连接到cni0的虚拟网桥上,然后cni0后交由 flannel.1 设备处理,进行VXLAN封包解包,然后从 eth0 发送。
接收端:Node2收到报文后,发现是一个VXLAN类型报文,交由 flannel.1 进行解包。根据解包后得到的原始报文中的目的IP,将原始报文经由 cni0 网桥发送给目标Pod。
3.2 host-gw
1、节点上的pod通过虚拟网卡,连接到cni0的虚拟网桥上。
2、pod向外通信的时候,到达cni0的时候,不再直接交给flannel.1由flanneld来进行打包处理了,而是直接借助于内核中的路由表,通过宿主机的网卡交给其他主机节点
3、对端节点查看内核中的路由表,发现目标就是当前节点,所以交给对应的cni0,进而找到对应的pod