416 第三部分 安 全
10.3 Calico 网络插件
Calico 是另一款主流的开源虚拟化网络方案,用于为云原生应用实现互联与策略控制. 可以整合进大多数主流的编排系统,例如 Kubernetes、Apache Mesos、Docker 和 OpenStack 等。与 Flannel相比, Calico 的一个显著优势是对网络策略的支持。它允许用户动态定义访
问控制规则以管控进出容器的数据报文,从而为 Pod 间通信按需施加安全策略。
Calico 是一个三层的虚拟网络解决方案。它把每个节点都当作虚拟路由器 (vRouter). 并把每个节点上的Pod 都当作是“节点路由器”后的一个终端设备并为其分配一个IP 地址。 各节点路由器通过BGP 协议学习生成路由规则.从而实现不同节点上 Pod 间的互联互通
如图10-18所示。
K⁸s-node⁰1 k8s-node02 k8s-node03
Pod Pod Pod Pod Pod Pod
vRouter VRouter vRouter
(hon) (bgp) (bgp)
图10-18 Calico 系统示意图
BGP 是互联网上一个核心的去中心化自治路由协议,它通过维护IP 路由表或“前缀” 表来实现自治系统 (AS) 之间的可达性,通常作为大规模数据中心维护不同的自治系统之 间路由信息的矢量路由协议。Linux 内核原生支持BGP, 因而我们可轻易把一台 Linux 主机
配置成为边界网关。
Calico 把 Kubernetes 集群环境中的每个节点上的Pod 所组成的网络视为一个自治系 统,而每个节点也就自然由各自的 Pod 对象组成虚拟网络,进而形成自治系统的边界网关。 各节点间通过BGP 协议交换路由信息并生成路由规则。但考虑到并非所有网络都能支持 BGP, 而且 BGP 路由模型要求所有节点必须要位于同一个二层网络,所以Calico 还支持基 于 IPIP 和 VXLAN 的 Overlay 网络模型,它们的工作模式与Flannel 的 VXLAN 和 IPIP 模
型并无显著不同。
类似 Flannel 在 VXLAN 后端启用DirectRouting 时的网络模型, Calico 也支持混合使
用路由和 Overlay 网络模型,BGP 路由模型用于二层网络的高性能通信, IP-IP或 VXLAN
用于跨子网的节点间报文转发。如图10-19所示。 IP-IP协议包头非常小,理论上它的速度
要比 VXLAN 稍快一点,但安全性更差。




