浅谈Calico

浅谈Calico

简介

What is Calico?

  • Calico 是一个开源的网络和网络安全解决方案,适用于容器、虚拟机和物理机等场景。Calico 支持广泛的平台,包括 Kubernetes、OpenShift、Mirantis Kubernetes Engine (MKE)、OpenStack 和裸机服务。
  • Calico是一个纯三层的协议,为OpenStack虚机和Docker容器提供多主机间通信。Calico不使用重叠网络(即隧道和MAC-in-IP封装),它是一个纯三层的方法,使用虚拟路由代替虚拟交换,每一台虚拟路由通过BGP协议传播可达信息(路由)到剩余数据中心。
  • Calico使用Linux内核内置的高度优化的转发和访问控制功能来提供本地Linux网络数据平面性能。
  • Calico在kubernetes集群中创建和管理一个三层的网络,该网络提供了Pod间的通信。 它为Pods提供了可路由的IP地址,从而使互操作性更加容易。Calico使用iptables实现网络安全策略,提供对pod之间通信的细粒度控制。

结构

  • Felix:Calico 守护程序,在每个workload节点上运行,主要负责配置路由及ACLs等信息,确保endpoint的连通状态;
  • confd:一个守护程序,用于监视ETCD数据存储以进行配置更改,并更新BIRD的配置文件。
  • BIRD:BGP Client,主要负责把Felix写入kernel的路由信息分发到当前Calico网络,确保workload间的通信有效性;
  • ETCD:分布式键值存储数据库,主要负责网络元数据的一致性,确保 Calico 网络状态的准确性;

网络模式

在开始说Calico的网络模式前,先了解一些Calico启动时的配置参数。[参考]

# POD使用的网络,不能和本地网络冲突
- name: CALICO_IPV4POOL_CIDR
    value: "192.168.0.0/16"
    
# 每个workload节点分配的子网大小,目的是为了缩减路由表规模
- name: CALICO_IPV4POOL_BLOCK_SIZE
    value: 26

# Always:default参数,表示全部使用IPIP模式;
# CrossSubnet:同子网内通信使用BGP模式,跨子网通信时使用IPIP模式;
# Never:禁用IPIP模式,使用BGP模式;
- name: CALICO_IPV4POOL_IPIP
    value: "Always"
    
# Never:default参数,表示禁用VXLAN模式;
# Always:Calico v3.7版本后支持,表示使用VXLAN模式,要启用时,需配置CALICO_IPV4POOL_IPIP的value=Never;
- name: CALICO_IPV4POOL_VXLAN
    value: "Never"

IPIP

  • Node内POD-POD之间通信

  • 不同Node内POD-POD之间通信

  • IPIP封装头

VXLAN

  • 不同Node内POD-POD之间通信

BGP

  • 不同Node内POD-POD之间通信

优缺点总结

  • BGP模式

    • 缺点
  • BGP模式是需要通过路由广播容器网络的路由信息,而路由广播只能在局域网中进行,如果kubernetes集群中的工作节点不在同一个子网,则跨子网workload节点上的POD无法正常通信,除非使用其他网络设备打通BGP路由。
  • 没有Route Reflector的集群,节点数量不建议超过100个。
  • 优点
  • Underlay网络,结构简单。
  • 同子网内通信因为没有任何封装,所以同子网内通信的网络性能高。
  • 数据包转发依托于Kernel,没有性能损耗。
  • IPIP模式

    • 缺点
  • 封装简单,所以安全性低。
  • 和纯BGP模式下的性能相比,略有降低。
  • 优点
  • Overlay网络,可以让POD、NODE跨子网通信。
  • IPIP的包头非常小,因此它的速度理论上要比VXLAN快。
  • 总结

使用CrossSubnet模式可以结合BGP和IPIP的所有优点,同子网内不需要封装IPIP,只有在跨子网的NODE间通信才需要封装IPIP。

本文链接:

http://blog.ps-ef.cn/Kubernetes/134.html
1 + 8 =
快来做第一个评论的人吧~