k8s CNI插件簡單瞭解

来源:https://www.cnblogs.com/amyzhu/archive/2020/02/20/12337817.html
-Advertisement-
Play Games

Kubernetes網路模型本身對某些特定的網路功能有一定要求,但在實現方面也具有一定的靈活性。業界已經有不少不同的網路方案,來滿足特定的環境和要求。 CNI(container network interface)是容器網路介面,它是一種標準設計和庫,為了讓用戶在容器創建或者銷毀時都能夠更容易的配 ...


Kubernetes網路模型本身對某些特定的網路功能有一定要求,但在實現方面也具有一定的靈活性。業界已經有不少不同的網路方案,來滿足特定的環境和要求。

CNI(container network interface)是容器網路介面,它是一種標準設計和庫,為了讓用戶在容器創建或者銷毀時都能夠更容易的配置容器網路。

目前比較流行的CNI插件:Flannel、Calico、Weave、Canal(技術上是多個插件的組合)。這些插件即可以確保滿足Kubernetes的網路要求,又能為kubernetes集群管理員提供他們所需的某些特定的網路功能。

背景

容器網路是容器選擇連接到其他容器、主機和外部網路(如Internet)的機制。容器的runtime提供了各種網路模式,每種模式都會產生不同的效果。例如,Docker預設情況下可以為容器配置以下網路:

  • none:將容器添加到一個容器專門的網路堆棧中,沒有對外連接。
  • host:將容器添加到主機的網路堆棧中,沒有隔離。
  • default bridge:預設網路模式。每個容器可以通過IP地址互相連接。
  • 自定義網橋:用戶定義的網橋,具有更多的靈活性、隔離性和其他便利功能。

Docker還可以讓用戶通過其他驅動程式和插件,來配置更高級的網路(包括多主機覆蓋網路)。

CNI(https://github.com/containernetworking/cni/blob/master/SPEC.md) 的初衷是創建一個框架,用於在配置或銷毀容器時動態配置適當的網路配置和資源。CNI 規範中用於配置網路的插件介面,可以讓容器運行時與插件進行協調,具體機制如下:

  • 插件負責為介面配置和管理IP地址,並且同於提供與IP管理、每個容器的IP分配、以及多主機連接相關的功能。
  • 容器運行時會調用網路插件,從而在容器啟動時分配IP地址並配置網路策略,併在刪除容器時再次調用插件以清理這些資源。
  • 在Kubernetes中,kubelet可以在適當的時間調用插件,來為通過kubelet啟動的pod進行自動的網路配置。

術語

  • VXLAN:代表“虛擬可擴展LAN”。首先,VXLAN用於通過在UDP數據報中封裝第2層乙太網幀來幫助實現大型雲部署。VXLAN虛擬化與VLAN類似,但提供更大的靈活性和功能(VLAN僅限於4096個網路ID)。VXLAN是一種封裝和覆蓋協議,可在現有網路上運行。
  • Overlay網路:Overlay網路是建立在現有網路之上的虛擬邏輯網路。Overlay網路通常用於在現有網路之上提供有用的抽象,並分離和保護不同的邏輯網路。
  • 網狀網格:網狀網路(Mesh network)是指每個節點連接到許多其他節點以協作路由、並實現更大連接的網路。網狀網路允許通過多個路徑進行路由,從而提供更可靠的網路。網狀網格的缺點是每個附加節點都會增加大量開銷。
  • BGP(Border Gateway Protocol):即"邊界網關協議",用於管理邊緣路由器之間數據包的路由方式。BGP通過考慮可用路徑,路由規則和特定網路策略,幫助弄清楚如何將數據包從一個網路發送到另一個網路。

原理

要實現跨虛擬機的容器之間的網路,有幾種可能的辦法:

  • 容器的IP就是二層網路里分配的IP,這樣容器相當於二層網路里的節點,那麼就可以天然互訪;
  • 容器的IP與node的IP不屬於同一個網段,node上配置個到各個網段的路由(指向對應容器網段所部屬的node IP),通過路由實現互訪[flannel host-gw, calico bgp均是通過此方案實現];
  • 容器的IP與node的IP不屬於同一個網段,node上有服務對容器發出的包進行封裝,對發給容器的包進行解封。封裝後的包通過node所在的網路進行傳輸。解封後的包通過網橋或路由直接發給容器,即overlay網路。[flannel udp/vxlan,calico ipip,openshift-sdn均通過此方案實現]

CNI 插件

Flannel(只能提供網路通訊,不提供網路策略)

鏈接:https://github.com/coreos/flannel

由CoreOS開發的項目Flannel,是最直接和最受歡迎的CNI插件。它是容器編排系統中最成熟的網路結構示例之一,旨在實現更好的容器間和主機間網路。

特點:

  1. 相對容易安裝和配置。它被打包為單個二進位文件flanneld,許多常見的Kubernetes集群部署工具和許多Kubernetes發行版都可以預設安裝Flannel。

  2. Flannel可以使用Kubernetes集群的現有etcd集群來使用API存儲其狀態信息,因此不需要專用的數據存儲。
  3. Flannel配置第三層IPv4 overlay網路。它會創建一個大型內部網路,跨越集群中每個節點。在此overlay網路中,每個節點都有一個子網,用於在內部分配IP地址。在配置pod時,每個節點上的Docker橋介面都會為每個新容器分配一個地址。同一主機中的Pod可以使用Docker橋接進行通信,而不同主機上的pod會使用flanneld將其流量封裝在UDP數據包中,以便路由到適當的目標。
  4. 主要是提供主機和pod之間的網路鏈接。

Calico

鏈接:https://github.com/projectcalico/cni-plugin

Calico以其性能、靈活性而聞名。

特點:

  1. Clico的功能更為全面,不僅提供主機和pod之間的網路鏈接,還涉及網路安全和管理。
  2. Calico CNI插件在CNI框架內封裝了Calico的功能。
  3. Calico不使用overlay網路,而是配置第三層網路(網路層,IPv4、IPv6、ICMP)【更底層】。該網路使用BGP路由協議在主機之間路由數據包。這意味著在主機之間傳輸的時候,不需要將數據包包裝在額外的封裝層中。傳輸效率更高,有性能優勢。
  4. 故障排查更方便。使用calico,標準調試工具可以訪問與簡單環境中相同的信息,從而使更多開發人員、管理人員更容易理解行為。
  5. 具有先進的網路功能:
    1. 網路策略
    2. 還可以與服務網格Istio集成,

canal

鏈接:https://github.com/projectcalico/canal

Canal是Flannel和Calico的組合:

  1. 網路層用的是Flannel提供的簡單overlay,可以在許多不同的部署環境中運行且無需額外的配置。
  2. 網路策略方面,Calico強大的網路規則評估,為基礎網路提供了更多補充,從而提供了更多安全性和控制。

Weave

鏈接:https://www.weave.works/oss/net/

weave是Weaveworks提供的一種Kubernetes CNI網路選項。

特點:

  1. 智能路由 Weave在集群中的每個節點之間創建overlay網路,參與者可以靈活路由。——Weave可以智能路由。

    工作原理:

    為了創建網路,weave依賴於網路中每台主機上安裝的路由組件。然後,這些路由器交換拓撲信息,以維護可用網路環境的最新試圖。 當需要將流量發送到位於不同節點上的pod時,weave路由組件會自動決定是通過"快速數據路徑"發送,還是回退到"sleeve"分組轉發的方法。

  2. 與Calico一樣,Weave也為Kubernetes集群提供網路策略功能。

  3. 對整個網路的簡單加密。Weave可以使用NaCI加密(http://nacl.cr.yp.to)來為sleeve流量自動加密所有路由流量;使用IPsec ESP來加密快速數據路徑流量。

詳細資料:https://www.sohu.com/a/304555150_618296


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Dubbo的服務暴露是一個重要的特性,瞭解其機制很重要。之前有很多人寫了有關的源代碼分析,在本文中不再重新分析。官方文檔中的一篇寫的就很好,本文主要是有關內容進行補充與總結。 傳送門: "服務導出" 為什麼要服務暴露 服務暴露分為遠程暴露和本地暴露。在遠程服務暴露中會將服務信息上傳到註冊中心。這時客 ...
  • 前面幾章介紹了處理適量適中的圖形內容的最佳方法。通過使用幾何圖形、圖畫和路徑,可以降低2D圖形的開銷。即使正在使用複雜的具有分層效果的組合形狀和漸變畫刷,這種方法也仍然能夠正常得很好。 然而,這樣設計不適合需要渲染大量圖形元素的繪圖密集型應用程式。例如繪圖程式、演示粒子碰撞的物理模型程式或橫向卷軸形 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7873322.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第二個模式--命令模式,又稱為行動(Action)模式或交易(Transaction)模式,先從名字上來看。“命令模 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7837716.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第一個模式--模板方法模式,先從名字上來看。“模板方法”理解為有一個方法的名字叫“模板方法”,也可以換個理解方法: ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7814004.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講結構型設計模式的第七個模式,也是結構型設計模式中的最後一個模式--代理模式。先從名字上來看,“代理”可以理解為“代替”,代替“主人” ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/7792973.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講結構型設計模式的第六個模式--享元模式,先從名字上來看,“享元”可以這樣理解--共用“單元”。單元是什麼呢?舉例說明:對於圖形而言就 ...
  • 最近由於疫情緊張,遂在家辦公,在領導的帶領下,學習了一下.Net Core MVC。 一,構建web應用 1.選擇c#-所有平臺-web 找到ASP.NET Core web應用程式 2.項目命名之後轉至如下界面:選擇Web應用程式(模型視圖控制器)。 Ok點擊創建,這個項目的基本框架就生成了。 二 ...
  • Linux tcpdump 命令詳解,常用命令選項與常見示例 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...