# “全互联模式” 与 “路由反射模式”
- 全互联模式(node-to-node mesh):
全互联模式,每一个BGP Speaker都需要和其他BGP Speaker建立BGP连接,这样BGP连接总数就是N^2,如果数量过大会消耗大量连接。如果集群数量超过100台官方不建议使用此种模式。
</br>
- 路由反射模式Router Reflection(RR):
RR模式中会指定一个或多个BGP Speaker为RouterReflection,它与网络中其他Speaker建立连接,每个Speaker只要与Router Reflection建立BGP就可以获得全网的路由信息。在calico中可以通过Global Peer实现RR模式。
*****
查看当前节点的状态,可以看到都是 `node-to-node mesh` 模式。
全互联模式会造成路由条目过大,无法在大规模集群中部署。使用BGP RR(中心化)的方式交换路由,能够有效降低节点间的连接数。
```
calicoctl node status
```

### **配置BGP RR模型(使用node充当路由反射器)**
#### 1、将选中当路由反射器的节点进行配置
```
calicoctl patch node kubeadm-1 -p '{"spec": {"bgp": {"routeReflectorClusterID": "192.168.222.201"}}}'
calicoctl patch node kubeadm-2 -p '{"spec": {"bgp": {"routeReflectorClusterID": "192.168.222.202"}}}'
calicoctl patch node kubeadm-3 -p '{"spec": {"bgp": {"routeReflectorClusterID": "192.168.222.203"}}}'
```
> routeReflectorClusterID 一般设置成这台电脑的地址

给节点打上标签
```
kubectl label node kubeadm-1 route-reflector=true
kubectl label node kubeadm-2 route-reflector=true
kubectl label node kubeadm-3 route-reflector=true
```
#### 2、设置对等关系
peer 与 rrs 之间设置成对等。
这样可以在 peer 中看到 rrs ,但是不能看到其他 peer
```
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
name: peer-vs-rrs # BGPPeer的名字(可以把这个看作一个RR-1组,这是第一组)
spec:
nodeSelector: route-reflector != 'true' # 通过节点选择器把不是 true 标签的节点,添加进 peer-vs-rrs 组
peerSelector: route-reflector == 'true' # 通过peer选择器把是 true 标签的路由反射器,添加进 peer-vs-rrs 组
```
rrs 与 rrs 之间设置成对等。
这样可以在 rrs 中看到其他的 rrs 以及 所有的 peer
```
kind: BGPPeer
apiVersion: projectcalico.org/v3
metadata:
name: rrs-vs-rrs # BGPPeer的名字(可以把这个看作一个RR-2组,这是第二组)
spec:
nodeSelector: route-reflector == 'true' # 通过节点选择器把是 true 标签的节点,添加进 rrs-vs-rrs 组
peerSelector: route-reflector == 'true' # 通过peer选择器把是 true 标签的路由反射器,添加进 rrs-vs-rrs 组
```
在 peer 节点查看状态

在 rrs 节点查看状态

> 根据官网上面的yaml样例,他是把所有的节点都设置成对等了
> kind: BGPPeer
>apiVersion: projectcalico.org/v3
>metadata:
> name: peer-with-route-reflectors
>spec:
> nodeSelector: all()
> peerSelector: route-reflector == 'true'
#### 3、禁用节点之间的全互联模式
```
vim BGP-defalut.yaml
```
```
apiVersion: projectcalico.org/v3
kind: BGPConfiguration
metadata:
name: default
spec:
nodeToNodeMeshEnabled: false
asNumber: 64512
```
```
calicoctl create -f BGP-defalut.yaml
```

可以看到 mesh enabled 这个地方已经是 `false` 了
- 一、K8S的安装
- 1.1 安装环境
- 1.2 问题汇总
- 1.3 事前准备
- 1.4 安装配置负载均衡
- 1.5 安装K8S软件
- 1.6 初始化kubeadm
- 1.7 添加控制节点
- 1.8 添加计算节点
- 1.9 安装故障问题处理
- 1.10 安装管理dashboard
- 1.11 编写测试Pod
- 1.12 从外部访问集群中的Pod
- 1.13 部署metrics-server指标采集
- 二、Pod管理
- 2.1 Pod 资源需求和限制
- 2.2 Init 容器
- 2.3 Pod 健康检查(探针)和重启策略
- 2.4 Pod 生命周期(钩子Hook)
- 2.5 静态Pod
- 2.6 初始化容器(init container)
- 2.7 资源限制
- 三、资源控制器
- 3.1 Deployment
- 3.2 StatefulSet
- 3.3 DaemonSet
- 3.4 Job
- 3.5 定时任务
- 3.6 准入控制器
- 3.7 自动伸缩
- 3.8 ReplicaSet
- 四、存储
- 4.1 Secret 管理敏感信息
- 4.2 ConfigMap 存储配置
- 4.3 Volume
- 4.4 PV
- 4.5 PVC
- 4.6 StorageClass
- 4.7 暴露宿主机信息给Pod
- 五、服务Service
- 5.1 Service 资源
- 5.2 服务发现
- 5.3 服务暴露
- 5.4 Ingress 资源
- 5.5 Ingress 专题
- 5.6 traefik 2.X版本使用
- 六、认证、授权、准入控制
- 6.1 服务账户
- 6.2 LimitRange资源与准入控制器
- 6.3 ResourceQuota 资源与准入控制器
- 七、Helm
- 7.1 Helm 安装
- 八、 istio
- 8.1 istio 介绍
- 8.2 iotis 安装
- 九、calico
- 9.1 两种网络模式
- 9.2 全互联模式 与 路由反射模式
- 9.3 BGP跨网段(大型网络)
- 十、Ingress
- 10.1 安装 LoadBalancer
- 10.2 部署 ingress-nginx
- 10.3 Ingress-nginx 的使用
- 10.4 开启TCP和UDP
- 使用中的问题
- CSI Node问题
