淺談網絡 | 容器網絡之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.pswp.cn/web/67550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/67550.shtml
英文地址,請注明出處:http://en.pswp.cn/web/67550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

autosar bsw 的關鍵模塊

AUTOSAR&#xff08;AUTomotive Open System ARchitecture&#xff09;的**基礎軟件層&#xff08;BSW&#xff0c;Basic Software&#xff09;**是汽車電子系統標準化的核心&#xff0c;負責提供硬件抽象、通信、診斷、安全等基礎服務。以下是BSW的關鍵模塊及其功能分類&#…

hive:基本數據類型,關于表和列語法

基本數據類型 Hive 的數據類型分為基本數據類型和復雜數據類型 加粗的是常用數據類型 BOOLEAN出現ture和false外的其他值會變成NULL值 沒有number,decimal類似number 如果輸入的數據不符合數據類型, 映射時會變成NULL, 但是數據本身并沒有被修改 創建表 創建表的本質其實就是在…

2025創業思路和方向有哪些?

創業思路和方向是決定創業成功與否的關鍵因素。以下是一些基于找到的參考內容的創業思路和方向&#xff0c;旨在激發創業靈感&#xff1a; 一、技術創新與融合&#xff1a; 1、智能手機與云電視結合&#xff1a;開發集成智能手機功能的云電視&#xff0c;提供通訊、娛樂一體化體…

航空客戶價值的數據挖掘與分析(numpy+pandas+matplotlib+scikit-learn)

航空客戶價值的數據挖掘與分析(numpy+pandas+matplotlib+scikit-learn) K-Means聚類:https://en.wikipedia.org/wiki/K-means_clustering寫在前面 實現目的:基于K-Means聚類分析模型實現航空客戶價值大數據分析。 電腦系統:Windows 使用軟件:Anaconda(Jupyter Notebook)…

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;以便后續能夠從該源安裝.…

詳解python的修飾符

Python 中的修飾符&#xff08;Decorator&#xff09;是一種用于修改或擴展函數或類行為的工具。它們本質上是一個函數&#xff0c;接受另一個函數或類作為參數&#xff0c;并返回一個新的函數或類。修飾符通常用于在不修改原函數或類代碼的情況下&#xff0c;添加額外的功能。…

低代碼產品插件功能一覽

下圖是統計的目前市面上流行的低代碼、零代碼產品的插件功能。 產品名稱 產品類型 官方插件數量 支持拓展 官方插件功能 宜搭 零代碼 3 暫不支持 云打印、CAD看圖、打印表單詳情 微搭 低代碼 1 暫不支持 小程序 明道云 低代碼 2 支持 視圖、工作流節點 簡道…

Vscode編輯器下 Markdown無法顯示圖片

1.問題 在vscode 編輯器中無法預覽 markdon 文件中的圖片 2.解決方案 大部分出現這種情況是因為新版本的vscode會阻攔有風險的資源顯示&#xff0c;將安全等級調低即可。 方式一&#xff1a; 1.打開任意 MD 文件&#xff0c;ctrl&#xff0c;調出設置 2. 輸入 markdown.ch…

前端axios攔截器

1. 在main.js導入axios 2. 通過axios對象定義攔截器 import {createApp} from vue import App from ./App.vue import Antd from ant-design-vue; import ant-design-vue/dist/antd.css; import axios from "axios"; import router from ./router import store from …

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…

基于微信小程序的輔助教學系統的設計與實現

標題:基于微信小程序的輔助教學系統的設計與實現 內容:1.摘要 摘要&#xff1a;隨著移動互聯網的普及和微信小程序的興起&#xff0c;基于微信小程序的輔助教學系統成為了教育領域的一個新的研究熱點。本文旨在設計和實現一個基于微信小程序的輔助教學系統&#xff0c;以提高教…

智能汽車網絡安全威脅報告

近年來隨著智能汽車技術的快速發展&#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…

創建 priority_queue - 進階(內置類型)c++

內置類型就是 C 提供的數據類型&#xff0c;?如 int 、 double 、 long long 等。以 int 類型為例&#xff0c;分 別創建?根堆和?根堆。 這種寫法意思是&#xff0c;我要告訴這個優先級隊列要建一個什么樣的堆&#xff0c;第一個int是要存什么數據類型&#xff0c;vecto…