kubernetes主导的网络模型是什么?

参与7

2同行回答

GaryyGaryy系统工程师某保险
容器技术很火,经常为人所提及,尤其是开源容器工具docker,已在不少数据中心里有广泛应用。容器主要是对软件和其依赖环境的标准化打包,将应用之间相互隔离,并能运行在很多主流操作系统上。这样看来容器和虚拟机技术很类似,容器是APP层面的隔离,而虚拟化是物理资源层面的隔离,容器...显示全部

容器技术很火,经常为人所提及,尤其是开源容器工具docker,已在不少数据中心里有广泛应用。容器主要是对软件和其依赖环境的标准化打包,将应用之间相互隔离,并能运行在很多主流操作系统上。这样看来容器和虚拟机技术很类似,容器是APP层面的隔离,而虚拟化是物理资源层面的隔离,容器解决了虚拟技术的不少痛点问题,很多时候容器可以和虚拟机结合在一起使用,这也是目前数据中心主流的做法。
当企业IT建设容器云平台时,会碰到一系列的挑战,根据CNCF的调查报告指出,容器的网络和安全实现成为容器云平台建设最主要的挑战,当企业开始将重要的企业核心应用迁移至容器平台,缺乏足够的网络和安全管控将会给业务上线带来潜在的巨大威胁。
除了容器,如何更好的链接不同K8S集群孤岛,如何链接异构容器云平台,这些都是一系列的网络问题需要考虑。容器网络技术也在持续演进,从docker本身的动态端口映射网络模型,到CNCF的CNI容器网络接口到Service Mesh+CNI层次化SDN。

CNI(Container Network Interface) 是 google 和 CoreOS 主导制定的容器网络标准,它 是在 RKT 网络提议 的基础上发展起来的,综合考虑了灵活性、扩展性、IP分配、多网卡等因素。CNI旨在为容器平台提供网络的标准化。不同的容器平台(比如目前的 Kubernetes、Mesos 和 RKT)能够通过相同的接口调用不同的网络组件。这个协议连接了两个组件:容器管理系统和网络插件,具体的事情都是插件来实现的,包括:创建容器网络空间(network namespace)、把网络接口(interface)放到对应的网络空间、给网络接口分配 IP 等。
目前采用CNI提供的方案一般分为两种,隧道方案和路由方案。Overlay,OVS,Flannel和Weave网络方案
1.Calico
Callico容器网络和其他虚拟网络最大的不同是,它没有采用overlay网络做报文转发,提供了纯三层网络模型。三层通信模型表示每个容器都通过IP直接通信,要想路由工作能够正常,每个容器所在的主机节点必须有某种方法知道整个集群的路由信息,Callico采用 BGP路由协议,使得全网所有的Node和网络设备都记录到全网路由,然而这种方式会产生很多的无效路由,对网络设备路由规格要求较大,整网不能有路由规格低的设备。另外,Callico实现了从源容器经过源宿主机,经过数据中心路由,然后到达目的宿主机,最后分配到目的容器,整个过程中始终都是根据BGP协议进行路由转发,并没有进行封包,解包过程,这样转发效率就会快得多,这是Callico容器网络的技术优势。
2.Flannel
Flannel是CoreOS提出用于解决容器集群跨主机通讯的网络解决方案。Flannel实质上是一种覆盖网络Overlay network,也就是将TCP数据包装在另一种网络包里面进行路由转发和通信,目前已支持UDP、VXLAN、AWS VPC、GCE路由等数据转发方式,其中以VXLAN技术最为流行,很多数据中心在考虑引入容器时,也考虑将网络切换到Flannel的VXLAN网络中来。Flannel为每个主机分配一个subnet,容器从此subnet中分配IP,这些IP可在主机间路由,容器间无需NAT和端口映射就可以跨主机通讯。Flannel让集群中不同节点主机创建容器时都具有全集群唯一虚拟IP地址,并连通主机节点网络。Flannel可为集群中所有节点重新规划IP地址使用规则,从而使得不同节点上的容器能够获得“同属一个内网”且“不重复的”的IP地址,让不同节点上的容器能够直接通过内网IP通信,网络封装部分对容器是不可见的。源主机服务将原本数据内容UDP封装后根据自己的路由表投递给目的节点,数据到达以后被解包,然后直接进入目的节点虚拟网卡,然后直接达到目的主机容器虚拟网卡,实现网络通信目的。Flannel虽然对网络要求较高,要引入封装技术,转发效率也受到影响,但是却可以平滑过渡到SDN网络,VXLAN技术可以和SDN很好地结合起来,值得整个网络实现自动化部署,智能化运维和管理,较适合于新建数据中心网络部署。
3.Weave
Weave实质上也是覆盖网络,Weave可以把不同主机上容器互相连接的网络虚拟成一个类似于本地网络的网络,不同主机之间都使用自己的私有IP地址,当容器分布在多个不同的主机上时,通过Weave可以简化这些容器之间的通信。Weave网络中的容器使用标准的端口提供服务(如MySQL默认使用3306),管理微服务是十分直接简单的。每个容器都可以通过域名来与另外的容器通信,也可以直接通信而无需使用NAT,也不需要使用端口映射或者复杂的联接。部署Weave容器网络最大的好处是无需修改你的应用代码。Weave通过在容器集群的每个主机上启动虚拟路由器,将主机作为路由器,形成互联互通的网络拓扑,在此基础上,实现容器的跨主机通信。要部署Weave需要确保主机Linux内核版本在3.8以上,Docker1.10以上,主机间访问如果有防火墙,则防火墙必须彼此放行TCP 6783 和UDP 6783/6784这些端口号,这些是Weave控制和数据端口,主机名不能相同,Weave要通过主机名识别子网。Weave网络类似于主机Overlay技术,直接在主机上进行报文流量的封装,从而实现主机到主机的跨Underlay三层网络的互访,这是和Flannel网络的最大区别,Flannel是一种网络Overlay方案。
4.Macvlan
Macvlan 是 linux kernel 比较新的特性,允许在主机的一个网络接口上配置多个虚拟的网络接口,这些网络 interface 有自己独立的 mac 地址,也可以配置上 ip 地址进行通信。macvlan 下的虚拟机或者容器网络和主机在同一个网段中,共享同一个广播域。macvlan 和 bridge 比较相似,但因为它省去了 bridge 的存在,所以配置和调试起来比较简单,而且效率也相对高。除此之外,macvlan 自身也完美支持 VLAN。

不同的容器网络方案,适用于不同的应用场景,就看企业如何选择了,从难易度上来讲,Callico最简单,其次Flannel,Weave最复杂,从网络技术来看,Weave和Flannel都是网络封装技术,区别在于封装的位置在网络设备上还是主机上。

下图是4中方案的比较。

收起
保险 · 2020-09-08
浏览1008
mileskuomileskuo金融云架构师平安科技
IPIP方式的原理是什么呢?显示全部

IPIP方式的原理是什么呢?

收起
银行 · 2020-09-09
浏览996
  • node节点创建一个tun设备,容器的数据经过该设备会再封装一个ip进行转发
    2020-09-09

提问者

sunyifeng
系统运维工程师唐山瑞丰钢铁(集团)有限公司
擅长领域: 服务器云计算容器

问题来自

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2020-09-07
  • 关注会员:3 人
  • 问题浏览:1825
  • 最近回答:2020-09-09
  • X社区推广