• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

k8s之使用RR路由反射优化calico的bgp网络

开发技术 开发技术 1周前 (07-21) 10次浏览
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路由同步开销,实现集中路由分发


程序员灯塔
转载请注明原文链接:k8s之使用RR路由反射优化calico的bgp网络
喜欢 (0)