与传统的虚拟化相比,Kubernetes容器的生命周期更短、数量密度更高、集群变更速度更快。容器网络就必须对集群节点之间的高速通信进行充分的考量。除此之外,在企业级的容器云平台上,承载众多租户的计算负载之间资源的安全隔离,也必须要考虑到的因素。
显而易见,传统的物理网络架构无法满足容器高灵活性的需求,容器网络必须要有一种崭新的设计架构。Kubernetes快速发展演进,其中网络这块发展变革最快,生态最繁荣。
容器网络的发展,从Docker主导的CNM模型,演进到Google、CoreOS、Kubernetes主导的CNI模型。CNM与CNI并不是网络的实现,而是网络规范和网络体系。当前,容器网络CNI基本是事实的标准,除了背后开源社区的阵营不同,更多是技术迭代演进,架构优化调整。与Kubernetes在最新版本开始解耦Docker一样。下图是容器网络发展脉络,从运行效率与管理效率两个方面推动容器持续迭代优化。
1、单节点容器网络
容器单节点网络,在单个容器主机,通过Bridge或者Macvlan等方式实现共享宿主机物理网卡,多个容器使用“端口映射”的方式共享容器主机IP地址。存在问题是如何进行大规模管理,容器间跨主机无需经过NAT无法直接通信。如下图所示:
2、Kubernetes Flannel网络
Kubernetes Flannel网络,实现容器主机集群和跨节点Pod直连,每个容器主机分配一个网段用于容器内Pod互联。通过VxLAN协议封装实现Overlay容器网络,容器IP在物理网络上传输时使用物理机IP,其真实IP会被封装在VxLAN协议中。每个机器上有一个flanneld服务进行外部网络通信时的封包和解包。存在问题是虽然大二层带来了连通的便利,但是管控、访问控制、租户隔离没有实现,如下图所示:
3、多租户 + NetworkPolicy容器网络
多租户 + NetworkPolicy容器网络,Openshift v3 OVS网络就是基于这个思路已经实现。通过VxLAN实现跨集群互通,使用可编程OVS流表控制每个节点上的容器流量转发控制,多租户之间的网络NetworkPolicy控制,基于Namespace级别控制,基于Pod、端口的控制。存在问题是OVS和流表依然是单机,大量的流程编程工作,SVC和LB暴露依赖iptables,性能开销较大,如下图所示。
4、SDN容器网络
SDN容器网络,随着技术快速的发展,尤其是近几年大型国企数字化转型加速,各种各样的应用容器化运行之后,OVS容器网络的局限性开始突显。首先就是统一控制平面效率不高。其次是OVS借助每个节点上iptables实现,iptables实现NAT时性能开销大,同时Kubernetes Service管理复杂。最后是IPv6与Windows等新需求难以支持。
OVN是从OVS发展演进而来,是openvSwitch原生控制层实现,用于将分布式的openvSwitch交换机统一管理。OVN是集中式SDN控制器,实现集群层面做网络编排,管理组件高可用,使用OpenFlow控制协议,利用OVS实现网络转发。
5、总结
OVN虽然很多功能(LB,Gateway,DNS, DHCP)依然使用OVS进行底层流量转发,但是大幅度提升了上层应用(Openstack、Kubernetes、Openshift)的管理能力。与其他的kubernetes CNI网络插件相比,OVN是真正的SDN!
本文转载自微信公众号「巨子嘉」,可以通过以下二维码关注。转载本文请联系巨子嘉公众号。