实现原理
Open vSwitch
如图1所示,OVS软件主要架构由内核态的Datapath和用户态的vswitchd、ovsdb组成。
Datapath是负责数据交换的内核模块,从网口读取数据,快速匹配FlowTable中的流表项,成功的直接转发,失败的上交vswitchd进程进行处理。在OVS初始化和port binding时注册钩子函数,把端口的报文处理接管到内核模块。
vswitchd是负责OVS管理和控制的守护进程,通过Unix Socket将配置信息保存到ovsdb中,并通过Netlink和内核模块进行交互。
ovsdb是OVS数据库,保存了OVS的配置信息。
此外,OVS发布包中还包含了一系列管理工具(ovs-vsctl、ovs-dpctl、ovs-ofctl、ovs-appctl、ovs-docker等),方便用户对OVS进行配置和使用。
如图2所示,在OVS接管网络数据前,数据包在Linux网络协议中的流向为虚线所示——物理网卡端口在接收到数据包后经过内核协议栈的逐层解析,最后离开内核态,把数据传送到内核态;
而经过OVS创建网桥、绑定物理网卡后,数据流从物理网卡端口收包后,在内核态经由OVS的vPort进入到OVS中,根据数据包Key值进行FlowTable流表匹配,成功则执行流表Action后续流程,失败则进行Upcall由vswitchd进程进行处理。
Calico
如图3所示,Calico组件主要架构由Felix、Confd、BIRD组成。
- Felix是负责Calico Node运行并作为每个节点Endpoint端点的守护程序,它负责管理当前主机中的Pod信息,与集群etcd服务交换集群Pod信息,并组合路由信息和ACL策略。
- Confd是负责存储集群etcd生成的Calico配置信息,提供给BIRD层运行时使用。
- BIRD(BIRD Internet Routing Daemon)是核心组件,Calico中的BIRD特指BIRD Client和BIRD Route Reflector,负责主动读取Felix在本机上设置的路由信息,并通过BGP广播协议在数据中心中进行分发路由。
此外,etcd组件是Calico组件运行的依赖组件,需事先在集群中部署etcd服务,或复用Kubernetes的etcd;Calico官方也提供了calicoctl管理工具,用于与Calico Node进行状态确认、状态配置等操作。
父主题: 介绍