一、calico概述
1、k8s网络之Calico网络
2、k8s网络组件calico详解
3、calico的组件、架构与原理
4、calico的两种网络模式BGP和IP-IP性能分析
二、IPIP与BGP两种网络模式对比
IPIP网络:
流量:tunl0设备封装数据,形成隧道,承载流量
适用网络类型:适用于互相访问的Pod不在同一个网段中,跨网段访问的场景,外层封装的IP能够解决跨网段的路由问题。
效率:流量需要tunl0设备封装,效率略低
BGP网络:
流量:使用路由信息导向流量
使用网络类型:适用于互相访问的Pod在同一个网段。
效率:原生hostgw,效率高
三、calicoctl客户端工具安装
3.1 官网下载
wget https://github.com/projectcalico/calicoctl/releases/download/v3.20.6/calicoctl
cp calicoctl /usr/bin
chmod +x /usr/bin/calicoctl
3.2 命令行测试
DATASTORE_TYPE=kubernetes KUBECONFIG=~/.kube/config
calicoctl node status
3.3 配置文件测试
#1、编辑配置文件
[root@k8s-master-13 ~]# mkdir -p /etc/calico/
[root@k8s-master-13 ~]# vim /etc/calico/calicoctl.cfg
apiVersion: projectcalico.org/v3
kind: CalicoAPIConfig
metadata:
spec:
datastoreType: "kubernetes"
kubeconfig: "~/.kube/config"
#2、测试命令如下
[root@k8s-master-13 ~]# calicoctl node status
Calico process is running.
IPv4 BGP status
+--------------+-------------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+-------------------+-------+----------+-------------+
| 192.168.1.14 | node-to-node mesh | up | 07:20:27 | Established |
| 192.168.1.15 | node-to-node mesh | up | 07:21:40 | Established |
| 192.168.1.16 | node-to-node mesh | up | 07:20:27 | Established |
| 192.168.1.21 | node-to-node mesh | up | 07:21:11 | Established |
+--------------+-------------------+-------+----------+-------------+
IPv6 BGP status
No IPv6 peers found.
说明:node-node mesh: 代表所有节点用full mesh的bgp连接。
我们部署calico由于集群规模不是很大,使用的是calico的bgp模式的node-to-node-mesh全节点互联,这种模式在小规模集群里面还可以用,3.4.0版本的calico支持到100多个节点。
四、calico修改网络模式为BGP
IPIP:ipip是在宿主机网络不完全支持bgp时,一种妥协的overlay机制,在宿主机创建1个”tunl0”虚拟端口;设置为false时,路由即纯bgp模式,理论上ipip模式的网络传输性能低于纯bgp模式;设置为true时,又分ipip always模式(纯ipip模式)与ipip cross-subnet模式(ipip-bgp混合模式),后者指“同子网内路由采用bgp,跨子网路由采用ipip”。
说明:本文calico.yaml文件基于3.20.0
#修改calico.yaml文件,添加内容如下
# Enable BGP
- name: CALICO_IPV4POOL_IPIP
value: "Never"
- name: IP_AUTODETECTION_METHOD
value: "interface=ens.*"
相比IPIP模式,BGP模式下不需要tunl0设备参与报文传输,我们从路由表信息就能看出差别,如下所示:
#1、IPIP模式
[root@k8s-master-13 ~]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
10.244.17.0 192.168.1.15 255.255.255.192 UG 0 0 0 tunl0
10.244.27.0 192.168.1.21 255.255.255.192 UG 0 0 0 tunl0
10.244.115.0 192.168.1.16 255.255.255.192 UG 0 0 0 tunl0
10.244.170.128 192.168.1.14 255.255.255.192 UG 0 0 0 tunl0
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
#2、BGP模式
[root@localhost install-kubernetes]# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 ens33
10.244.17.0 192.168.1.15 255.255.255.192 UG 0 0 0 ens33
10.244.27.0 192.168.1.21 255.255.255.192 UG 0 0 0 ens33
10.244.115.0 192.168.1.16 255.255.255.192 UG 0 0 0 ens33
10.244.170.128 192.168.1.14 255.255.255.192 UG 0 0 0 ens33
192.168.1.0 0.0.0.0 255.255.255.0 U 100 0 0 ens33
如上可见,在BGP模式下,报文直接通过ens33转发到目标机器上,不会进行二次ip报文的封装,因此从性能上来看,BGP肯定是占优势的。但是由于没有二次封包,BGP模式只能在同一个子网内使用,无法跨网段使用。
五、calico修改网络模式为混合模式
IPIP:ipip是在宿主机网络不完全支持bgp时,一种妥协的overlay机制,在宿主机创建1个”tunl0”虚拟端口;设置为false时,路由即纯bgp模式,理论上ipip模式的网络传输性能低于纯bgp模式;设置为true时,又分ipip always模式(纯ipip模式)与ipip cross-subnet模式(ipip-bgp混合模式),后者指“同子网内路由采用bgp,跨子网路由采用ipip”。
方法一:
[root@k8s-master-13 ~]# kubectl patch ippool default-ipv4-ippool -p '{"spec":{"ipipMode": "CrossSubnet"}}' --type=merge
方法二:
[root@k8s-master-13 ~]# kubectl edit ippool
ipipMode: Always修改为ipipMode: CrossSubnet
六、bgp三种互联方案
Calico给出了三种类型的 BGP 互联方案,分别是 Full-mesh、Route reflectors和Top of Rack (ToR)
Full-mesh模式对于100个以内的工作节点或更少节点的中小规模部署非常有用,但是在较大的规模上,Full-mesh模式效率会降低,较大规模情况下,Calico官方建议使用Route reflectors。