k8s通过CNI接口接入其他插件来实现网络通讯。目前比较流行的插件有flannel,calico等。 CNI插件存放位置:# cat /etc/cni/net.d/10-flannel.conflist
插件使用的解决方案如下: 虚拟网桥,虚拟网卡,多个容器共用一个虚拟网卡进行通信。 多路复用:MacVLAN,多个容器共用一个物理网卡进行通信。 硬件交换:SR-LOV,一个物理网卡可以虚拟出多个接口,这个性能最好
容器间通信:同一个pod内的多个容器间的通信,通过lo即可实现;
pod之间的通信: 同一节点的pod之间通过cni网桥转发数据包。 不同节点的pod之间的通信需要网络插件支持。
pod和service通信: 通过iptables或ipvs实现通信,ipvs取代不了iptables,因为ipvs只能做 负载均衡,而做不了nat转换
pod和外网通信:iptables的MASQUERADE。
Service与集群外部客户端的通信;(ingress、nodeport、loadbalancer)
flannel网络
flannel网络原理
当容器发送IP包,通过veth pair 发往cni网桥,再路由到本机的flannel.1设备进行处理。 • VTEP设备之间通过二层数据帧进行通信,源VTEP设备收到原始IP包后,在上面加 上一个目的MAC地址,封装成一个内部数据帧,发送给目的VTEP设备。 • 内部数据桢,并不能在宿主机的二层网络传输,Linux内核还需要把它进一步封装成 为宿主机的一个普通的数据帧,承载着内部数据帧通过宿主机的eth0进行传输。 • Linux会在内部数据帧前面,加上一个VXLAN头,VXLAN头里有一个重要的标志叫 VNI,它是V