浅谈网络 | 容器网络之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流量治理与零信任安全。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/67550.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

hive:基本数据类型,关于表和列语法

基本数据类型 Hive 的数据类型分为基本数据类型和复杂数据类型 加粗的是常用数据类型 BOOLEAN出现ture和false外的其他值会变成NULL值 没有number,decimal类似number 如果输入的数据不符合数据类型, 映射时会变成NULL, 但是数据本身并没有被修改 创建表 创建表的本质其实就是在…

2025创业思路和方向有哪些?

创业思路和方向是决定创业成功与否的关键因素。以下是一些基于找到的参考内容的创业思路和方向&#xff0c;旨在激发创业灵感&#xff1a; 一、技术创新与融合&#xff1a; 1、智能手机与云电视结合&#xff1a;开发集成智能手机功能的云电视&#xff0c;提供通讯、娱乐一体化体…

Three.js实战项目02:vue3+three.js实现汽车展厅项目

文章目录 实战项目02项目预览项目创建初始化项目模型加载与展厅灯光加载汽车模型设置灯光材质设置完整项目下载实战项目02 项目预览 完整项目效果: 项目创建 创建项目: pnpm create vue安装包: pnpm add three@0.153.0 pnpm add gsap初始化项目 修改App.js代码&#x…

年化19.3%策略集|ctpbee_api替换成openctp整合backtrader实盘方案(代码+数据)

原创内容第782篇&#xff0c;专注量化投资、个人成长与财富自由。 昨天我们把backtraderctpbee的实盘整合代码跑通了&#xff0c;年化19.3%&#xff0c;回撤仅8%的实盘策略&#xff0c;以及backtrader整合CTPBee做实盘&#xff08;附python代码和数据&#xff09; 这两周我们加…

Android Studio 正式版 10 周年回顾,承载 Androider 的峥嵘十年

Android Studio 1.0 宣发于 2014 年 12 月&#xff0c;而现在时间来到 2025 &#xff0c;不知不觉间 Android Studio 已经陪伴 Androider 走过十年历程。 Android Studio 10 周年&#xff0c;也代表着了我的职业生涯也超十年&#xff0c;现在回想起来依然觉得「唏嘘」&#xff…

OpenEuler学习笔记(十四):在OpenEuler上搭建.NET运行环境

一、在OpenEuler上搭建.NET运行环境 基于包管理器安装 添加Microsoft软件源&#xff1a;运行命令sudo rpm -Uvh https://packages.microsoft.com/config/centos/8/packages-microsoft-prod.rpm&#xff0c;将Microsoft软件源添加到系统中&#xff0c;以便后续能够从该源安装.…

Vscode编辑器下 Markdown无法显示图片

1.问题 在vscode 编辑器中无法预览 markdon 文件中的图片 2.解决方案 大部分出现这种情况是因为新版本的vscode会阻拦有风险的资源显示&#xff0c;将安全等级调低即可。 方式一&#xff1a; 1.打开任意 MD 文件&#xff0c;ctrl&#xff0c;调出设置 2. 输入 markdown.ch…

php-phar打包避坑指南2025

有很多php脚本工具都是打包成phar形式&#xff0c;使用起来就很方便&#xff0c;那么如何自己做一个呢&#xff1f;也找了很多文档&#xff0c;也遇到很多坑&#xff0c;这里就来总结一下 phar安装 现在直接装yum php-cli包就有phar文件&#xff0c;很方便 可通过phar help查看…

自动化运维的未来:从脚本到AIOps的演进

点击进入IT管理资料库 一、自动化运维的起源&#xff1a;脚本时代 &#xff08;一&#xff09;脚本在运维中的应用场景 在自动化运维的发展历程中&#xff0c;脚本扮演着至关重要的角色&#xff0c;它作为最初的操作入口&#xff0c;广泛应用于诸多日常运维工作场景里。 在系统…

【2024年华为OD机试】(B卷,100分)- 热点网站统计(Java JS PythonC/C++)

一、问题描述 题目描述 企业路由器的统计页面需要动态统计公司访问最多的网页URL的Top N。设计一个算法&#xff0c;能够高效动态统计Top N的页面。 输入描述 每一行都是一个URL或一个数字&#xff1a; 如果是URL&#xff0c;代表一段时间内的网页访问。如果是数字N&#…

《DeepSeek 网页/API 性能异常(DeepSeek Web/API Degraded Performance):网络安全日志》

DeepSeek 网页/API 性能异常&#xff08;DeepSeek Web/API Degraded Performance&#xff09;订阅 已识别 - 已识别问题&#xff0c;并且正在实施修复。 1月 29&#xff0c; 2025 - 20&#xff1a;57 CST 更新 - 我们将继续监控任何其他问题。 1月 28&#xff0c; 2025 - 22&am…

智能汽车网络安全威胁报告

近年来随着智能汽车技术的快速发展&#xff0c;针对智能汽车的攻击也逐渐从传统的针对单一车辆控制器的攻击转变为针对整车智能化服务的攻击&#xff0c;包括但不限于对远程控制应用程序的操控、云服务的渗透、智能座舱系统的破解以及对第三方应用和智能服务的攻击。随着WP.29 …

docker中运行的MySQL怎么修改密码

1&#xff0c;进入MySQL容器 docker exec -it 容器名 bash 我运行了 docker ps命令查看。正在运行的容器名称。可以看到MySQL的我起名为db docker exec -it db bash 这样就成功的进入到容器中了。 2&#xff0c;登录MySQL中 mysql -u 用户名 -p 回车 密码 mysql -u root -p roo…

解锁微服务:五大进阶业务场景深度剖析

目录 医疗行业&#xff1a;智能诊疗的加速引擎 电商领域&#xff1a;数据依赖的破局之道 金融行业&#xff1a;运维可观测性的提升之路 物流行业&#xff1a;智慧物流的创新架构 综合业务&#xff1a;服务依赖的优化策略 医疗行业&#xff1a;智能诊疗的加速引擎 在医疗行业迈…

Cloudreve:Star22.3k,免费开源的网盘,支持多种存储方式,它允许用户快速搭建个人或团队的私有云存储服务。

嗨&#xff0c;大家好&#xff0c;我是小华同学&#xff0c;关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Cloudreve是一个基于Web的文件管理和分享系统&#xff0c;它允许用户快速搭建个人或团队的私有云存储服务。该项目以其高度的可定制性和灵活性&#x…

AIGC(生成式AI)试用 20 -- deepseek 初识

>> 基本概念 Ollama -- 运行大模型&#xff0c;管理运行AI大模型的工具&#xff0c;用来安装布置DeepSeek https://ollama.com/ , Get up and running with large language models. AnythingLLM -- 大模型增强应用&#xff0c;GUI大模型交互程序 Download AnythingLLM …

Axure PR 9 旋转效果 设计交互

大家好&#xff0c;我是大明同学。 这期内容&#xff0c;我们将学习Axure中的旋转效果设计与交互技巧。 旋转 创建旋转效果所需的元件 1.打开一个新的 RP 文件并在画布上打开 Page 1。 2.在元件库中拖出一个按钮元件。 创建交互 创建按钮交互状态 1.选中按钮元件&#xf…

Attention--人工智能领域的核心技术

1. Attention 的全称与基本概念 在人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;领域&#xff0c;Attention 机制的全称是 Attention Mechanism&#xff08;注意力机制&#xff09;。它是一种能够动态分配计算资源&#xff0c;使模型在处理输入数据…

相同的树及延伸题型(C语言详解版)

从LeetCode 100和101看二叉树的比较与对称性判断 今天要讲的是leetcode100.相同的树&#xff0c;并且本文章还会讲到延伸题型leetcode101.对称二叉树。本文章编写用的是C语言&#xff0c;大家主要是学习思路&#xff0c;学习过后可以自己点击链接测试&#xff0c;并且做一些对…

【Rust自学】15.0. 智能指针(序):什么是智能指针及Rust智能指针的特性

喜欢的话别忘了点赞、收藏加关注哦&#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵&#xff01;(&#xff65;ω&#xff65;) 15.0.1 指针的基本概念 指针是一个变量在内存中包含的是一个地址&#xff0c;指向另一个数据。 Rust 中最常见的指针是引用&#xff0c…