写点什么

39 K8S 之 Flannel 网络插件

  • 2021 年 12 月 09 日
  • 本文字数:1439 字

    阅读完需:约 5 分钟

39 K8S之Flannel网络插件

Flannel 是用于解决容器跨节点通信问题的解决方案,兼容 CNI 插件 API,支持 Kubernetes、OpenShift、Cloud Foundry、Mesos、Amazon ECS、Singularity 和 OpenSVC 等平台。它使用“虚拟网桥和 veth 设备”的方式为 Pod 创建虚拟网络接口,通过可配置的“后端”定义 Pod 间的通信网络,支持基于 VXLAN 和 UDP 的 Overlay 网络,以及基于三层路由的 Underlay 网络


Flannel 在每个主机上运行一个名为 flanneld 的二进制代理程序,它负责从预留的网络中按照指定或默认的掩码长度为当前节点申请分配一个子网,并将网络配置、已分配的子网和辅助数据(例如主机的公网 IP 等)存储在 Kubernetes API 或 etcd 之中。Flannel 使用称为后端的容器网络机制转发跨节点的 Pod 报文。


vxlan:使用 Linux 内核中的 vxlan 模块封装隧道报文,以 Overlay 网络模型支持跨节点的 Pod 间互联互通;同时,该后端类型支持直接路由模式,在该模式下,位于同一二层网络内节点之上的 Pod 间通信可通过路由模式直接发送,而跨网络的节点之上的 Pod 间通信仍要使用 VXLAN 隧道协议转发;VXLAN 隶属于 Overlay 网络模型,或混合网络模型;vxlan 后端模式中,flanneld 监听 UDP 的 8472 端口发送的封装数据包


host-gw:即 Host GateWay,它类似于 VXLAN 中的直接路由模式,但不支持跨网络的节点,因此这种方式强制要求各节点本身必须在同一个二层网络中,不太适用于较大的网络规模;host-gw 有着较好的转发性能,且易于设定,推荐对报文转发性能要求较高的场景使用


udp:使用常规 UDP 报文封装完成隧道转发,性能较前两种方式低很多,它仅在不支持前两种后端的环境中使用;UDP 后端模式中,flanneld 监听 UDP 的 8285 端口发送的封装报文


Flannel 使用 etcd 来存储虚拟 IP 和主机 IP 之间的映射,每个节点上运行的 flanneld 守护进程负责监视 etcd 中的信息并完成报文路由。默认情况下,Flannel 的配置信息保存在 etcd 存储系统的键名/coreos.com/network/config 之下,我们可以使用 etcd 服务的客户端工具来设定或修改其可用的相关配置。config 的值是一个 JSON 格式的字典数据结构


Flannel 会在集群中每个运行 flanneld 的节点之上创建一个名为 flannel.1 的虚拟网桥作为本节点隧道出入口的 VTEP 设备,其中的 1 表示 VNI,因而所有节点上的 VTEP 均属于同一 VXLAN,或者属于同一个大二层域(BD),它们依赖于二层网关进行通信。Flannel 采用了分布式的网关模型,它把每个节点都视为到达该节点 Pod 子网的二层网关,相应的路由信息由 flanneld 自动生成。


Flannel VXLAN 后端

Flannel 并非依赖 ARP 进行 MAC 地址学习,而是由节点上的 flanneld 进程启动时将本地 flannel.1 接口 IP 与 MAC 地址的映射信息上报到 etcd 中,并由其他各节点上的 flanneld 来动态生成相应的解析记录


VXLAN 协议报文

Flannel 把 flannel.1 接口也作为网桥设备使用,该设备上附加了一个同样由 flanneld 维护的、称为 FDB(Forwarding Database)的转发数据库。该数据库指明了到达目标节点 flannel.1 接口需要经由的下一跳 IP,该 IP 是目标 Pod 所在节点的 IP 地址,即外部 IP 头部中的目标 IP


为了提升性能,Flannel 的 VXLAN 后端还支持 DirectRouting 模式,即在集群中的各节点上添加必要的路由信息,让 Pod 间的 IP 报文通过节点的二层网络直接传送。若 Kubernetes 集群节点全部位于单个二层网络中,则 DirectRouting 模式下的 Pod 间通信流量基本接近于直接使用二层网络


Flannel 的 host-gw 后端通过添加必要的路由信息,并使用节点的二层网络直接发送 Pod 间的通信报文,其工作方式类似于 VXLAN 后端中的直接路由功能,但不包括该后端支持的隧道转发能力,这意味着 host-gw 后端要求各节点必须位于同一个二层网络中


发布于: 5 小时前阅读数: 9
用户头像

InfoQ签约作者 2018.11.30 加入

热爱生活,收藏美好,专注技术,持续成长

评论

发布
暂无评论
39 K8S之Flannel网络插件