Calico网络架构

Calico是一种容器之间互通的网络方案。在虚拟化平台中,比如OpenStack、Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Internet中的服务仅开放80端口、公有云的多租户一样,提供隔离和管控机制。而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层的技术有一些弊端,比如需( U 6 Q o W ;要依赖VLAN、bridge和隧道等技术,其中bridge带来了复杂性,] z rvlan隔离和tunnel隧道则消耗更多的资源并对物理^ ) B N 3 环境有要求,随着网络规模的增大,整体会变得越加复杂。我们尝试把Host当作Internet中的路由器,同样使用BGP同步路由,并! . G使用iptables来做安全访问策略,最终设计出了Calico方案。
适用场景:k8s环境中的pod之间需要隔离
设计思想:Calico不使用隧道或NAT来实现转发,而是巧妙的把所有二三层流= K W U 2 L转换成三层流量,并通过hosQ g 3 @ # Dt上路由配置完成跨Host转发。

架构图:
Calico网络架构
Calico网络模型主要工作组件:
1.Felix:运行在每一台Host的agent进程,主要负责网络接口管理和监b Q b 4 ; N听、路由、ARP管理、ACL管理和同步、状态上报等。
2.e ~ J Gtcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性,可以与kubernetes共用;
3.BGP Client(BIRD)1 u _ 1 a:Calico为每一台Host部署一个BGP Client,使用! L ABIRD实现,BIRD是一个单独的持续发展的项目,实现了众多动态路由协议比如BGP、OSPF、RIP等。在Calico的角色是监听Host上由Felix注入的路由信息,然后通过BGP协议广播告诉剩余Host节点,从而实现网络L o q互通。
4.BGP Route Reflector:在大型网络规模中,如果仅仅使用BGP client形成mesh全网互联X M Q t :的方案就会导致规模限制,因为所有节点之间俩俩互联,需要N^2个连接,为了解决这个规模问题,可以采0 J [ 4 R , 9用BGP的Router Reflector的方法,使所有BGP Client仅与特定RR节点互联并做路由同步,从j r ! 9 . W而大大减少连接数。

Felix
Few * o d - u 5lix会监听ECTDQ F { ! b ? i ^ U中心的存储,从它获取事件,比如说用户在这台机器上加了一个IP,或者是创建了一M ? M $个容器等。用户创建pod后,Felix负责将其网卡、IP、MAC都设置好,然后在内核的路由表里面写一条,注明这个IP应该到这张网卡。同样如果用户制定了隔离策略,Felix同样会将该策略创建到ACL中,以实现隔离。

BIRD
BIRD是一个标准的路由程序^ u B 4 o ; ^,它会从内核里面获取哪一些IP的路由发生了变化,然后通过标准BGP的路由协议扩散到整个其他的宿主机上,让外界都知s Y Q S N s N Q道这个IP在这里,你们路W T ? 1由的时候得到这里来。

架构特点
由于Calico是一种纯三层的实现,因此可以避免与二层方案相H C ( o ; 3 k关的数据包封装操作,中间没有任何的NAT) n j e 1 } o,没有任何的overlay,所以它的转发效率可能是所有方案中最高的,因为它& 4 w的包直接走原生TCP/IP的协议栈,它的隔离也因为这个栈而变得好做。因为TCP/IP的协议栈提供了一整套的防火墙的规则,所以它可以通过p [ = M IPTABk ! j C t @ A :LES的规则达到比较复杂的隔离逻辑。转载至—明辰智航云安网络; F 8 M与虚拟化7 7 7 p性能管理系统