Kubernetes Calico BGP RR路由反射器模式 电脑版发表于:2022/11/21 14:02  >#Kubernetes Calico BGP RR路由反射器模式 [TOC] ## RR路由反射器模式简介 tn2>Calico 维护的网络在默认是(Node-to-Node Mesh)全互联模式,Calico集群中的节点之间都会相互建立连接,用于路由交换。但是随着集群规模的扩大,mesh模式将形成一个巨大服务网格,连接数成倍增加,就会产生性能问题。这时就需要使用 Route Reflector(路由器反射)模式解决这个问题,提升某个路由为RR专门学习新增和相关路由再统一下发。 tn>简单来说:把一个员工(路由)提拔出来当个领导,关于客户端路由学习新的路由时,直接通知领导,领导再统一告知。  ## 安装RR路由反射器模式 >### 设置RR路由反射器节点 tn2>关于Calico安装就不说了。 这里我们将Full Mesh模式直接转换成RR模式。 首先我们查看节点BGP状态。 ```bash calicoctl --allow-version-mismatch node status ```  tn2>这里我们有三台主机,我们将master主机配置为RR。 首先需要为Master主机打上`calico-route-reflector`标签然后,添加`routeReflectorClusterID`将Master节点设置为集群内的路由反射器(`224.0.0.1`为组播地址)。 ```bash calicoctl --allow-version-mismatch get node <node name> -o yaml --export > node.yaml ``` tn2>在Yaml中添加如下内容。 ```bash metadata: labels: calico-route-reflector: "" spec: bgp: routeReflectorClusterID: 224.0.0.1 ```  tn2>然后更新配置情况。 ```bash calicoctl --allow-version-mismatch apply -f node.yaml ```  >### 添加Peer tn2>首先将所有的客户端通过BGPPeer连接到RR上面。 (这里是通过识别是否有`calico-route-reflector`标签来决定的) ```bash calicoctl --allow-version-mismatch apply -f - <<EOF kind: BGPPeer apiVersion: projectcalico.org/v3 metadata: name: peer-to-rrs spec: nodeSelector: "!has(calico-route-reflector)" peerSelector: has(calico-route-reflector) EOF ``` tn2>然后将所有的RR路由反射器连接到一起。 ```bash calicoctl --allow-version-mismatch apply -f - <<EOF kind: BGPPeer apiVersion: projectcalico.org/v3 metadata: name: rrs-to-rrs spec: nodeSelector: has(calico-route-reflector) peerSelector: has(calico-route-reflector) EOF ``` tn2>禁用node-to-node mesh模式中。 ```bash calicoctl --allow-version-mismatch create -f - <<EOF apiVersion: projectcalico.org/v3 kind: BGPConfiguration metadata: name: default spec: nodeToNodeMeshEnabled: false asNumber: 64512 EOF ``` tn2>然后RR配置完成了。 ```bash calicoctl --allow-version-mismatch node status ``` 