k8s集群網路(1)-簡介
- 2020 年 4 月 1 日
- 筆記
在以前系列文章中我們以學習為目的介紹了二進位手動安裝k8s集群,這裡也是一個系列文章,同樣以學習為目的,我們介紹k8s集群網路。對於網路基本涉及兩個方面,一是到各個服務的網路間負載均衡,另一個是網路間的通訊。
對於k8s來說網路間的負載均衡是由infrastructure實現的,即對於部署在集群中的各個pod是透明無感知的。基本的實現有2種方式,iptable方式和ipvs方式。
對於iptable方式是k8s默認的網路負載均衡模式,顧名思義就是利用linux iptable中的nat實現負載均衡。對於ipvs方式是在1.11版本中引入的,利用linux ipvs內核模組來實現負載均衡(大名鼎鼎的LVS同樣也是利用ipvs來實現的負載均衡)。我們以前文章里並沒有刻意配置k8s負載均衡策略,所以是默認的iptable方式。如果希望以ipvs方式運行,那麼需要在kube-proxy網路組件的啟動參數中加入--proxy-mode=ipvs。
對於容器之間的網路通訊總結起來基本分為兩種,underlay方式和overlay方式。underlay方式在通訊過程中沒有額外的封包,通常將容器的宿主作為路由來實現數據包的轉發,需要宿主開啟網路轉發功能(net.ipv4.ip_forward = 1)。常見的實現方案有flannel host-gw方式,calico bgp方式。
overlay方式在通訊過程中有額外的封包,例如flannel vxlan方式(在三層網路里構建二層網路,即在udp包里封裝eth以太包),calico ipip模式(在ip包里再次封裝ip包)。還有flannel udp方式,在upd包里封裝ip包(當然這種方式使用tun device,每次通訊都涉及到用戶態到內核態的切換,所以效率不高,基本是不會被用的。不過作為學習入手是可以的)。
所以總結一下,對於k8s網路基本會包括以下方面
- 網路負載均衡 iptable方式(默認負載均衡策略) ipvs方式(v1.11以及以後版本)
- 網路間通訊 underlay網路:flannel host-gw,calico bgp等方式 overlay網路:flannel vxlan,calico ipip,flannel udp等方式
