k8s CNI插件簡單瞭解

Kubernetes網絡模型自己對某些特定的網絡功能有必定要求,但在實現方面也具備必定的靈活性。業界已經有很多不一樣的網絡方案,來知足特定的環境和要求。node

CNI(container network interface)是容器網絡接口,它是一種標準設計和庫,爲了讓用戶在容器建立或者銷燬時都可以更容易的配置容器網絡。git

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

背景

容器網絡是容器選擇鏈接到其餘容器、主機和外部網絡(如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網絡,而是配置第三層網絡(網絡層,IPv四、IPv六、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

相關文章
相關標籤/搜索