轉自以下博客:
https://blog.csdn.net/yang75108/article/details/101101384?spm=1001.2014.3001.5501
https://blog.csdn.net/yang75108/article/details/101267444
https://blog.csdn.net/yang75108/article/details/101268208
這篇三篇文章以分層的形式寫K8s 的網絡架構,深入淺出,值得收藏。
網絡分層:
第0層網絡是節點網絡,直接對外暴露
第1層 POD 網絡
同一個Node上,同一個pod的網絡模式如下圖:
關於docker0的理解:Docker在宿主機上默認的網絡配置方式是bridge模式,docker server在啟動的時候會自動在宿主機上創建一個名為docker0的虛擬網橋。同一個node上不同pod就是根據docker0進行尋址和網絡連接。
veth0是pod的虛擬網卡,pod內部的不同容器就是根據veth0進行尋址和互相訪問
同一個Node上不同pod之間的網絡連接方式:
不同node之間的pod訪問有兩種方案,一是路由,二是overlay,結構圖分別如下:
路由:
overlay
由於pod 網絡實現方法眾多,引入了CNI(container network interface),采用這個插件可以實現Pod的網絡的操作,不需要關心具體實現細節。
第2層:Service 網絡:
K8S master 上有個etcd組件,是這個網絡機制的核心。關於etcd的原理和workflow可以參考文章https://zhuanlan.zhihu.com/p/96908130
etcd會接收保存K8s中所有資源的信息,node中的Kubelet把信息實時傳給master中的etcd,這就是上圖中的服務注冊,kube-DNS和kube-proxy獲取etcd中的信息就是上圖中的服務發現。
kube-DNS保存serviceName->ClusterIP的信息。ClusterIP並不是一成不變的,ServiceName是唯一的。Kube-Proxy保存CluserIP->PodIP的信息。這樣兩層可以實現POD 在集群之間的網絡連接。
第4層:外部接入網絡:
這部分還需要進一步消化,后面再補上
K8S 網絡涉及的相關的概念