天天看點

#yyds幹貨盤點#K8S 之網絡互聯通信

​Pod 本質上是共享 Network、IPC 和 UTS 名稱空間以及存儲資源的容器集合,我們可以把每個 Pod 對象想象成一個邏輯主機,它類似于現實世界中的實體主機或虛拟機,而運作于同一個 Pod 對象中多個程序則類似于實體機或虛拟機上獨立運作的程序,不同的是,Pod 中各程序運作于彼此隔離的容器中,并于各容器間共享網絡和存儲兩種關鍵資源。​

#yyds幹貨盤點#K8S 之網絡互聯通信

​Service 是由基于比對規則在叢集中挑選出的一組 Pod 對象的集合、通路這組 Pod 集合的固定 IP 位址,以及對請求進行排程的方法等功能所構成的一種 API 資源類型,是 Pod 資源的代理和負載均衡器​。Service 比對 Pod 對象的規則可用“标簽選擇器”進行展現,并根據标簽來過濾符合條件的資源對象。

​Kubernetes 使用定制的 DNS 服務為這類需求提供了自動的服務注冊和服務發現功能​。CoreDNS 附件會為叢集中的每個 Service 對象(包括 DNS 服務自身)生成唯一的 DNS 名稱辨別,以及相應的 DNS 資源記錄,服務的 DNS 名稱遵循标準的 svc.namespace.svc.cluster-domain 格式。

除非出于管理目的有意調整,​Service 資源的名稱和 ClusterIP 在其整個生命周期内都不會發生變動。

​控制器​是支撐 Kubernetes 聲明式 API 的關鍵元件,它持續監視對 API Server 上的 API 對象的添加、更新和删除等更改操作,并在發生此類事件時執行目标對象相應的業務邏輯,進而将用戶端的管理指令轉為對象管理所需要的真正的操作過程。簡單來說,​一個具體的控制器對象是一個控制循環程式,它在單個 API 對象上建立一個控制循環以確定該對象的狀态符合預期。

Kubernetes 的網絡中存在 4 種主要類型的通信:​同一 Pod 内的容器間通信、各 Pod 彼此間通信、Pod 與 Service 間的通信以及叢集外部的流量與 Service 間的通信。

​節點網絡​:各主機(Master 和 Node)自身所屬的網絡,相關 IP 位址配置在節點的網絡接口,用于各主機之間的通信,例如 Master 與各 Node 間的通信。此位址配置在 Kubernetes 叢集建構之前,它并不能由 Kubernetes 管理,需要管理者在叢集建構之前就自行确定其位址配置及管理方式。

​Pod 網絡​:Pod 對象所屬的網絡,相關位址配置在 Pod 網絡接口,用于各 Pod 間的通信。Pod 網絡是一種虛拟網絡,需要通過傳統的 kubenet 網絡插件或新式的 CNI 網絡插件實作,常見的實作機制有 Overlay 和 Underlay 兩種。

​Service 網絡​:一個虛拟網絡,相關位址不會配置在任何主機或 Pod 的網絡接口之上,而是通過 Node 上的 kube-proxy 配置為節點的 iptables 或 ipvs 規則,進而将發往此位址的所有流量排程至 Service 後端的各 Pod 對象之上;Service 網絡在 Kubernetes 叢集建立時予以指定,而各 Service 的位址則在使用者建立 Service 時予以動态配置。

kubernetes 叢集上的服務大緻可分為兩種​:API Server 和服務類應用​,它們的用戶端要麼來自叢集内的其他 Pod,要麼來自叢集外部的使用者或應用程式。​前一種通信通常發生在 Pod 網絡和 Service 網絡之上的東西向流量​;而​後一種通信,尤其是通路運作于 Pod 中的服務類應用的南北向流量​,則需要先經由叢集邊界進入叢集内部的網絡中,即由節點網絡到達 Service 網絡和 Pod 網絡。

k8s

繼續閱讀