05. 网络
Kubernetes 网络
容器网络发展到现在,形成了两大阵营,就是
-
CNM(Container Network Model)
: Docker Libnetwork 的优势就是原生,而且和Docker 容器生命周期结合紧密;缺点也可以理解为是原生,被Docker 绑架。支持CNM 的网络模型包括了Docker Swarm overlay, Macvlan & IP networkdrivers, Calico, Contiv, Weave. -
CNI 的优势是兼容其他容器技术(e.g. rkt)及上层编排系统(Kubernetes & Mesos),而且社区活跃势头迅猛,Kubernetes 加上CoreOS 主推;缺点是非Docker 原生。支持CNI 的网络模型包括了Kubernetes, Weave, Macvlan, Calico, Flannel, Contiv, Mesos CNI.
网络解决方案
隧道方案(Overlay Networking)
隧道方案在
- Weave:
UDP 广播,本机建立新的BR ,通过PCAP 互通 - Open vSwitch(OVS
) :基于VxLan 和GRE 协议,但是性能方面损失比较严重 - Flannel:
Flannel 主要提供了Overlay 的网络方案,UDP 模式由于其封包拆包的过程涉及了多次上下文的切换,导致性能很差,逐渐被社区抛弃;VXLAN 模式的封包拆包过程均在内核态,性能要比UDP 好很多,也是最经常使用的模式;host-gw 模式不涉及封包拆包,所以性能相对较高,但要求节点间二层互通。 - Racher:IPsec
路由方案
路由方案一般是从
- Calico:
Calico 主要采用了BGP 协议交换路由,没有采用cni0 网桥,当二层网络不通的时候,可以采用IPIP 模式,但由于涉及到封包拆包的过程,性能相对较弱,与Flannel 的VXLAN 模式相当。Calico 支持很细致的ACL 控制,对混合云亲和度比较高。 - Macvlan:从逻辑和
Kernel 层来看隔离性和性能最优的方案,基于二层隔离,所以需要二层路由器支持,大多数云服务商不支持,所以混合云上比较难以实现。