歡迎光臨
每天分享高質量文章

Kubernetes網絡模型原理

關註我們獲得更多精彩內容

導語:Kubernetes 目前看來已經成為了docker的應用最多的編排工具,所以學習使用docker容器的話,就免不了使用 Kubernetes,但是其網絡原理還是比較晦澀難懂,所以還是有必要專門解析關於 Kubernetes 的網絡原理。

Kubernetes 的網絡模型組成


  • Pod 內部 docke r容器之間網絡通信[基礎 docker 網絡理論]

  • Pod 所在的網絡之間通信[基礎 docker 網絡理論]

  • Pod 和 Service 之間網絡通信[ Kubernetes 網絡理論]

  • 外界與Service之間網絡通信[ Kubernetes 網絡理論]

Pod 內部 docker 容器之間網絡通信


Kubernetes 使用了一種 “IP-per-pod” 網絡模型:為每一個 Pod 分配了一個IP地址,Pod 內部的 docker 容器共享Pod的網絡空間,即它們共享 Pod 的網卡和 IP。其原理是根據 docker 的“container 網絡”模型而來。

Pod 所在的網絡之間通信


Kubernetes 把各 node 主機上的 docker的 bridge 網絡“外包”給了 flannel,然後通過 etcd 將各 node 主機上的 bridge 網絡信息收集起來,因此每個 node 之間的網絡使用的是同網絡的不同 IP,保證了網絡通訊的可靠性。其原理是根據 docker 的“bridge 網絡”模型而來。

Pod 和 Service 之間網絡通信


在 Kubernetes 體系中Pod是不穩定的,Pod 的 IP 地址會發生變化,所以 Kubernetes 引進了 Service 的概念。Service 是一個抽象的物體,Kubernetes 在創建 Service 物體時,為其分配了一個虛擬的 IP,當外界需要訪問 Pod 里的容器提供的功能時,不直接使用 Pod 的 IP 地址和端口,而是訪問 Service 的這個虛擬 IP 和端口,由 Service 把請求轉發給它背後的 Pod。

Kubernetes 在創建 Service 時,根據 Service 的標簽選擇器(Label

Selector)來查找 Pod,據此創建與 Service 同名的 EndPoints 物件。當Pod的地址發生變化時,EndPoints 也隨之變化。Service 接受到請求時,就能通過 EndPoints 找到對應的 Pod。再深入探究,Service 只是一個虛擬的概念,真正完成請求轉發的是運行在 node 節點上的 kube-proxy。Service的虛擬IP就是由kube-proxy實現的。

kube-proxy 有兩種請求轉發樣式:userspace 樣式和 iptables 樣式。在 Kubernetes
v1.1版本之前預設是userspace 樣式,v1.2 版本後預設是 iptables 樣式。

補充說明 iptables 樣式:


當創建 Service 時,所有 node 節點上的 kube-proxy 都會建立兩級 iptables 規則,一級為 Service 創建,目的是將的流量轉給後端,另一級為 EndPoints 創建,目的是用於選擇 Pod。當 service.spec.sessionAffinity 值為 ”ClientIP” 時,iptables樣式選擇 Pod 的演算法和 userspace 樣式相同(選擇與請求來源IP更接近的 Pod)。當 service.spec.sessionAffinity 值為”None”時,隨機選擇Pod,所以如果被選擇的 Pod 沒有響應,不會嘗試選擇另一個 Pod。

外界與Service之間網絡通信


①ClusterIP 型別,這種型別的 Service 只會得到虛擬的 IP 和端口,只能在 Kubernetes 集群內部被訪問,此模型是為預設型別。

②NodePort 型別,這種型別的 Service 除了會得到虛擬的IP和端口,Kubernetes 還會在所有 node 節點上為其分配端口。分配的端口的值可以通過 spec.ports[*].nodePort 指定,或由 Kubernetes 在配置好的區間里分配(預設為 30000-32767)。這種 Service 即可以從 Kubernetes 集群通過虛擬 IP:端口訪問,也可以從集群外部通過Node節點的 IP:nodePort 訪問。

③LoadBalancer 型別,這種型別的 Service 除了會得到虛擬的 IP 和端口,Kubernetes 還會在所有 Node節點上為其分配端口,然後為其開通負載均衡。這種 Service 即可以從 Kubernetes 集群通過虛擬IP:端口訪問,也可以從集群外部通過  node 節點的 IP:nodePort訪問,還可以通過負載均衡的 IP 訪問。

總結


Kubernetes 網絡模型的理解會對使用第三方產商提供的服務有更深刻的體會,比如阿裡雲,華為雲都已經全面支持 Kubernetes 的編排。其中涉及了很多 Kubernetes 的基本原理,回過頭來仔細想想,也無非是萬變不離其宗。

赞(0)

分享創造快樂