Kubernetes 網(wǎng)絡(luò)使您能夠在 k8s 網(wǎng)絡(luò)內(nèi)配置通信。它基于扁平網(wǎng)絡(luò)結(jié)構(gòu),無(wú)需在主機(jī)和容器之間映射端口。
Kubernetes 網(wǎng)絡(luò)支持容器化組件之間的通信。這種網(wǎng)絡(luò)模型的主要優(yōu)點(diǎn)是不需要在主機(jī)和容器之間映射端口。然而,配置 Kubernetes 網(wǎng)絡(luò)模型并不是一件容易的事。在本文中,您將了解什么是 Kubernetes 網(wǎng)絡(luò),探索常見(jiàn)的實(shí)現(xiàn),并發(fā)現(xiàn)關(guān)鍵的 Kubernetes 網(wǎng)絡(luò)變化。
什么是 Kubernetes 網(wǎng)絡(luò)?
Kubernetes (k8s) 是一個(gè)開(kāi)源容器編排平臺(tái)。您可以使用它來(lái)自動(dòng)化本地或云中容器的部署、更新和操作。使用 k8s,您可以跨多個(gè)基礎(chǔ)架構(gòu)管理容器化工作負(fù)載,而無(wú)需擔(dān)心操作系統(tǒng)或環(huán)境。
Kubernetes 網(wǎng)絡(luò)是 k8s 用來(lái)實(shí)現(xiàn)其組件之間通信的模型。它基于扁平的網(wǎng)絡(luò)結(jié)構(gòu),不需要你在主機(jī)和容器之間映射端口。盡管 Kubernetes 網(wǎng)絡(luò)設(shè)置起來(lái)可能是一個(gè)挑戰(zhàn),但它是任何 k8s 操作的重要組成部分,并且您需要了解它才能成功部署。
常見(jiàn)的 Kubernetes 網(wǎng)絡(luò)實(shí)現(xiàn)
使用 Kubernetes 時(shí),平臺(tái)會(huì)強(qiáng)制實(shí)施需要第三方工具來(lái)實(shí)現(xiàn)的網(wǎng)絡(luò)模型。您可以選擇許多第三方工具,但以下三個(gè)是流行的選項(xiàng)。
Flannel——一種為 k8s 設(shè)計(jì)的開(kāi)源網(wǎng)絡(luò)結(jié)構(gòu)。Flannel 通過(guò)每個(gè)主機(jī)上的二進(jìn)制代理運(yùn)行。該代理將子網(wǎng)租用分配給主機(jī)并使用 etcd 來(lái)存儲(chǔ)配置數(shù)據(jù)。Project Calico——一個(gè)開(kāi)源網(wǎng)絡(luò)供應(yīng)商和政策引擎。Calico 使您能夠創(chuàng)建一個(gè)可擴(kuò)展的網(wǎng)絡(luò)解決方案來(lái)連接 k8s pod。它還使您能夠在主機(jī)網(wǎng)絡(luò)或服務(wù)網(wǎng)格層上實(shí)施安全策略。Weave Net — 一種專有網(wǎng)絡(luò)工具包,可用于創(chuàng)建虛擬網(wǎng)絡(luò)。Weave Net 包括彈性、可擴(kuò)展性、安全性、多播網(wǎng)絡(luò)和服務(wù)發(fā)現(xiàn)等功能。它基于去中心化架構(gòu),不需要任何外部配置服務(wù)或存儲(chǔ)。Kubernetes 網(wǎng)絡(luò)變化
在標(biāo)準(zhǔn)的 Kubernetes 部署中,您應(yīng)該注意多種網(wǎng)絡(luò)變化。以下是需要了解的最常見(jiàn)的網(wǎng)絡(luò)情況。
容器到容器網(wǎng)絡(luò)
網(wǎng)絡(luò)的高級(jí)視圖描述了直接與以太網(wǎng)設(shè)備通信的設(shè)備或虛擬機(jī)。然而,實(shí)際上(至少對(duì)于 Linux),您機(jī)器上的每個(gè)進(jìn)程都在網(wǎng)絡(luò)命名空間內(nèi)進(jìn)行通信。
這個(gè)命名空間創(chuàng)建了一個(gè)邏輯網(wǎng)絡(luò)堆棧,它有自己的網(wǎng)絡(luò)設(shè)備、防火墻規(guī)則和路由。當(dāng)您運(yùn)行一個(gè)進(jìn)程時(shí),它默認(rèn)分配給您的根網(wǎng)絡(luò)命名空間。這為進(jìn)程提供了外部訪問(wèn)。
在 Kubernetes 中,您的容器被分組為 pod,每個(gè) pod 都有一個(gè)共享的命名空間。在這個(gè) pod 中,所有容器都具有相同的端口和 IP 地址以及端口空間。為了通信,Pod 中的容器可以使用 localhost,因?yàn)樗鼈兌荚谕粋€(gè)命名空間中運(yùn)行。如果不同 Pod 中的容器需要通信,則您正在使用下面描述的 Pod 到 Pod 網(wǎng)絡(luò)過(guò)程。
Pod 到 Pod 網(wǎng)絡(luò)
Pod 到 Pod 網(wǎng)絡(luò)可以發(fā)生在同一節(jié)點(diǎn)內(nèi)或跨節(jié)點(diǎn)的 Pod 中。您的每個(gè)節(jié)點(diǎn)都有一個(gè)無(wú)類域間路由 (CIDR) 塊。該塊是分配給該節(jié)點(diǎn)內(nèi)的 Pod 的一組已定義的唯一 IP 地址。這確保了每個(gè) pod 都被提供了一個(gè)唯一的 IP,而不管它在哪個(gè)節(jié)點(diǎn)。
當(dāng) Pod 需要通信時(shí),會(huì)使用虛擬以太網(wǎng)設(shè)備 (VED) 或 veth 對(duì)來(lái)連接 Pod。Veth 對(duì)是分布在命名空間中的耦合網(wǎng)絡(luò)接口。一對(duì)中的一個(gè)分配給根命名空間,另一個(gè)分配給 pod 命名空間。然后,VED 用作兩個(gè)命名空間之間的中介連接。
Pod 到服務(wù)網(wǎng)絡(luò)
Kubernetes 旨在允許根據(jù)需要?jiǎng)討B(tài)替換 pod。這意味著 pod IP 地址不是持久的,除非采取特殊的預(yù)防措施,例如有狀態(tài)的應(yīng)用程序。為了解決這個(gè)問(wèn)題并確保保持與 Pod 之間的通信,Kubernetes 使用了服務(wù)。
Kubernetes 服務(wù)管理 pod 狀態(tài)并使您能夠隨時(shí)間跟蹤 pod IP 地址。這些服務(wù)通過(guò)將單個(gè)虛擬 IP(集群 IP)分配給一組 pod IP 來(lái)抽象 pod 地址。然后,發(fā)送到虛擬 IP 的任何流量都會(huì)分發(fā)到相關(guān)聯(lián)的 pod。
此服務(wù) IP 允許根據(jù)需要?jiǎng)?chuàng)建和銷毀 pod,而不會(huì)影響整體通信。它還使 Kubernetes 服務(wù)能夠充當(dāng)集群內(nèi)負(fù)載均衡器,根據(jù)需要在關(guān)聯(lián)的 pod 之間分配流量。
互聯(lián)網(wǎng)到服務(wù)網(wǎng)絡(luò)
大多數(shù)部署所需的最終網(wǎng)絡(luò)情況是在 Internet 和服務(wù)之間。無(wú)論您是將 Kubernetes 用于內(nèi)部還是外部應(yīng)用程序,您通常都需要 Internet 連接。這種連接使用戶能夠訪問(wèn)您的服務(wù)和分布式團(tuán)隊(duì)進(jìn)行協(xié)作。
在設(shè)置外部訪問(wèn)時(shí),您需要使用兩種技術(shù)——出口和入口。您可以使用白名單或黑名單來(lái)設(shè)置這些策略,以控制進(jìn)出網(wǎng)絡(luò)的流量。
Egress(出口):出口是將流量從您的節(jié)點(diǎn)路由到外部連接的過(guò)程。它通常通過(guò)連接到您的虛擬私有云 (VPC) 的 Internet 網(wǎng)關(guān)完成。此網(wǎng)關(guān)使用網(wǎng)絡(luò)地址轉(zhuǎn)換 (NAT) 在您的用戶和您的節(jié)點(diǎn)所在的機(jī)器之間映射 IP。但是,它無(wú)法映射到您節(jié)點(diǎn)上的各個(gè) Pod。對(duì)于這一步,Kubernetes 使用 IP 表和集群 IP 來(lái)完成通信。Ingress:Ingress 是 Egress 的相反過(guò)程,涉及從外部客戶端到您的 Kubernetes 服務(wù)的通信。它作為一組規(guī)則運(yùn)行,定義允許哪些連接以及阻止哪些連接與您的服務(wù)進(jìn)行通信。結(jié)論
Kubernetes 網(wǎng)絡(luò)使您能夠在 k8s 網(wǎng)絡(luò)內(nèi)配置通信。它基于扁平網(wǎng)絡(luò)結(jié)構(gòu),無(wú)需在主機(jī)和容器之間映射端口。但是,要強(qiáng)制實(shí)施此網(wǎng)絡(luò)模型,您需要使用第三方工具(開(kāi)源或付費(fèi)的),例如 Flannel、Project Calico 和 Weave Net。
此外,在配置 Kubernetes 網(wǎng)絡(luò)時(shí),您需要考慮某些網(wǎng)絡(luò)方面,這在傳統(tǒng)網(wǎng)絡(luò)中是不會(huì)遇到的。其中包括容器到容器網(wǎng)絡(luò)、Pod 到 Pod 網(wǎng)絡(luò)、Pod 到服務(wù)網(wǎng)絡(luò)和 Internet 到服務(wù)網(wǎng)絡(luò)。請(qǐng)務(wù)必妥善規(guī)劃您的網(wǎng)絡(luò),因?yàn)殄e(cuò)誤配置可能會(huì)導(dǎo)致漏洞。
本文鏈接:http://www.yifxia.cn/showinfo-119-2178-0.html容器云架構(gòu) | 了解 Kubernetes 網(wǎng)絡(luò)模型
聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 云原生 PostgreSQL 集群 - PGO:五分鐘快速上手
下一篇: 云安全日?qǐng)?bào)220224:IBM混合云數(shù)據(jù)庫(kù)發(fā)現(xiàn)執(zhí)行任意代碼漏洞,需要盡快升級(jí)