1. 程式人生 > >Kubernetes之叢集網路

Kubernetes之叢集網路

一、Docker網路基礎

在討論Kubernetes網路之前,我們先看一下Docker網路。 下圖展示了Docker網路在整個Docker生態技術棧中的位置: 在這裡插入圖片描述 docker容器網路模型CNM(Container Network Model): 在這裡插入圖片描述

  • Network Sandbox:一個容器內部的網路棧(管理容器的網絡卡、路由表以及DNS設定等)。

  • Endpoint:一個endpoint將Sandbox連結到network上,一個endpoint可以通過veth pair/open vswitch internal port等方式實現,一個endpoint只能屬於一個network,也只能屬於一個sandbox。

  • Network:一個network由一組可以相互通訊的endpoints組成。一個network可以由linux bridge,vlan或其他方式實現,一個network中可以包含多個endpoint。 Docker網路實現

  • 單機網路模式:bridge、host、joined、none

  • 多級網路模式:overlay、macvlan、network plugins。 預設情況下,Docker使用bridge網路模式,bridge網路驅動的示意圖如下: 在這裡插入圖片描述

二、Kubernetes網路

kubernetes網路需要解決下面4個問題:

  • 叢集內
  1. 同一個Pod中的container之間的通訊
  2. Pod和Pod之間的通訊
  3. Pod和Service之間的通訊
  • 叢集外
  1. 外部應用與Service之間的通訊

2.1. 同一個Pod中容器之間的通訊

Kubernetes建立Pod時,首先會建立一個稱為pause的基礎架構容器,為Pod指派一個唯一的IP地址,然後以pause的網路名稱空間為基礎,建立同一個Pod內的其他容器(–network={container})。因此同一個Pod內的所有容器就會共享同一個網路名稱空間,所以在同一個Pod內的容器可以直接由localhost進行通訊。

2.2. 不同Pod中容器之間的通訊

Kubernetes通過flannel、calico等網路外掛解決Pod間的通訊問題。本文主要介紹flannel和calico網路外掛。

2.2.1 Flannel

flannel會為宿主機預先分配一個子網,併為Pod分配IP地址,並且使用Kubernetes的etcd來儲存網路配置相關資訊,資料包則通過VxLAN(+Directrouting)、UDP、host-gw這些型別的後端機制進行轉發。 在這裡插入圖片描述 網路策略定義了某一組Pod與另外一組Pod或者其他網路端點通訊的規則