一、Kubernetes 基本網絡模型
Kubernetes 的容器網絡模型可以把它歸結為約法三章和四大目標。
1、約法三章
約法三章確保了Kubernetes容器網絡模型的基本特性:
① 任意兩個 pod 之間可以直接通信:在Kubernetes中,每個 Pod 都被分配了一個唯一的IP地址,這使得任意兩個Pod之間可以直接通信。
② 跨主機通信:在Kubernetes集群中,節點(node)與 Pod 之間可以直接通信,不需要進行明顯的地址轉換。
③ Pod 的 IP 地址不會變化:Pod 內部使用的 IP 地址與外部看到的 IP 地址是一致的,中間不會經過地址轉換。
2、四大目標
當設計一個Kubernetes系統以向外部世界提供服務時,需要考慮如何實現以下四個目標:
① 外部世界和 service 之間怎么通信:Service 作為一種抽象,代表了一組提供相同功能的 Pod 的訪問入口,外部流量通過 Service 來連接到容器內部的應用。
② service 如何與它后端的 pod 通信:Service 與后端的 Pod 之間的通信是通過Kubernetes 的內部 DNS 解析和負載均衡實現的。
③ pod 和 pod 之間通信的:每個 Pod 擁有自己的 IP 地址,因此 Pod 可以直接使用對方的 IP 地址進行通信。
④ pod 內部容器與容器之間的通信:Pod 內部容器之間的通信是通過 localhost 進行的,就像在同一臺主機上的多個進程之間通信一樣。
3、基本約束
基本約束是指在設計容器網絡時,需要遵循的一些基本規則或限制,以確保網絡的正常運行和安全性。分為 Underlay/Overlay 兩大派別:
● Underlay網絡:通常采用與主機網絡相同的網段,將容器網絡直接映射到主機網絡的一種方案。
● Overlay網絡:是在底層網絡之上構建的虛擬網絡,容器在此虛擬層面上進行通信,不直接與主機網絡交互。
Underlay 網絡更加與主機網絡直接集成,但可能受主機網絡的限制 ;而 Overlay 網絡更加獨立,但需要額外的虛擬化層支持。
二、Network Namespace
1、介紹
網絡命名空間(Network Namespace)用于創建和管理網絡虛擬化環境。每個網絡命名空間都擁有獨立的網絡棧,包括獨立的附屬網絡設備(如 lo、eth0 等虛擬設備或者物理網卡)、獨立的協議棧、IP地址和路由表、iptables規則等。這樣的隔離性使得不同網絡命名空間中的網絡資源相互獨立,從而實現了網絡虛擬化。
2、Pod 與 Netns 的關系
(1) Pod中的Netns關系:
每個Pod都有自己獨立的網絡命名空間(Netns),Pod中的每個容器(container)都共享同一個網絡命名空間。
(2) Pod的網絡模型:
在Pod中,容器之間通常通過 Loopback 接口(127.0.0.1)進行通信 ;對外服務時,所有容器通過Pod的IP地址對外提供服務,不需要對外暴露各自的IP地址。
(3) 宿主機上的 Root Netns:
宿主機上也存在一個特殊的網絡命名空間,稱為 Root Netns。Root Netns 的進程 ID(PID)是1,因為它是整個系統的網絡命名空間根節點。
三、Network Policy
1、介紹:
Network Policy 提供了基于策略的網絡控制,用于隔離應用并減少攻擊面。它使用標簽選擇器模擬傳統的分段網絡,并通過策略控制它們之間的流量以及來自外部的流量。
2、實例:
① 允許 default namespace 中帶有 role=frontend 標簽的Pod 訪問 default namespace 中帶有 role=db 標簽 Pod的6379 端口。
② 允許帶有 project=myprojects 標簽的 namespace 中所有 Pod 訪問 default namespace 中帶有 role=db 標簽Pod 的6379 端口。