云原生网络架构

【云原生网络架构】得意犹堪夸世俗,诏黄新湿字如鸦。这篇文章主要讲述云原生网络架构相关的知识,希望能为你提供帮助。
随着云原生技术的不断发展和演进,实现容器间互联的云原生网络架构也在不断地进行优化和完善,从Docker本身的动态端口映射网络模型到CNCF的CNI容器网络接口,再到“Service Mesh+CNI”层次化的SDN。
容器网络以容器的典型实现Docker为例,其自身在网络架构上默认采用桥接模式,即Linux网桥模式,创建的每一个Docker容器都会桥接到这个docker0的网桥上,形成一个二层互联的网络。同时还支持Host模式、Container模式、None模式的组网。

  • Host模式:host模式下docker不会为容器创建网络名称空间而是与宿主机共用一个网络名称空间,并使用宿主机的网卡、端口等信息,但是其他名称空间,比如用户、文件系统等还是和宿主机隔离开的。
  • Bridge网络模式:这是容器默认的设置,创建的容器默认会连接到docker的网桥上(即docker0),通过docker网桥及iptables nat表配置与宿主机进行通信。
  • Container网络模式:指定新创建的容器与已存在的容器共享网络名称空间,新创建的容器不会创建网卡,而是与已存在的容器共享一个网卡、IP等,两个容器之间可以通过lo回环网卡设备进行通信,但是其他名称空间,比如用户、文件系统等还是和容器隔离开的。
  • None网络模式:none模式下创建的容器除了自带的lo回环网卡设备外,没有任何网卡、路由等信息,就是一种封闭式容器。这种模式下给了用户很大的自由度,用户可以根据自己的需求来定义网络环境。
K8S网络容器网络接口(Container Network Interface,CNI)是由Google和CoreOS主导制定的容器网络标准,综合考虑了灵活性、扩展性、IP分配、多网卡等因素。CNI旨在为容器平台提供网络的标准化。目前采用CNI提供的网络方案一般分为两种:Overlay组网方案和路由组网方案。
  • Overlay组网:以Flannel、Cilium、Weave等为代表的容器集群组网架构,默认均采用基于隧道的Overlay组网方案。比如,Flannel会为每个主机分配一个Subnet,Pod从该Subnet中分配IP,这些IP可在主机间路由,Pod间无须NAT和端口映射就可以跨主机通信。而在跨主机间通信时,会采用UDP、VxLAN等进行隧道封装,形成Overlay网络。
  • 路由组网:以Callico为代表的容器组网架构提供了一个纯三层的网络模型。在这种三层通信模型中,每个Pod都通过IP直接通信。Callico采用BGP路由协议,使得所有的节点和网络设备都记录下全网路由,这样每个容器所在的主机节点就可以知道集群的路由信息。整个通信的过程中始终都是根据BGP进行路由转发,并没有封包、解包的过程,这样转发效率就会快很多。然而这种方式会产生很多无效的路由,同时对网络设备路由规格要求较大。
服务网格当前在云原生网络中,服务网格(Service Mesh)是一个非常流行的架构方案。与SDN类似,Service Mesh通过逻辑上独立的数据平面和控制平面来实现微服务间网络通信的管理。但是Service Mesh并不能替代CNI,它需要与CNI一起提供层次化微服务应用所需要的网络服务。这就可以看出,Service Mesh与SDN还是有着一定的区别,SDN主要解决的是L1~L4层的数据包转发问题,而Service Mesh则主要解决L4/L7层微服务应用间通信的问题。二者可以通过互补配合的方式,共同实现云原生网络架构。

    推荐阅读