Calico 是一种容器之间互通的网络方案 。在虚拟化平台中 , 比如 OpenStack、Docker 等都需要实现 workloads 之间互连 , 但同时也需要对容器做隔离控制 , 就像在 Internet 中的服务仅开放80端口、公有云的多租户一样 , 提供隔离和管控机制 。而在多数的虚拟化平台实现中 , 通常都使用二层隔离技术来实现容器的网络 , 这些二层的技术有一些弊端 , 比如需要依赖 VLAN、bridge 和隧道等技术 , 其中 bridge 带来了复杂性 , vlan 隔离和 tunnel 隧道则消耗更多的资源并对物理环境有要求 , 随着网络规模的增大 , 整体会变得越加复杂 。我们尝试把 Host 当作 Internet 中的路由器 , 同样使用 BGP 同步路由 , 并使用 iptables 来做安全访问策略 , 最终设计出了 Calico 方案 。
适用场景:k8s环境中的pod之间需要隔离
设计思想:Calico 不使用隧道或 NAT 来实现转发 , 而是巧妙的把所有二三层流量转换成三层流量 , 并通过 host 上路由配置完成跨 Host 转发 。
架构图:
文章插图
Calico网络模型主要工作组件:
1.Felix:运行在每一台 Host 的 agent 进程 , 主要负责网络接口管理和监听、路由、ARP 管理、ACL 管理和同步、状态上报等 。
2.etcd:分布式键值存储 , 主要负责网络元数据一致性 , 确保Calico网络状态的准确性 , 可以与kubernetes共用;
3.BGP Client(BIRD):Calico 为每一台 Host 部署一个 BGP Client , 使用 BIRD 实现 , BIRD 是一个单独的持续发展的项目 , 实现了众多动态路由协议比如 BGP、OSPF、RIP 等 。在 Calico 的角色是监听 Host 上由 Felix 注入的路由信息 , 然后通过 BGP 协议广播告诉剩余 Host 节点 , 从而实现网络互通 。
4.BGP Route Reflector:在大型网络规模中 , 如果仅仅使用 BGP client 形成 mesh 全网互联的方案就会导致规模限制 , 因为所有节点之间俩俩互联 , 需要 N^2 个连接 , 为了解决这个规模问题 , 可以采用 BGP 的 Router Reflector 的方法 , 使所有 BGP Client 仅与特定 RR 节点互联并做路由同步 , 从而大大减少连接数 。
Felix
Felix会监听ECTD中心的存储 , 从它获取事件 , 比如说用户在这台机器上加了一个IP , 或者是创建了一个容器等 。用户创建pod后 , Felix负责将其网卡、IP、mac都设置好 , 然后在内核的路由表里面写一条 , 注明这个IP应该到这张网卡 。同样如果用户制定了隔离策略 , Felix同样会将该策略创建到ACL中 , 以实现隔离 。
BIRD
BIRD是一个标准的路由程序 , 它会从内核里面获取哪一些IP的路由发生了变化 , 然后通过标准BGP的路由协议扩散到整个其他的宿主机上 , 让外界都知道这个IP在这里 , 你们路由的时候得到这里来 。
架构特点
由于Calico是一种纯三层的实现 , 因此可以避免与二层方案相关的数据包封装的操作 , 中间没有任何的NAT , 没有任何的overlay , 所以它的转发效率可能是所有方案中最高的 , 因为它的包直接走原生TCP/IP的协议栈 , 它的隔离也因为这个栈而变得好做 。因为TCP/IP的协议栈提供了一整套的防火墙的规则 , 所以它可以通过IPTABLES的规则达到比较复杂的隔离逻辑 。转载至—明辰智航云安网络与虚拟化性能管理系统
【Calico网络架构】
推荐阅读
- 教你如何辨别真伪BGP网络
- iPhone网络不稳定怎么办 几个可尝试解决方法
- Windows无法连接网络,这几招教你解决
- 互联网公司在开发APP时要注重哪些问题?APP架构师告诉你
- 网络地址转换NAT,配置讲解
- 房子大了,设备多了,家里的WiFi网络该怎么优化?
- 网络自动化有啥可豪横的?戳我给你揭开隐藏真相
- 互联网分层架构的本质
- 大型网络游戏有哪些品牌
- 企业该如何规划起线上网络推广?