当前位置: 首页 > article >正文

浅谈网络 | 容器网络之Flannel

目录

    • 云原生网络架构深度解构:Flannel的设计哲学与实现机制
    • Flannel架构解析:三层核心设计原则
      • UDP模式(用户态隧道)
      • VXLAN模式(内核态隧道)
      • Host-GW模式(直连路由)
    • 生产环境架构选型与调优实践
      • 性能维度对比
      • 关键调优参数
    • 超越Flannel:云原生网络演进趋势

云原生网络架构深度解构:Flannel的设计哲学与实现机制

——从Overlay隧道到分布式网络平面的工程实践

云原生网络的核心挑战与范式升级
在传统单体架构向微服务演进的过程中,网络通信模型经历了从"静态配置"到"动态感知"的范式转变。当Kubernetes将容器调度至任意节点时,IP漂移与跨节点通信成为两大核心挑战:

身份漂移困境
如示例中所示,当应用B从物理机A(IP1)迁移至物理机B(IP5)时,传统硬编码IP的调用方式将彻底失效。Kubernetes通过Endpoint与Service抽象层实现服务发现,但其底层依赖容器网络平面实现真实流量的跨节点路由。
在这里插入图片描述

网络隔离悖论
Docker默认的172.17.0.0/16桥接网络在跨主机场景下会导致IP冲突(如物理机A与B的容器均使用172.17.0.2)。Flannel通过集群级子网分配机制,为每个节点划分独立子网(如物理机A:172.17.8.0/24,物理机B:172.17.9.0/24),构建全局唯一的容器IP空间。

Flannel架构解析:三层核心设计原则

Flannel的本质是通过软件定义网络(SDN)构建分布式Overlay,其架构遵循三大设计原则:

  1. 子网动态分配与全局路由同步
    Etcd协同:Flannel通过Etcd集群维护全局子网分配状态,每个节点的flanneld进程启动时从Etcd申请唯一子网段(如/24)。

CNI插件集成:Flannel为各节点配置CNI插件,将子网信息注入容器运行时(如Docker的bip参数),确保容器IP在集群维度唯一。

  1. 数据面隧道封装机制
    Flannel支持多种后端实现,核心差异在于封装协议与性能特征:

UDP模式(用户态隧道)

工作流程:容器A(172.17.8.2)→ docker0 → flannel.1(TUN设备)→ flanneld(UDP封装)→ 物理机B → flanneld(解封装)→ docker0 → 容器B(172.17.9.2)
在这里插入图片描述

性能瓶颈:数据包需多次用户态-内核态切换,吞吐量受限(实测通常<1Gbps)。
第一次:用户态的容器进程发出的 IP 包经过 docker0 网桥进入内核态;
第二次:IP 包根据路由表进入 TUN(flannel0)设备,从而回到用户态的 flanneld 进程;
第三次:flanneld 进行 UDP 封包之后重新进入内核态,将 UDP 包通过宿主机的 eth0 发出去。
Flannel 进行 UDP 封装(Encapsulation)和解封装(Decapsulation)的过程,也都是在用户态完成的。在 Linux 操作系统中,上述这些上下文切换和用户态操作的代价其实是比较高的,这也正是造成 Flannel UDP 模式性能不好的主要原因。
在这里插入图片描述

Flannel UDP 模式提供的其实是一个三层的 Overlay 网络,即:它首先对发出端的 IP 包进行 UDP 封装,然后在接收端进行解封装拿到原始的 IP 包,进而把这个 IP 包转发给目标容器。这就好比,Flannel 在不同宿主机上的两个容器之间打通了一条“隧道”,使得这两个容器可以直接使用 IP 地址进行通信,而无需关心容器和宿主机的分布情况。

UDP 模式有严重的性能问题,所以已经被废弃了

VXLAN模式(内核态隧道)

此种模式和 UDP 比较相像,只不过它的封包和解包都在内核,因为 VXLAN 本身就是内核的一个模块。

VTEP自动化:通过netlink创建flannel.1虚拟网卡作为VXLAN隧道端点(VTEP),MAC学习由内核完成。

封装优化:外层IP头携带宿主机地址,内层VXLAN头携带容器MAC,利用硬件Offload提升性能(可达10Gbps)。

路由策略:通过bridge fdb命令动态维护VTEP MAC与宿主机IP的映射关系。
在这里插入图片描述

Host-GW模式(直连路由)

无封装开销:通过宿主机的路由表直接转发(如ip route add 172.17.9.0/24 via 192.168.100.101)。

网络要求:集群节点需二层互通,适用于私有云裸金属环境。

  1. 地址转换与策略联动
    SNAT/DNAT控制:通过iptables规则实现容器出向流量的源地址转换(SNAT),以及入向流量的目的地址转换(DNAT)。

NetworkPolicy扩展:与Calico等插件协同,实现基于标签的微隔离策略,弥补Flannel原生策略能力的不足。

host-gw 模式的工作原理,其实就是将每个 Flannel 子网(Flannel Subnet,比如:10.244.1.0/24)的“下一跳”,设置成了该子网对应的宿主机的 IP 地址。如图:
在这里插入图片描述

host-gw 模式能够正常工作的核心,就在于 IP 包在封装成帧发送出去的时候,会使用路由表里的“下一跳”来设置目的 MAC 地址。这样,它就会经过二层网络到达目的宿主机。所有必须要求集群宿主机之间是二层连通的。

生产环境架构选型与调优实践

性能维度对比

后端模式延迟吞吐量CPU开销适用场景
UDPPOC测试、边缘环境
VXLAN公有云、混合云
Host-GW极高私有云裸金属集群

关键调优参数

  • MTU优化
    VXLAN封装导致有效MTU减少50字节,需调整容器MTU为1450以避免分片。

  • ARP缓存
    增大 net.ipv4.neigh.default.gc_thresh 值,防止大规模集群中ARP表项溢出。

  • 并发连接
    对于UDP模式,调整flanneld--iface参数绑定高速网卡,并启用多队列优化。
    关键调优参数
    MTU优化:VXLAN封装导致有效MTU减少50字节,需调整容器MTU为1450以避免分片。

超越Flannel:云原生网络演进趋势

尽管Flannel以其简洁性成为入门首选,但在超大规模集群中面临Etcd性能瓶颈与策略能力短板。下一代CNI插件呈现三大趋势:

eBPF数据面:Cilium等方案通过eBPF实现内核级策略执行与负载均衡,延迟降低40%以上。

多租户隔离:通过NetworkAttachmentDefinition实现多网络平面隔离,满足金融级合规需求。

服务网格融合:Istio与CNI插件深度集成,实现L7流量治理与零信任安全。

原文地址:https://blog.csdn.net/weixin_48711696/article/details/145401313
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.kler.cn/a/526651.html

相关文章:

  • 21.3-启动流程、编码风格(了解) 第21章-FreeRTOS项目实战--基础知识之新建任务、启动流程、编码风格、系统配置 文件组成和编码风格(了解)
  • 雅思写作(支持句)
  • 告别重启!Vue CLI 动态代理配置实战:实现热更新与灵活配置
  • Redis实战(黑马点评)——redis存储地理信息、位图、HyperLogLog 用法
  • 【视频+图文详解】HTML基础1-html和css介绍、上网原理
  • 从零开始学习电池SOC算法
  • MySQL知识点总结(十五)
  • Deep Seek R1本地化部署
  • 如何解决Unit sshd.service could not be found
  • Vue.js组件开发-实现全屏背景图片滑动切换特效
  • 自动备案批量查询脚本
  • 系统思考—蝴蝶效应
  • AngularJS 模块
  • 【电工基础】低压电器元件,低压断路器(空开QF),接触器(KM)
  • Python NumPy(8):NumPy 位运算、NumPy 字符串函数
  • 【Leetcode 每日一题 - 补卡】219. 存在重复元素 II
  • Python 变量和简单数据类型(Python之禅)
  • Leetcode:350
  • 基于SpringBoot 前端接收中文显示解决方案
  • Autosar-Os是怎么运行的?(内存保护)