【K8s概念】叢集管理 -- 叢集網路系統
參考:https://kubernetes.io/zh/docs/concepts/cluster-administration/networking/
叢集網路系統是 Kubernetes 的核心部分,但是想要準確瞭解它的工作原理可是個不小的挑戰。 下面列出的是網路系統的的四個主要問題:
1.高度耦合的容器間通訊:這個已經被 Pods 和 localhost 通訊解決了。
2.Pod 間通訊:這個是本文件的重點要講述的。
3.Pod 和服務間通訊:這個已經在服務裡講述過了。
4.外部和服務間通訊:這也已經在服務講述過了。
Kubernetes 的宗旨就是在應用之間共享機器。 通常來說,共享機器需要兩個應用之間不能使用相同的埠,但是在多個應用開發者之間 去大規模地協調埠是件很困難的事情,尤其是還要讓使用者暴露在他們控制範圍之外的叢集級別的問題上。
動態分配埠也會給系統帶來很多複雜度 - 每個應用都需要設定一個埠的引數, 而 API 伺服器還需要知道如何將動態埠數值插入到配置模組中,服務也需要知道如何找到對方等等。 與其去解決這些問題,Kubernetes 選擇了其他不同的方法。
Kubernetes 網路模型
每一個 Pod 都有它自己的IP地址,這就意味著你不需要顯式地在每個 Pod 之間建立連結, 你幾乎不需要處理容器埠到主機埠之間的對映。 這將建立一個乾淨的、向後相容的模型,在這個模型裡,從埠分配、命名、服務發現、 負載均衡、應用配置和遷移的角度來看,Pod 可以被視作虛擬機器或者物理主機。
Kubernetes 對所有網路設施的實施,都需要滿足以下的基本要求(除非有設定一些特定的網路分段策略):
- 節點上的 Pod 可以不通過 NAT 和其他任何節點上的 Pod 通訊
- 節點上的代理(比如:系統守護程序、kubelet)可以和節點上的所有Pod通訊
備註:僅針對那些支援 Pods 在主機網路中執行的平臺(比如:Linux):
- 那些執行在節點的主機網路裡的 Pod 可以不通過 NAT 和所有節點上的 Pod 通訊
這個模型不僅不復雜,而且還和 Kubernetes 的實現廉價的從虛擬機器向容器遷移的初衷相相容, 如果你的工作開始是在虛擬機器中執行的,你的虛擬機器有一個 IP , 這樣就可以和其他的虛擬機器進行通訊,這是基本相同的模型。
Kubernetes 的 IP 地址存在於 Pod 範圍內 - 容器共享它們的網路名稱空間 - 包括它們的 IP 地址和 MAC 地址。 這就意味著 Pod 內的容器都可以通過 localhost 到達各個埠。 這也意味著 Pod 內的容器都需要相互協調埠的使用,但是這和虛擬機器中的程序似乎沒有什麼不同, 這也被稱為“一個 Pod 一個 IP”模型。
如何實現這一點是正在使用的容器執行時的特定資訊。
也可以在 node 本身通過埠去請求你的 Pod(稱之為主機埠), 但這是一個很特殊的操作。轉發方式如何實現也是容器執行時的細節。 Pod 自己並不知道這些主機埠是否存在。
如何實現 Kubernetes 的網路模型
Calico
Calico 是一個開源的聯網及網路安全方案, 用於基於容器、虛擬機器和本地主機的工作負載。 Calico 支援多個數據面,包括:純 Linux eBPF 的資料面、標準的 Linux 聯網資料面 以及 Windows HNS 資料面。Calico 在提供完整的聯網堆疊的同時,還可與 雲驅動 CNIs 聯合使用,以保證網路策略實施。
Flannel
Flannel 是一個非常簡單的能夠滿足 Kubernetes 所需要的覆蓋網路。已經有許多人報告了使用 Flannel 和 Kubernetes 的成功案例。
Kube-OVN
Kube-OVN 是一個基於 OVN 的用於企業的 Kubernetes 網路架構。 藉助於 OVN/OVS ,它提供了一些高階覆蓋網路功能,例如子網、QoS、靜態 IP 分配、流量映象、閘道器、 基於 openflow 的網路策略和服務代理。
Kube-router
Kube-router 是 Kubernetes 的專用網路解決方案, 旨在提供高效能和易操作性。 Kube-router 提供了一個基於 Linux LVS/IPVS 的服務代理、一個基於 Linux 核心轉發的無覆蓋 Pod-to-Pod 網路解決方案和基於 iptables/ipset 的網路策略執行器。
OpenVSwitch
OpenVSwitch 是一個較為成熟的解決方案,但同時也增加了構建覆蓋網路的複雜性。 這也得到了幾個網路系統的“大商店”的擁護。
OVN (開放式虛擬網路)
OVN 是一個由 Open vSwitch 社群開發的開源的網路虛擬化解決方案。 它允許建立邏輯交換器、邏輯路由、狀態 ACL、負載均衡等等來建立不同的虛擬網路拓撲。 該專案有一個特定的Kubernetes外掛和文件 ovn-kubernetes。
Romana
Romana 是一個開源網路和安全自動化解決方案。 它可以讓你在沒有覆蓋網路的情況下部署 Kubernetes。 Romana 支援 Kubernetes 網路策略, 來提供跨網路名稱空間的隔離。
Weaveworks 的 Weave Net
Weave Net 是 Kubernetes 及其 託管應用程式的彈性且易於使用的網路系統。 Weave Net 可以作為 CNI 外掛 執行或者獨立執行。 在這兩種執行方式裡,都不需要任何配置或額外的程式碼即可執行,並且在兩種情況下, 網路都為每個 Pod 提供一個 IP 地址 -- 這是 Kubernetes 的標準配置。
作者:Varden 出處:http://www.cnblogs.com/varden/ 本文內容如有雷同,請聯絡作者! 本文版權歸作者和部落格園共有,歡迎轉載,但未經作者同意必須保留此段宣告,且在文章頁面明顯位置給出原文連線,否則保留追究法律責任的權利。