容器雲架構–瞭解 Kubernetes 網路模型
導讀 | 在本文中,您將瞭解什麼是 Kubernetes 網路,探索常見的實現,並發現關鍵的 Kubernetes 網路變化。 |
Kubernetes 網路使您能夠在 k8s 網路內配置通訊。它基於扁平網路結構,無需在主機和容器之間對映埠。
Kubernetes 網路支援容器化元件之間的通訊。這種網路模型的主要優點是不需要在主機和容器之間對映埠。然而,配置 Kubernetes 網路模型並不是一件容易的事。在本文中,您將瞭解什麼是 Kubernetes 網路,探索常見的實現,並發現關鍵的 Kubernetes 網路變化。
什麼是 Kubernetes 網路?
Kubernetes (k8s) 是一個開源容器編排平臺。您可以使用它來自動化本地或雲中容器的部署、更新和操作。使用 k8s,您可以跨多個基礎架構管理容器化工作負載,而無需擔心作業系統或環境。
Kubernetes 網路是 k8s 用來實現其元件之間通訊的模型。它基於扁平的網路結構,不需要你在主機和容器之間對映埠。儘管 Kubernetes 網路設定起來可能是一個挑戰,但它是任何 k8s 操作的重要組成部分,並且您需要了解它才能成功部署。
常見的 Kubernetes 網路實現
使用 Kubernetes 時,平臺會強制實施需要第三方工具來實現的網路模型。您可以選擇許多第三方工具,但以下三個是流行的選項。
- Flannel——一種為 k8s 設計的開源網路結構。Flannel 通過每個主機上的二進位制代理執行。該代理將子網租用分配給主機並使用 etcd 來儲存配置資料。
- Project Calico——一個開源網路供應商和政策引擎。Calico 使您能夠建立一個可擴充套件的網路解決方案來連線 k8s pod。它還使您能夠在主機網路或服務網格層上實施安全策略。
- Weave Net — 一種專有網路工具包,可用於建立虛擬網路。Weave Net 包括彈性、可擴充套件性、安全性、多播網路和服務發現等功能。它基於去中心化架構,不需要任何外部配置服務或儲存。
Kubernetes 網路變化
在標準的 Kubernetes 部署中,您應該注意多種網路變化。以下是需要了解的最常見的網路情況。
容器到容器網路
網路的高階檢視描述了直接與乙太網裝置通訊的裝置或虛擬機器。然而,實際上(至少對於Linux),您機器上的每個程序都在網路名稱空間內進行通訊。
這個名稱空間建立了一個邏輯網路堆疊,它有自己的網路裝置、防火牆規則和路由。當您執行一個程序時,它預設分配給您的根網路名稱空間。這為程序提供了外部訪問。
在 Kubernetes 中,您的容器被分組為 pod,每個 pod 都有一個共享的名稱空間。在這個 pod 中,所有容器都具有相同的埠和 IP 地址以及埠空間。為了通訊,Pod 中的容器可以使用 localhost,因為它們都在同一個名稱空間中執行。如果不同 Pod 中的容器需要通訊,則您正在使用下面描述的 Pod 到 Pod 網路過程。
Pod 到 Pod 網路
Pod 到 Pod 網路可以發生在同一節點內或跨節點的 Pod 中。您的每個節點都有一個無類域間路由 (CIDR) 塊。該塊是分配給該節點內的 Pod 的一組已定義的唯一 IP 地址。這確保了每個 pod 都被提供了一個唯一的 IP,而不管它在哪個節點。
當 Pod 需要通訊時,會使用虛擬乙太網裝置 (VED) 或 veth 對來連線 Pod。Veth 對是分佈在名稱空間中的耦合網路介面。一對中的一個分配給根名稱空間,另一個分配給 pod 名稱空間。然後,VED 用作兩個名稱空間之間的中介連線。
Pod 到服務網路
Kubernetes 旨在允許根據需要動態替換 pod。這意味著 pod IP 地址不是持久的,除非採取特殊的預防措施,例如有狀態的應用程式。為了解決這個問題並確保保持與 Pod 之間的通訊,Kubernetes 使用了服務。
Kubernetes 服務管理 pod 狀態並使您能夠隨時間跟蹤 pod IP 地址。這些服務通過將單個虛擬 IP(叢集 IP)分配給一組 pod IP 來抽象 pod 地址。然後,傳送到虛擬 IP 的任何流量都會分發到相關聯的 pod。
此服務 IP 允許根據需要建立和銷燬 pod,而不會影響整體通訊。它還使 Kubernetes 服務能夠充當叢集內負載均衡器,根據需要在關聯的 pod 之間分配流量。
網際網路到服務網路
大多數部署所需的最終網路情況是在 Internet 和服務之間。無論您是將 Kubernetes 用於內部還是外部應用程式,您通常都需要 Internet 連線。這種連線使使用者能夠訪問您的服務和分散式團隊進行協作。
在設定外部訪問時,您需要使用兩種技術——出口和入口。您可以使用白名單或黑名單來設定這些策略,以控制進出網路的流量。
- Egress(出口):出口是將流量從您的節點路由到外部連線的過程。它通常通過連線到您的虛擬私有云 (VPC) 的 Internet 閘道器完成。此閘道器使用網路地址轉換 (NAT) 在您的使用者和您的節點所在的機器之間對映 IP。但是,它無法對映到您節點上的各個 Pod。對於這一步,Kubernetes 使用 IP 表和叢集 IP 來完成通訊。
- Ingress:Ingress 是 Egress 的相反過程,涉及從外部客戶端到您的 Kubernetes 服務的通訊。它作為一組規則執行,定義允許哪些連線以及阻止哪些連線與您的服務進行通訊。
結論
Kubernetes 網路使您能夠在 k8s 網路內配置通訊。它基於扁平網路結構,無需在主機和容器之間對映埠。但是,要強制實施此網路模型,您需要使用第三方工具(開源或付費的),例如 Flannel、Project Calico 和 Weave Net。
此外,在配置 Kubernetes 網路時,您需要考慮某些網路方面,這在傳統網路中是不會遇到的。其中包括容器到容器網路、Pod 到 Pod 網路、Pod 到服務網路和 Internet 到服務網路。請務必妥善規劃您的網路,因為錯誤配置可能會導致漏洞。
- 容器雲架構–瞭解 Kubernetes 網路模型
- IPv6的發展已步入新階段
- docker中安裝mycat
- spring boot 不連線資料庫啟動
- ECharts 餅圖繪製教程
- 刪除字串中的所有相鄰重複項
- 超全面的Linux基礎知識的梳理
- Mysql使用儲存過程快速新增百萬資料
- 帶你玩玩轉 MySQL 查詢
- SQL中Merge的用法
- 在docker中haproxy的安裝以及mysql的負載均衡配置
- Centos8中如何更改資料夾中多個檔案的副檔名
- 如何在 Windows 中檢查計算機正常執行時間
- ECharts 互動元件概述
- 如何在 Linux 中以指令碼模式執行 Top
- ECharts 樣式設定介紹
- Python中非常有用的三個資料科學庫
- 六個方法助您優化雲端儲存成本
- ssl證書無效的原因是什麼?
- 只要有心,學好Linux並非難事