kubernetes實踐之二十:網路原理
一:體系結構圖
二:說明
1.網路名稱空間
處於不同名稱空間的網路棧是完全隔離的,彼此之間無法通訊,就好像兩個“平行宇宙”,通過對這種網路資源的隔離,就能在一個宿主機上虛擬多個不同的網路環境。
2.網路名稱空間的通訊,Veth裝置對
引入Veth裝置對是為了在不同的網路名稱空間之間進行通訊,利用它可以直接將兩個網路名稱空間連線起來。由於要連線兩個網路名稱空間,所以Veth裝置都是成對出現的,很像一對乙太網網路卡,並且中間有一根直連的網線。
3.網橋
Linux核心通過一個虛擬的網橋裝置來實現乙太網口(Veth)之間的橋接。
4.Docker的網路實現
Docker Daemon第一次啟動時會建立一個虛擬的網橋,預設的名字是docker0,在私有網路空間中給這個網橋分配一個子網。
針對由Docker建立出來的每一個容器,都會建立一個虛擬的Veth裝置對,其中一端關聯到網橋上,另一端使用Linux的網路名稱空間技術,對映到容器內的eth0裝置,然後從docker0網橋的地址段內給eth0介面分配一個IP地址
5.kubernetes容器之間通訊
Pod內的容器共享一個網路名稱空間,共享一個Linux協議棧,可以用localhost地址訪問彼此的埠
二:說明
1.網路名稱空間
處於不同名稱空間的網路棧是完全隔離的,彼此之間無法通訊,就好像兩個“平行宇宙”,通過對這種網路資源的隔離,就能在一個宿主機上虛擬多個不同的網路環境。
2.網路名稱空間的通訊,Veth裝置對
引入Veth裝置對是為了在不同的網路名稱空間之間進行通訊,利用它可以直接將兩個網路名稱空間連線起來。由於要連線兩個網路名稱空間,所以Veth裝置都是成對出現的,很像一對乙太網網路卡,並且中間有一根直連的網線。
3.網橋
Linux核心通過一個虛擬的網橋裝置來實現乙太網口(Veth)之間的橋接。
4.Docker的網路實現
Docker Daemon第一次啟動時會建立一個虛擬的網橋,預設的名字是docker0,在私有網路空間中給這個網橋分配一個子網。
針對由Docker建立出來的每一個容器,都會建立一個虛擬的Veth裝置對,其中一端關聯到網橋上,另一端使用Linux的網路名稱空間技術,對映到容器內的eth0裝置,然後從docker0網橋的地址段內給eth0介面分配一個IP地址
5.kubernetes容器之間通訊
Pod內的容器共享一個網路名稱空間,共享一個Linux協議棧,可以用localhost地址訪問彼此的埠
6.kubernetes同一Node的Pod間通訊
同一Node中Pod的預設路由都是docker0的地址,由於它們關聯在同一個docker0網橋上,地址網段相同,所有它們之間應當是能直接通訊的。
同一Node中Pod的預設路由都是docker0的地址,由於它們關聯在同一個docker0網橋上,地址網段相同,所有它們之間應當是能直接通訊的。
7.kubernetes不同Node的Pod間通訊
不同Node中Pod間通訊要滿足2個條件: Pod的IP不能衝突; 將Pod的IP和所在的Node的IP關聯起來,通過這個關聯讓Pod可以互相訪問。
不同Node中Pod間通訊要滿足2個條件: Pod的IP不能衝突; 將Pod的IP和所在的Node的IP關聯起來,通過這個關聯讓Pod可以互相訪問。
8.Flannel工作原理
9.Calico架構
Flannel實質上是一種“覆蓋網路(overlay network)”,也就是將TCP資料包裝在另一種網路包裡面進行路由轉發和通訊,目前已經支援UDP、VxLAN、AWS VPC和GCE路由等資料轉發方式。
1. 資料從源容器中發出後,經由所在主機的docker0虛擬網路卡轉發到flannel0虛擬網路卡,這是個P2P的虛擬網路卡,flanneld服務監聽在網路卡的另外一端。
2.Flannel通過Etcd服務維護了一張節點間的路由表。
3. 源主機的flanneld服務將原本的資料內容UDP封裝後根據自己的路由表投遞給目的節點的flanneld服務,資料到達以後被解包,然後直接進入目的節點的flannel0虛擬網路卡,然後被轉發到目的主機的docker0虛擬網路卡,最後就像本機容器通訊一下的有docker0路由到達目標容器。9.Calico架構
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28624388/viewspace-2153186/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- kubernetes實踐之五:網路模型模型
- kubernetes實踐之四:Flannel網路外掛安裝
- kubernetes實踐之二十六:GlusterFS
- kubernetes實踐之二十七:Harbor
- kubernetes實踐之二十二:Pod
- kubernetes實踐之二十三:ReplicationControllerController
- kubernetes實踐之二十四:Service
- kubernetes實踐之四十九:Scheduler原理分析
- kubernetes實踐之四十五:API Server原理分析APIServer
- Kubernetes容器雲的網際網路企業實踐
- kubernetes實踐之二十九:Kubernetes+Harbor+Gitlab+Jenkins+Maven DevOpsGitlabJenkinsMavendev
- kubernetes實踐之十一:EFK
- kubernetes實踐之六十:Cabin-Manage Kubernetes
- 【kubernetes】網路虛擬網路卡對veth pair、flannel網路模型實現原理AI模型
- kubernetes實踐之二十一:物件與元件簡介物件元件
- kubernetes實踐之六十六:Istio實現金絲雀釋出原理
- Kubernetes網路分析之Flannel
- kubernetes實踐之五十七:PodPreset
- kubernetes實踐之五十八:CronJob
- kubernetes實踐之五十二:Helm
- kubernetes實踐之五十九:NetworkPolicy
- kubernetes實踐之十九:API概述API
- kubernetes實踐之十七:架構架構
- kubernetes實踐之八:TLS bootstrappingTLSbootAPP
- kubernetes實踐之二十五:儲存卷 PV&PVC
- kubernetes實踐之十:Kubernetes-dashboard+Heapster+InfluxDB+GrafanaUXGrafana
- kubernetes實踐之四十二:StatefulSet
- kubernetes實踐之六十四:CoreDNSDNS
- kubernetes實踐之五十六:雲原生
- kubernetes實踐之十二:部署Traefik Ingress
- kubernetes實踐之九:kube-dnsDNS
- GitOps實踐之kubernetes安裝argocdGitGo
- Kubernetes網路解決方案技術原理深入剖析-Kubernetes商業環境實戰
- kubernetes實踐之五十五:kubectl之配置kubeconfig
- kubernetes實踐之十四:Service Account與Secret
- kubernetes實踐之四十七:ResourceQuota ControllerController
- kubernetes實踐之六十五:Service Mesh
- kubernetes實踐之六十二:Secret 使用