calico
南风未起 2025-07-01 19:39:22 cni
# 1.简介
# 1.1.定位
calico是一个面向容器、虚拟机和原生主机工作负载的开源网络解决方案,由多个协作组件组成,不同组件在网络架构中扮演特定角色。--- felix 1.基于daemonset运行于节点,基于typha监听calico数据存储,解析策略、端点及IP池变化,协调本地节点网络状态 2.将calico networkpolicy转换为iptables规则或ebpf程序 3.向本机节点为pod ip注册主机路由 4.创建的pod加入workloadendpoints,由数据存储管理 5.报告节点就绪状态 --- bird(专用于bgp) 1.负责calico bgp路由,运行于calico-node pod内部 2.向对端bgp(其它节点或交换机)报告pod cidr路由 3.学习对端路由及作用于felix进行注册 4.保持对端bgp的会话状态 --- confd 1.监听calico数据存储,为bird渲染bgp配置 2.对端bgp配置变化,重新渲染配置及作用于bird 3.confd是calico crd配置和bird配置交互桥梁 --- typha 1.充当监听代理,避免直接watch apiserver造成过大负载压力 2.felix向typha注册watcher,typha监听server及推送配置到所有felix watcher --- cniplugin 1.调用calico ipam分配pod ip 2.创建veth pair网卡及配置pod网络命名空间 3.通过套接字通知felix注册新端点1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 1.2.优势
--- 资源利用 1.二层网络通讯依赖广播消息机制,广播消息的开销与host数量呈指数级增长 2.calico基于三层路由,抑制二层广播减少资源开销 3.二层网络基于vlan隔离技术,规格限制于4096;vxlan又会带来隧道开销问题,calico未使用vlan或vxlan技术 --- 可扩展 calico采用类似internet的方案,天然具备扩展性 --- 调试成本 由于没有隧道,workloads间路径更短,配置更少,host间更容易进行debug调试 --- 可适配性 calico仅依赖三层路由可达,基于适配所有VM、container、白盒或混合环境1
2
3
4
5
6
7
8
9
10
11
12
13
# 1.3.缺点
--- 租户隔离问题 三层方案基于host进行路由寻址,多租户使用相同cidr网络面临地址冲突问题 --- 路由规模问题 路由规则和Pod分布相关,Pod离散分布到host集群,势必会产生较多的路由项 --- iptables规则膨胀 容器实例增加会造成iptables规则膨胀,维护复杂及造成性能损耗 --- 跨子网的网关路由问题 对端网络非二层可达,基于三层路由机转发需要网关支持自定义路由配置,也就是将Pod的目标地址设置为本网段网关地址,由网关进行跨三层转发1
2
3
4
5
6
7
8
9
10
11
# 2.网络模式
# 2.1.IPIP模式
基于
IP数据包套接实现IP层封装到IP层的Tunnel,作用类型基于IP的网桥,利用两端的路由做一个Tunnel实现内部网络点对点连接。
注意
pod流量由tun0发送,tun0会增加一层传输层的封包
# 2.2.BGP模式
边界网关协议
(BGP)是互联网上一个核心的去中心化自治路由协议,基于维护IP路由表或前缀表实现自治系统(AS)间的可达性,属于矢量路由协议。--- 特点 1.BGP未使用传统的内部网关协议IGP的指标,基于路径、网络策略或规则集决定路由 2.服务器对外设置相同入口,最佳访问路由基于网络上的骨干路由器根据路由跳数及其它技术指标确定,不会占用服务器任何系统1
2
3
注意
BGP更适合称为矢量性协议,而不是路由协议
# 2.3.对比
--- IPIP模式 1.tun0设备封装数据形成隧道,承载流量,适用不同网段Pod互访 2.流量需要tun0设备封装,效率略低 --- BGP模式 1.基于路由导向流量,适用相同网段Pod互访 2.原生host-gw,效率较高1
2
3
4
5
6
7
# 3.overlay
# 3.1.简介
overlay对上层来说类似普通的网络,经过的网络包会被封装在另一个外部网络包,基于底层网络进行通信,底层网络设备无需关注或处理内部网络数据。注意
工作负载不容易由网络的其余部分寻址,
NAT网关或负载均衡器需要桥接overlay和底层网络
# 3.2.snat
Pod基于内部网段分配IP,访问外部网络需进行SNAT确保回包正确,会损耗一定性能;基于外部网段分配IP的Pod无需SNAT,需确保地址唯一。