0 背景
由于本次部署的节点有20个,2个Master,18个Node,而Calico默认采用Full-mesh BGP,将导致建立的连接数过多,故引入RR完成路由的分发
1 节点及配置规划
1.1 地址规划
ip范围 | 角色 |
---|---|
192.168.2.1-2 | RR |
192.168.2.3-20 | RR-Client |
1.2 关键配置
修改/etc/ansible/roles/calico/defaults 配置
本K8S集群运行在同网段kvm虚机上,虚机间没有网络ACL限制,因此可以设置CALICO_IPV4POOL_IPIP=off,如果你的主机位于不同网段,或者运行在公有云上需要打开这个选项 CALICO_IPV4POOL_IPIP=always
# 设置 CALICO_IPV4POOL_IPIP=“off”,可以提高网络性能
CALICO_IPV4POOL_IPIP: "off"
安装完成后会发现,网卡并未像开启IPIP那样生成tunl0网卡,而是通过物理网卡获取到各节点POD网段的路由,说明配置成功;
查看路由表:
路由表一开始不一定每个节点都会宣告进来,待节点调度生成过POD后即可宣告路由,就可以看到更新后的路由表
配置全局禁用Full-mesh
$ cat << EOF | calicoctl -f -
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
logSeverityScreen: Info
nodeToNodeMeshEnabled: false
asNumber: 64512
EOF
上述命令配置完成后,再次使用命令ansible all -m shell -a '/opt/kube/bin/calicoctl node status'查看,可以看到之前所有的bgp连接都消失了。
配置 BGP node 与 Route Reflector 的连接建立规则
设定规则,通过标签区分节点角色
$ cat << EOF | calicoctl create -f -
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
name: peer-to-rrs
spec:
# 规则1:普通 bgp node 与 rr 建立连接
nodeSelector: !has(i-am-a-route-reflector)
peerSelector: has(i-am-a-route-reflector)
---
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
name: rr-mesh
spec:
# 规则2:route reflectors 之间也建立连接
nodeSelector: has(i-am-a-route-reflector)
peerSelector: has(i-am-a-route-reflector)
EOF
导出节点1和节点2的配置并修改:
calicoctl get node node1 --export -oyaml > rr01.yml
vim rr01.yaml
apiVersion: projectcalico.org/v3
kind: Node
metadata:
creationTimestamp: null
name: node1
labels:
# 增加标签,将rr标签置为true
i-am-a-route-reflector: true
spec:
bgp:
ipv4Address: 192.168.2.1/24
# 增加标签,确保同一个反射簇配置ID一致,即rr01与rr02一致,用于冗余和防环
routeReflectorClusterID: 224.0.0.1
orchRefs:
- nodeName: 192.168.2.1
orchestrator: k8s
RR1和RR2的配置同理,编写完成后应用
calicoctl apply -f rr01.yml
$ ansible all -m shell -a '/opt/kube/bin/calicoctl node status'
192.168.2.2 | SUCCESS | rc=0 >>
Calico process is running.
IPv4 BGP status
+--------------+---------------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+---------------+-------+----------+-------------+
| 192.168.2.1 | global | up | 13:29:08 | Established |
| 192.168.2.10 | node specific | up | 13:29:10 | Established |
##省略..
| 192.168.2.9 | node specific | up | 13:29:08 | Established |
+--------------+---------------+-------+----------+-------------+
IPv6 BGP status
No IPv6 peers found.
192.168.2.3 | SUCCESS | rc=0 >>
Calico process is running.
IPv4 BGP status
+--------------+-----------+-------+----------+-------------+
| PEER ADDRESS | PEER TYPE | STATE | SINCE | INFO |
+--------------+-----------+-------+----------+-------------+
| 192.168.2.1 | global | up | 13:27:01 | Established |
| 192.168.2.2 | global | up | 13:29:08 | Established |
+--------------+-----------+-------+----------+-------------+
##其他省略...
可以看到RR1和RR2建立连接;
其他节点分别与RR1和RR2建立连接,互相并不直连