简介:
    image.png
    Calico 是一种容器之间互通的网络方案

    在虚拟化平台中,比如 OpenStack、Docker 等都需要实现 workloads 之间互连,但同时也需要对容器做隔离控制,就像在 Internet 中的服务仅开放80端口,公有云的多租户一样,提供隔离和管控机制

    而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层的技术有一些弊端,比如需要依赖 VLAN、bridge 和隧道等技术,其中 bridge 带来了复杂性,vlan 隔离和 tunnel 隧道则消耗更多的资源并对物理环境有要求,随着网络规模的增大,整体会变得越加复杂

    我们尝试把 Host 当作 Internet 中的路由器,同样使用 BGP 同步路由,并使用 iptables 来做安全访问策略,最终设计出了 Calico 方案

    设计思想:
    image.png
    Calico 不使用隧道或 NAT 来实现转发,而是巧妙的把所有二三层流量转换成三层流量,并通过 host 上路由配置完成跨 Host 转发

    设计架构与组件:
    image.png
    Felix:calico的核心组件,运行在每个节点上,主要的功能有接口管理、路由规则、ACL规则和状态报告

    • 接口管理:Felix为内核编写一些接口信息,以便让内核能正确的处理主机endpoint的流量,特别是主机之间的ARP请求和处理ip转发

    • 路由规则:Felix负责主机之间路由信息写到linux内核的FIB(Forwarding Information Base)转发信息库,保证数据包可以在主机之间相互转发

    • ACL规则:Felix负责将ACL策略写入到linux内核中,保证主机endpoint的为有效流量不能绕过calico的安全措施

    • 状态报告:Felix负责提供关于网络健康状况的数据。特别是,它报告配置主机时出现的错误和问题,这些数据被写入etcd,使其对网络的其他组件和操作人员可见

    Etcd:保证数据一致性的数据库,存储集群中节点的所有路由信息为保证数据的可靠和容错建议至少三个以上etcd节点

    Orchestrator plugin:协调器插件负责允许kubernetes或OpenStack等原生云平台方便管理Calico,可以通过各自的API来配置Calico网络实现无缝集成,如kubernetes的cni网络插件

    Bird:BGP客户端,Calico在每个节点上的都会部署一个BGP客户端,它的作用是将Felix的路由信息读入内核,并通过BGP协议在集群中分发,当Felix将路由插入到Linux内核FIB中时,BGP客户端将获取这些路由并将它们分发到部署中的其他节点,这可以确保在部署时有效地路由流量

    BGP Router Reflector:大型网络仅仅使用 BGP client 形成 mesh 全网互联的方案就会导致规模限制,所有节点需要 N^2 个连接,为了解决这个规模问题,可以采用 BGP 的 Router Reflector 的方法,使所有 BGP Client 仅与特定 RR 节点互联并做路由同步,从而大大减少连接数

    Calicoctl: calico 命令行管理工具

    Calico网络模式:
    image.png

    • BGP 边界网关协议(Border Gateway Protocol, BGP):是互联网上一个核心的去中心化自治路由协议,BGP不使用传统的内部网关协议(IGP)的指标

      • Route Reflector 模式(RR)(路由反射):Calico 维护的网络在默认是(Node-to-Node Mesh)全互联模式,Calico集群中的节点之间都会相互建立连接,用于路由交换,但是随着集群规模的扩大,mesh模式将形成一个巨大服务网格,连接数成倍增加,这时就需要使用 Route Reflector(路由器反射)模式解决这个问题
    • IPIP模式:把 IP 层封装到 IP 层的一个 tunnel,作用其实基本上就相当于一个基于IP层的网桥,一般来说,普通的网桥是基于mac层的,根本不需 IP,而这个 ipip 则是通过两端的路由做一个 tunnel,把两个本来不通的网络通过点对点连接起来

    实际上,Calico 项目提供的 BGP 网络解决方案,与 Flannel 的 host-gw 模式几乎一样,也就是说,Calico也是基于路由表实现容器数据包转发,但不同于Flannel使用Flanneld进程来维护路由信息的做法,而Calico项目使用BGP协议来自动维护整个集群的路由信息

    建议参考文献:https://www.cnblogs.com/goldsunshine/p/10740928.html