k8s之使用RR路由反射優化calico的bgp網絡


Calico 維護的網絡在默認是(Node-to-Node Mesh)全互聯模式,Calico集群中的節點之間都會相互建立連接,用於路由交換。但是隨着集群規模的擴大,mesh模式將形成一個巨大服務網格,連接數成倍增加。
 
這時就需要使用 Route Reflector(路由器反射)模式解決這個問題。
 
確定一個或多個Calico節點充當路由反射器,集中分發路由,讓其他節點從這個RR節點獲取路由信息。
 
具體步驟如下:
1、關閉node-to-node BGP網絡
添加 default BGP配置,調整 nodeToNodeMeshEnabled和asNumber:

```
 cat << EOF | calicoctl create -f -
 apiVersion: projectcalico.org/v3
 kind: BGPConfiguration
 metadata:
   name: default
 spec:
   logSeverityScreen: Info
   nodeToNodeMeshEnabled: false  
   asNumber: 63400
EOF
```

ASN號可以通過獲取 # calicoctl get nodes --output=wide

2、配置指定節點充當路由反射器

為方便讓BGPPeer輕松選擇節點,通過標簽選擇器匹配。

給路由器反射器節點打標簽:

```
kubectl label node k8s-node2 route-reflector=true
```

然后配置路由器反射器節點routeReflectorClusterID:

```
# calicoctl get node k8s-node1 -o yaml > rr-node.yaml
# vi rr-node.yaml
apiVersion: projectcalico.org/v3
kind: Node
metadata:
  annotations:
    projectcalico.org/kube-labels: '{"beta.kubernetes.io/arch":"amd64","beta.kubernetes.io/os":"linux","kubernetes.io/arch":"amd64","kubernetes.io/hostname":"k8s-node2","kubernetes.io/os":"linux"}'
  creationTimestamp: null
  labels:
    beta.kubernetes.io/arch: amd64
    beta.kubernetes.io/os: linux
    kubernetes.io/arch: amd64
    kubernetes.io/hostname: k8s-node2
    kubernetes.io/os: linux
  name: k8s-node2
spec:
  bgp:
    ipv4Address: 192.168.1.10/24
    routeReflectorClusterID: 244.0.0.1   # 集群ID
  orchRefs:
  - nodeName: k8s-node2
    orchestrator: k8s
```

現在,很容易使用標簽選擇器將路由反射器節點與其他非路由反射器節點配置為對等:

```
# vi bgppeer.yaml
apiVersion: projectcalico.org/v3
kind: BGPPeer
metadata:
  name: peer-with-route-reflectors
spec:
  nodeSelector: all()
  peerSelector: route-reflector == 'true'
```
3、拷貝配置到另一個高可用節點執行相同操作
到此基本就實現了雙機負載BGP路由分發

4、查看bgp的連接狀態

calicoctl node status
 
RR路由反射器: 相比M-T-M 全互聯模式,主要為了減少BGP路由同步開銷,實現集中路由分發


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM