k8s集群网络(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等方式