CNI 是一个标准的接口规范,其本身实现了一些基本插件,Bridge、ipvlan、macvlan、loopback、vlan等网络接口。
Overlay网络
容器网络的IP和MAC地址对宿主机网络不可见,跨宿主机容器间通信需要将容器流量进行封装转发,而容器出集群的流量需要进行SNAT转换。Flannel的vxlan工作模式、Calico的IPIP模式均属于该类型。
Underlay网络
容器网络对宿主机可见,在容器进行通信时不需要对流量进行封装,直接建立路由表,根据规则进行路由转发进行通信。Flannel的host-gw工作模式、Calico的BGP工作模式均属于该类型。
Canal
Canal 是 Flannel 和 Calico 联合发布的一个统一网络插件,提供 CNI 网络插件,并支持 network policy。
Flannel
Flannel 是一个为 Kubernetes 提供 overlay network 的网络插件,它基于 Linux TUN/TAP,使用 UDP 封装 IP 包来创建 overlay 网络,并借助 etcd 维护网络的分配情况。
Calico
Calico 是一个基于 BGP 的纯三层的数据中心网络方案(不需要 Overlay),并且与 OpenStack、Kubernetes、AWS、GCE 等 IaaS 和容器平台都有良好的集成。
Calico 在每一个计算节点利用 Linux Kernel 实现了一个高效的 vRouter 来负责数据转发,而每个 vRouter 通过 BGP 协议负责把自己上运行的 workload 的路由信息像整个 Calico 网络内传播——小规模部署可以直接互联,大规模下可通过指定的 BGP route reflector 来完成。 这样保证最终所有的 workload 之间的数据流量都是通过 IP 路由的方式完成互联的。Calico 节点组网可以直接利用数据中心的网络结构(无论是 L2 或者 L3),不需要额外的 NAT,隧道或者 Overlay Network。
此外,Calico 基于 iptables 还提供了丰富而灵活的网络 Policy,保证通过各个节点上的 ACLs 来提供 Workload 的多租户隔离、安全组以及其他可达性限制等功能。
