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插件,它是容器編排系統中最成熟的網路結構示例之一,旨在實作更好的容器間和主機間網路,
特點:
-
相對容易安裝和配置,它被打包為單個二進制檔案flanneld,許多常見的Kubernetes集群部署工具和許多Kubernetes發行版都可以默認安裝Flannel,
-
Flannel可以使用Kubernetes集群的現有etcd集群來使用API存盤其狀態資訊,因此不需要專用的資料存盤,
-
Flannel配置第三層IPv4 overlay網路,它會創建一個大型內部網路,跨越集群中每個節點,在此overlay網路中,每個節點都有一個子網,用于在內部分配IP地址,在配置pod時,每個節點上的Docker橋介面都會為每個新容器分配一個地址,同一主機中的Pod可以使用Docker橋接進行通信,而不同主機上的pod會使用flanneld將其流量封裝在UDP資料包中,以便路由到適當的目標,
-
主要是提供主機和pod之間的網路鏈接,
Calico
鏈接:https://github.com/projectcalico/cni-plugin
Calico以其性能、靈活性而聞名,
特點:
- Clico的功能更為全面,不僅提供主機和pod之間的網路鏈接,還涉及網路安全和管理,
- Calico CNI插件在CNI框架內封裝了Calico的功能,
- Calico不使用overlay網路,而是配置第三層網路(網路層,IPv4、IPv6、ICMP)【更底層】,該網路使用BGP路由協議在主機之間路由資料包,這意味著在主機之間傳輸的時候,不需要將資料包包裝在額外的封裝層中,傳輸效率更高,有性能優勢,
- 故障排查更方便,使用calico,標準除錯工具可以訪問與簡單環境中相同的資訊,從而使更多開發人員、管理人員更容易理解行為,
- 具有先進的網路功能:
- 網路策略
- 還可以與服務網格Istio集成,
canal
鏈接:https://github.com/projectcalico/canal
Canal是Flannel和Calico的組合:
- 網路層用的是Flannel提供的簡單overlay,可以在許多不同的部署環境中運行且無需額外的配置,
- 網路策略方面,Calico強大的網路規則評估,為基礎網路提供了更多補充,從而提供了更多安全性和控制,
Weave
鏈接:https://www.weave.works/oss/net/
weave是Weaveworks提供的一種Kubernetes CNI網路選項,
特點:
-
智能路由 Weave在集群中的每個節點之間創建overlay網路,參與者可以靈活路由,——Weave可以智能路由,
作業原理:
為了創建網路,weave依賴于網路中每臺主機上安裝的路由組件,然后,這些路由器交換拓撲資訊,以維護可用網路環境的最新試圖, 當需要將流量發送到位于不同節點上的pod時,weave路由組件會自動決定是通過"快速資料路徑"發送,還是回退到"sleeve"分組轉發的方法,
-
與Calico一樣,Weave也為Kubernetes集群提供網路策略功能,
-
對整個網路的簡單加密,Weave可以使用NaCI加密(http://nacl.cr.yp.to)來為sleeve流量自動加密所有路由流量;使用IPsec ESP來加密快速資料路徑流量,
詳細資料:https://www.sohu.com/a/304555150_618296
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238970.html
標籤:其他
