kubernetes网络组件calico详解

Calico是一种容器之间互通的网络方案,在虚拟化平台中,比如OpenStack、Docker等都需要实现workloads之间互连,但同时也需要对容器做隔离控制,就像在Internet中的服务仅开放80端口、公有云的多租户一样,提供隔离和管控机制。而在多数的虚拟化平台实现中,通常都使用二层隔离技术来实现容器的网络,这些二层技术有一些弊端,比如需要依赖VLAN、Bridge和隧道技术。其中Bridge带来了复杂性,Vlan隔离和Tunnel隧道则消耗等多的资源并对物理环境有要求。随着网络规模的增大,整体会变得更加复杂。我们尝试把Host当做Internet中的路由器,使用BGP同步路由,并使用Iptables来做安全访问策略,最终设计出了Calico方案。

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

二.Calico优势

更优的资源利用
二层网络通讯需要依赖广播消息机制,广播消息的开销与host的数量呈指数级增长,Calico使用的三层路由方法,则完全抑制了二层广播,减少了资源开销。此外,二层网络使用Vlan隔离技术,天生有4096个规格限制,即便可以使用Vxlan解决,但Vxlan又带来了隧道开销的问题。Calico不使用vlan或者vxlan技术,使资源利用率更高。

可扩展性
Calico使用与Internet类似的方案,Internet的网络比任何数据中心都大,Calico同样天然具有扩展性。

简单更容易调试
由于没有隧道,意味着workloads之间路径更短,配置更少,在host之间更容易进行debug调试。

更少的依赖
Calico仅依赖三层路由可达

可适配性
Calico较少的依赖性使它能适配所有的VM、Container、白盒或者混合环境场景。

三.Calico架构

Calico架构如下:

kubernetes网络组件calico详解


架构特点:由于Calico是一种纯三层的实现,因此可以避免与二层方案相关的数据包封装的操作,中间没有任何的NAT,没有任何的overlay,所以它的转发效率可能是所有方案中最高的,因为它的包直接走原生TCP/IP的协议栈,它的隔离也因为这个栈而变得好做。因为TCP/IP的协议栈提供了一整套的防火墙的规则,所以它可以通过IPTABLES的规则达到比较复杂的隔离逻辑。
Calico网络模型主要工作组件:
1、Felix:运行在每一台host的agent进程,主要负责网络接口管理和监听、路由、ARP管理、ACL管理和同步、状态上报等。Felix会监听Etcd中心的存储,从它获取事件,比如说用户在这台机器上加了一个IP,或者是创建了一个容器等,用户创建Pod后,Felix负责将其网卡、IP、MAC都设置好,然后在内核的路由表里面写一条,注明这个IP应该到这张网卡。同样,用户如果制定了隔离策略,Felix同样会将该策略创建到ACL中,以实现隔离。
2、Etcd:分布式键值存储,主要负责网络元数据一致性,确保Calico网络状态的准确性,可以与Kubernetes共用。
3、BGP Client(BIRD):Calico为每一台host部署一个BGP Client,使用BIRD实现,BIRD是一个单独的持续发展的项目,实现了众多动态路由协议比如:BGP、OSPF、RIP等。在Calico的角色是监听Host上由Felix注入的路由信息,然后通过BGP协议广播告诉剩余Host节点,从而实现网络互通。BIRD是一个标准的路由程序,它会从内核里面获取哪一些IP的路由发生了变化,然后通过标准BGP的路由协议扩散到整个其他的宿主机上,让外界都知道这个IP在这里,你们路由的时候得到这里来。
4、BGP Route Reflector:在大型网络规模中,如果仅仅使用BGP Client形成mesh全网互联的方案就会导致规模限制,因为所有节点之间两两互连,需要N^2个连接,为了解决这个规模问题,可以采用BGP的Route Reflector的方法,使所有BGP Client仅与特定RR节点互连并做路由同步,从而大大减少连接数。

四. Calico两种网络模式

Calico网络Node之间包含两种网络模式:

IPIP

BGP
下面对这两种网络模式进行具体说明。

2.1 IPIP

从字面上理解,就是把一个IP数据包又套在一个IP包里,即把IP层封装到IP层的一个Tunnel。它的作用其实基本上就相当于一个基于IP层的网桥。一般来说,普通的网桥是基于MAC层的,不需要IP,而这个IP则是通过两端的路由做一个Tunnel,把两个本来不通的网络通过点对点连接起来

kubernetes网络组件calico详解


顾名思义,IPIP网络就是将IP网络封装在IP网络里。IPIP网络的特点是所有pod的数据流量都从隧道tunl0发送,并且在tunl0这增加了一层传输层的封包。

2.2 BGP

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwyjdf.html