目录
熟悉哪些网络插件?各自有什么模式?插件与插件之间,模式与模式之间有什么区别?
模式基本分两种,用了隧道技术和没有使用隧道技术,即覆盖网络方案和路由方案
网络插件相关
熟悉哪些网络插件?各自有什么模式?插件与插件之间,模式与模式之间有什么区别?
这几个问题的核心其实是一样的,解构这个问题,其实面试官关心的是你对于不同的插件/模式的理解,它们是怎么设计的,实现原理是什么,如何选择以提升网络性能即减少传输过程中对性能的损耗,那么你就需要回答出以下几点:
-
网络插件解决了什么问题
网络插件本质是为了解决pod的跨节点通信问题
-
同一节点的pod间通信通过veth-pair和docker0网桥
-
pod与公网通信通过iptables的masquerade
-
pod与service通信通过iptables的nat转换,在iptables的prerouting上截获所有到达主机的数据包,转到docker chain上,docker chain上通过dnat把主机地址切换到container的地址
-
跨节点pod通信需要网络插件支持
K8S 快速入门(五)网络通信原理:Pod网络(上)_男人至死是少年95的博客-CSDN博客_pod网络
-
-
模式基本分两种,用了隧道技术和没有使用隧道技术,即覆盖网络方案和路由方案
flannel有以下模式
-
utp
utp模式适用于测试环境或者不支持vxlan的老内核下的操作系统
-
vxlan
vxlan模式是flannel的默认模式,它使用一种隧道协议,将二层以太网帧封装在四层UDP报文中,通过三层网络传输,组成一个虚拟大二层网络。报文的流向有如图所示:
其中,在出向时flannel会对报文进行封装,对端节点的flannel则会解包。在这个转发流程中,flannel能够获得下一跳的ip地址的原理是,flanneld通过和apiserver交互,获得etcd中维护的一张kv表的数据。
-
host-gateway
host-gateway模式简而言之就是直接把节点作为网关,但需要基础网络架构的支持,需要在二层网络同一个交换机下才能实现。可以通过在node1上通过ip route查看往pod2 ip网段路由的下一跳(via)是node2的主机ip。
相比之下,因为少了flanneld的封包解包,host-gateway模式的效率更高。
calico有以下模式
-
BGP
BGP模式全称边缘网关协议,是 calico的默认模式,类似于flannel的host-gw
-
IPIP
IPIP和vxlan模式类似,是一种将各Node的路由之间做一个tunnel,再把网络连接起来的模式:
简单理解,就是将一个IP数据包套在另一个IP包里,使用到了Linux提供的隧道技术。可以理解为一个基于IP层的网桥,将两个本不通的网络通过点对点连接起来。
网上很多文章,会讨论flannel和calico的区别,包括一些面试官可能也会问两者区别。但是这是不准确的,因为flannel的vxlan和calico的ipip类似,flannel的host-gw和calico的bgp类似,不能把他们交叉比较,所以其实还是模式和模式的区别,即覆盖网络方案和路由方案的区别:覆盖网络方案采用了隧道封包技术,所以会有一定的性能开销;路由方案基本等同于主机间的通信,但是需要基础网络架构的支持,我们在生产环境中肯定优先考虑高性能的方案。除此之外,不同网络插件在使用方面有一定的差异,我将在下点阐述
-
-
网络插件在使用方面的差异
-
flannel不支持NetworkPolicy
-
calico的BGP模式可以无缝集成像OpenStack这种IaaS云架构,能够提供可控的VM、容器、裸机之间的IP通信
-
-
云厂商提供的网络插件,有什么优点,解决了什么问题
不同的云厂商都各自实现了网络插件,这些插件基本都是基于calico的BGP模式,但值得注意的是,同样需要网络设备的支持,而阿里云vpc子网内应该是不支持BGP的,因此在云上的环境,云厂商需要针对自家的vpc对calico做一层包装,比如阿里云的Terway和AWS的vpn-cni,它们正是在这样的背景下诞生的,本文以Terway为例,讲述其主要的优点
-
启用Terway插件下,SLB后端直接对接Pod,而Flannel插件下SLB后端不能直接对接Pod,需要通过NodePort转发
-
启用Terway插件下,Pod地址即为VPC中地址,无NAT损耗支持独占ENI模式,几乎无损
更具体的区别可以参照以下文档:
-
值得一提的是,在选取Terway插件时,默认都是不开启NetworkPolicy的,在云上隔离安全限制的最佳实践还是安全组。
参考资料:
K8S 快速入门(五)网络通信原理:Pod网络(上)_男人至死是少年95的博客-CSDN博客_pod网络
基于阿里云Terway网络的Kubernetes集群实践_BGBiao的博客-CSDN博客