calico 二层互通和三层互通
calico有ipip和bgp这2种模式,推荐使用ipip+bgp。
calico agent组件
组件名称 |
组件功能 |
cni插件 |
与kubelet交互。 |
felix |
维护主机路由和虚拟网卡。 |
bird |
bgp(Border Gateway Protocol)即边界网关协议的客户端和服务端,发送自己的路由,接收别人的路由。 |
bgp二层互通
<目的容器小子网网段> via <目的容器所在主机IP> dev 本机主机网口
与flannel host-gw相比,calico没有创建网桥,不会把容器网卡对端veth口挂到网桥上,只是通过路由来完成转发。
如果不同节点之间bird两两建立peer,那么只支持100节点规模以内。
如果不同节点只跟中心化节点reflector建立连接,那么支持大规模场景。
为什么bgp必须要二层互通?
在不走隧道封装,且底层物理网络没有放通pod网段前提下,因为二层目的mac是目的容器所在节点mac,本节点连接的交换机必须要认识该目的mac,所以要求二层互通。
ipip三层互通
<目的容器小子网网段> via <目的容器所在主机IP> dev tunl0
与二层互通不同的是,三层互通需要在节点上创建内核tunl0 ipip设备,由路由指向该设备,完成ipip封装和解封装。
ipip在正常容器发出的报文ip头外层,再加一层ip头,源IP是本节点ip,目的IP是目的节点ip,从而完成隧道封装。
参考资料
《深入剖析kubernetes》