tnblog
首页
视频
资源
登录

BGP RR路由反射与Calico的初探

7733人阅读 2022/10/11 19:44 总访问:3659052 评论:0 收藏:0 手机
分类: 网络

BGP RR路由反射与Calico的初探

BGP RR路由反射介绍


由于IBGP水平分割的存在,为了保证所有的BGP路由器都能学习到完整的BGP路由,就必须在AS内实现IBGP全互联,这就导致AS内部需要维护大量的BGP连接,从而影响网络性能,路由反射器(Route Reflector,RR)可以放宽水平分割原则,解决该问题。

为保证IBGP对等体之间的连通性,需要在IBGP对等体之间建立全连接关系。假设在一个AS内部有n台设备,那么建立的IBGP连接数就为n(n-1)/2。当设备数目很多时,设备配置将十分复杂,而且配置后网络资源和CPU资源的消耗都很大。在IBGP对等体间使用路由反射器可以解决以上问题。

简单来讲一个区域内所有人都是所有人的对等体,那么所有人都需要再除自己之外的所有人进行获取路由。而路由反射器相当于一个主管告诉下面所有的客户端你们都不需要去每个每个去问了我去获取所有的连接路由的路由表(不管是IBGP、EBGP、非Client的IBGP对等体),再把这些给连接的路由器,相对于这个区域下形成主从关系。

RR在接收BGP路由时


1.如果该路由学习自非Client IBGP对等体,则反射给自己所有的Client。
举例:下图R3为非Client时将反射给R2的Client。


如果路由学习自Client,则反射给所有非Client IBGP对等体和除了该Client之外的所有Client。


如果路由学习自己EBGP对等体,则发送给所有Client和非Client IBGP对等体。

名词 描述
路由反射器RR(Route Reflector) 允许把从IBGP对等体学到的路由反射到其他IBGP对等体的BGP设备,类似OSPF网络中的DR。
客户机(Client) 与RR形成反射邻居关系的IBGP设备。在AS内部客户机只需要与RR直连。
非客户机(Non-Client) 既不是RR也不是客户机的IBGP设备。在AS内部非客户机与RR之间,以及所有的非客户机之间仍然必须建立全连接关系。
始发者(Originator) 在AS内部始发路由的设备。Originator_ID属性用于防止集群内产生路由环路。
集群(Cluster) 路由反射器及其客户机的集合。Cluster_List 属性用于防止集群间产生路由环路。

RR反射简单Demo


基本配置

  1. system-view
  2. sysname AR11
  3. int g0/0/0
  4. ip a 10.1.12.11 24
  5. int g0/0/1
  6. ip a 10.1.13.11 24
  7. int L 0
  8. ip a 1.1.1.1 32
  9. dis ip int B
  10. q
  1. system-view
  2. sysname AR12
  3. int g0/0/0
  4. ip a 10.1.12.12 24
  5. int L 0
  6. ip a 2.2.2.2 32
  7. dis ip int B
  8. q
  1. system-view
  2. sysname AR13
  3. int g0/0/0
  4. ip a 10.1.13.13 24
  5. int L 0
  6. ip a 3.3.3.3 32
  7. dis ip int B
  8. q


配置ospf

  1. ospf router-id 1.1.1.1
  2. A 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. q
  6. q
  1. ospf router-id 2.2.2.2
  2. A 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. q
  6. q
  1. ospf router-id 3.3.3.3
  2. A 0
  3. network 0.0.0.0 255.255.255.255
  4. dis this
  5. dis ospf peer b
  6. q
  7. q


配置BGP

  1. bgp 123
  2. router-id 1.1.1.1
  3. peer 2.2.2.2 as-number 123
  4. peer 2.2.2.2 connect-interface L0
  5. peer 3.3.3.3 as-number 123
  6. peer 3.3.3.3 connect-interface L0
  7. # 以AR11为中心设置邻居AR12为我的客户端
  8. peer 2.2.2.2 reflect-client
  9. # 以AR11为中心设置邻居AR13为我的客户端
  10. peer 3.3.3.3 reflect-client
  1. bgp 123
  2. router-id 2.2.2.2
  3. peer 1.1.1.1 as-number 123
  4. peer 1.1.1.1 connect-interface L0
  1. bgp 123
  2. router-id 3.3.3.3
  3. peer 1.1.1.1 as-number 123
  4. peer 1.1.1.1 connect-interface L0
  5. dis this


这样就完成了AR11把AR12和AR13当成它的客户端了。
接下来我们通过配置AR13来进行验证反射路由,创建一个L1的口IP为33.33.33.33/32,然后在bgp中进行宣告。

  1. int L1
  2. ip 33.33.33.33 32
  3. q
  4. bgp 123
  5. router-id 3.3.3.3
  6. network 33.33.33.33 32
  7. dis bgp routing-table


然后我们在AR12中查看发现它是映射成功了的。

  1. bgp 123
  2. dis bgp routing-table
  3. q
  4. q


接下来我们关闭AR11对AR12的客户端认证,再刷新AR12的BGP看能否可以学习到。

  1. # AR11
  2. bgp 123
  3. undo peer 2.2.2.2 reflect-client
  4. dis this
  1. # AR12
  2. refresh bgp external import
  3. dis bgp routing-table


我们发现它仍然存在。

放图1


如果我们再再AR13上添加一个新的口子,由于AR11不再认为AR12为客户端,AR12将学习不到了。

  1. # AR13
  2. int L2
  3. ip 99.99.99.99 32
  4. q
  5. bgp 123
  6. router-id 3.3.3.3
  7. network 99.99.99.99 32
  8. dis bgp routing-table
  1. # AR12
  2. dis bgp routing-table


AR11清理AR13认证的客户端后,AR12以前学习的将丢失。

  1. # AR11
  2. bgp 123
  3. undo peer 3.3.3.3 reflect-client
  4. q
  5. q
  6. refresh bgp external import
  1. # AR12
  2. dis bgp routing-table


在完成这些之后,我们知道通过RR反射的方式可以获取同一区域下的路由的路由表,但如果AR11挂了AR12是不是就学习不到其他路由器的存在的(其他路由亦是如此),所以我们可以建立一个或多个RR路由,来保证高可用的问题。
Calico为优化k8s网络基于BGP由此诞生。

Calico的诞生


calico是一个比较有趣的虚拟网络解决方案,它完全利用路由规则实现动态组网,通过BGP协议通告路由。
calico的优点:

endpoints组成的网络是单纯的三层网络,报文的流向完全通过路由规则控制,没有overlay等额外开销;
calico的endpoint可以漂移,并且实现了acl。
calico的缺点:

路由的数目与容器数目相同,非常容易超过路由器、三层交换、甚至node的处理能力,从而限制了整个网络的扩张;
calico的每个node上会设置大量(海量)的iptables规则、路由,运维、排障难度大;
calico的原理决定了它不可能支持VPC,容器只能从calico设置的网段中获取ip;
calico目前的实现没有流量控制的功能,会出现少数容器抢占node多数带宽的情况;

calico设计的BGP网络


1.AS per rack: 每个rack(机架)组成一个AS,每个rack的TOR交换机与核心交换机组成一个AS
2.AS per server: 每个node做为一个AS,TOR交换机组成一个transit AS

AS per rack


1.一个机架作为一个AS,分配一个AS号,node是ibgp,TOR交换机是ebgp
2.node只与TOR交换机建立BGP连接,TOR交换机与机架上的所有node建立BGP连接
3.所有TOR交换机之间以node-to-node mesh方式建立BGP连接


TOR交换机之间可以是接入到同一个核心交换机二层可达的,也可以只是IP可达的。
TOR二层交换机:


TOR三层联通:


在这种方案里,每个Tor 交换机到Tor 交换机或者TOR交换机到 spine switch 的链路是EBGP对等的。那就意味着北向 tor 交换机无法使用 RR(Route Reflector)。
如果使用了2层的方式,结果就是每个Tor 交换机之间必须彼此对等(可能有上百个对等),可能会造成负载过重。
如果使用3层的方式,那么每个TOR 交换机只需要和上级的 spine switch 对等即可。虽然spine switch 下会有许多TOR 交换机,可以使用RR(如上图所示),而且绝大部分spine switch拥有比TOR交换机更好的平面控制能力,在多数环境下更易扩展。
两者的配置基本相同,只是在TOR 交换机的北向配置上有些差异。
TOR 交换机,作为EBGP router 会获取其他TOR switch 以及数据中心上的路由,重新分配到该AS下的每个计算节点上。并且会将自身AS内的所有路由信息向外通告。这就意味着,每个计算节点会将该AS内的TOR 交换机视为到外部路由的下一跳。外部路由到该AS的下一跳则是该AS下的某台计算节点

AS per server


 1.每个TOR交换机占用一个AS,通过EBGP链接
2.每个node占用一个AS
3.node与TOR交换机交换BGP信息
4.所有的TOR交换机组成BGP mesh,交换BGP信息


这种模式的概念同 The AS per rack 类似。在早期的 IETF draft 中,整个架构的路由和汇聚都由TOR发起。在 Calico 中,那么路由和汇聚的起始点为各计算节点。如果TOR为3层的路由器,也只能作为2机的路由和汇聚点。
因此,顺着架构往下分析,计算节点会作为AS的边界router。同 The AS per rack 的差异可从下面2张图体现。
TOR二层联通:


从上图不难发现,TOR 和 spine swtich 和 AS per rack 模式中一样。真正的不同在于,计算节点和TOR处于不同的AS中。为了扩展集群,需要使用4字节的AS编号(RFC 4893). 如果不使用4字节的AS编号(默认2字节),那么calico 平面中的TOR 和计算节点大约只有5000左右的私有AS编号可使用。如果采用了4字节,则会有接近92,000000私有AS编号可用。
TOR三层联通:


还有个差异,就是在per AS Compute Server 模式中没有 RR(Router Reflector)。所有设备都是EBGP对等的。当同一机架下的两个计算节点之间需要通信时,会通过TOR来路由。
可以将这种模式看做The AS per rack 的缩影。

The Downward Default model


最后一种模式会显得有些不同。在上面介绍的架构中,路由器需要收集机构中所有的路由表,并使他们的AS路径保持原样。这种模式在路由阶段将AS号移除。


所有TOR使用一个AS,结算节点使用另一个AS的做法简化了部署(使用标准配置即可),带来的好处就是简化了TOR中的路由表。
这种模式下,每个 Router 都向上级节点汇报自己的路由信息(vRouter –> TOR –> spine switch)。however, 作为回应,上级节点仅仅返回一条默认路由。在这种情况下,vRouter 只有本机Endpoint的路由以及到TOR的默认路由。同样,对于TOR来说只有到直连vRouter和spine switch的路由。即使我们一个机架下有80台计算节点,每个计算节点上有200个Endpoint, 那在TOR上也就16000条记录左右。(大多数交换机都能达到这个数目)
由于路由下发默认是由 spine 发起的,所以下游的AS接受者无法下发路由,这就避免了AS的干扰问题。
这种模式下,有个主要的缺点:非法目的地址(eg. 目的地址不存在)的流量都会被送往spine switch。
值得注意的是,spine switch会收集 calico 网络中所有的路由条目。这种模式并不会使spine switch 中的路由条目比原来更多,但却着实减少了TOR上的路由信息。同时也减少了vRouter上的路由信息。但这并不是关注的重点,因为Calico中的完整路由表所消耗的内存量是现代计算服务器上可用总内存的一部分。

做一个calico模拟


配置直连基础配置。

  1. system-view
  2. sysname AR1
  3. int g0/0/0
  4. ip a 10.1.13.1 24
  5. dis this
  6. int g0/0/1
  7. ip a 10.1.14.1 24
  8. dis this
  1. system-view
  2. sysname AR2
  3. int g0/0/0
  4. ip a 10.1.23.2 24
  5. dis this
  6. int g0/0/1
  7. ip a 10.1.24.1 24
  8. dis this
  1. system-view
  2. sysname AR3
  3. int g0/0/0
  4. ip a 10.1.13.3 24
  5. dis this
  6. int g0/0/1
  7. ip a 10.1.23.3 24
  8. int g0/0/2
  9. ip a 10.1.35.3 24
  10. int g4/0/0
  11. ip a 10.1.36.3 24
  12. dis this
  13. int L0
  14. ip a 3.3.3.3 32
  1. system-view
  2. sysname AR5
  3. int g0/0/0
  4. ip a 10.1.35.5 24
  5. int L0
  6. ip a 5.5.5.5 32
  7. dis ip int b
  8. ping 10.1.35.3
  1. system-view
  2. sysname AR6
  3. int g0/0/0
  4. ip a 10.1.36.6 24
  5. int L0
  6. ip a 6.6.6.6 32
  7. dis ip int b
  8. ping 10.1.36.3
  1. system-view
  2. sysname AR4
  3. int g0/0/0
  4. ip a 10.1.14.4 24
  5. dis this
  6. int g0/0/1
  7. ip a 10.1.24.4 24
  8. int g0/0/2
  9. ip a 10.1.47.4 24
  10. int g4/0/0
  11. ip a 10.1.48.4 24
  12. dis this
  13. int L0
  14. ip a 4.4.4.4 32
  15. dis ip int b
  16. ping 10.1.14.1
  17. ping 10.1.24.2
  1. system-view
  2. sysname AR7
  3. int g0/0/0
  4. ip a 10.1.47.7 24
  5. int L0
  6. ip a 7.7.7.7 32
  7. dis ip int b
  8. ping 10.1.47.4
  1. system-view
  2. sysname AR8
  3. int g0/0/0
  4. ip a 10.1.48.8 24
  5. int L0
  6. ip a 8.8.8.8 32
  7. dis ip int b
  8. ping 10.1.48.4


配置ospf

  1. # AR5
  2. ospf router-id 5.5.5.5
  3. A 0
  4. network 0.0.0.0 255.255.255.255
  5. q
  6. q
  7. bgp 356
  8. router-id 5.5.5.5
  9. peer 3.3.3.3 as-number 356
  10. peer 3.3.3.3 conect-interface L0
  11. dis this
  1. # AR6
  2. ospf router-id 6.6.6.6
  3. A 0
  4. network 0.0.0.0 255.255.255.255
  5. q
  6. q
  7. bgp 356
  8. router-id 6.6.6.6
  9. peer 3.3.3.3 as-number 356
  10. peer 3.3.3.3 conect-interface L0
  11. dis this
  1. # AR3
  2. ospf router-id 3.3.3.3
  3. A 0
  4. network 0.0.0.0 255.255.255.255
  5. q
  6. q
  7. bgp 356
  8. router-id 3.3.3.3
  9. peer 5.5.5.5 as-number 356
  10. peer 5.5.5.5 conect-interface L0
  11. peer 6.6.6.6 as-number 356
  12. peer 6.6.6.6 conect-interface L0
  13. peer 5.5.5.5 reflect-client
  14. peer 6.6.6.6 reflect-client
  15. peer 10.1.13.1 as-number 100
  16. peer 10.1.23.2 as-number 200
  17. dis this
  18. dis bgp peer
  19. dis current-configuration
  1. # AR1
  2. system-view
  3. bgp 100
  4. peer 10.1.13.3 as-number 356
  5. dis peer
  6. peer 10.1.14.4 as-number 478
  7. dis peer
  8. ping 10.1.13.3
  9. dis this
  1. # AR2
  2. system-view
  3. bgp 200
  4. peer 10.1.23.3 as-number 356
  5. dis peer
  6. peer 10.1.24.4 as-number 478
  7. dis peer
  8. ping 10.1.13.3
  9. dis this
  1. # AR4
  2. ospf router-id 4.4.4.4
  3. A 0
  4. network 0.0.0.0 255.255.255.255
  5. q
  6. q
  7. bgp 478
  8. router-id 4.4.4.4
  9. peer 7.7.7.7 as-number 478
  10. peer 7.7.7.7 conect-interface L0
  11. peer 8.8.8.8 as-number 478
  12. peer 8.8.8.8 conect-interface L0
  13. peer 7.7.7.7 reflect-client
  14. peer 8.8.8.8 reflect-client
  15. peer 10.1.14.1 as-number 100
  16. peer 10.1.24.2 as-number 200
  17. dis this
  18. dis bgp peer
  19. dis current-configuration
  1. # AR7
  2. ospf router-id 7.7.7.7
  3. A 0
  4. network 10.1.47.7 0.0.0.255
  5. q
  6. q
  7. bgp 478
  8. router-id 7.7.7.7
  9. peer 4.4.4.4 as-number 478
  10. peer 4.4.4.4 conect-interface L0
  11. dis this
  12. int L1
  13. ip a 77.77.77.77 32
  14. bgp 478
  15. network 77.77.77.77 255.255.255.255
  16. dis this
  17. dis bgp routing-table
  1. # AR7
  2. ospf router-id 8.8.8.8
  3. A 0
  4. network 10.1.48.8 0.0.0.255
  5. q
  6. q
  7. bgp 478
  8. router-id 8.8.8.8
  9. peer 4.4.4.4 as-number 478
  10. peer 4.4.4.4 conect-interface L0
  11. dis this
  1. # AR6 验证
  2. system-view
  3. bgp 356
  4. int L1
  5. ip a 66.66.66.66 32
  6. q
  7. bgp 356
  8. network 66.66.66.66 255.255.255.255
  9. q
  10. dis bgp routing-table
  11. dis ip routing-table

欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Kubernetes Calico BGP RR路由反射器模式

Kubernetes Calico BGP RR路由反射器模式[TOC] RR路由反射器模式简介Calico 维护的网络在默认是(Node-to-Node Mesh)全互...

k8s 集群多节点 Calico指定网卡。

对于openstack 平台, 需要修改mtu 以及指定 网卡 方法1: kubectl set env daemonset/calico-node -n kube-system IP_AUT...

k8s 与 Calico 的版本对应。k8s 18.0 对应的Calico版本。k8s 网络插件 Calico的使用

k8s 18.0 对应的calico版本可以是3.14版本可以使用下面的方式下载 wget https://docs.projectcalico.org/v3.14/manifests/...

k8s安装网络插件Calico

calico和flannel类似,感觉更强大一点,所以推荐使用它 下载calico注意版本,如果直接下载最新版本会报错,和你的k8s不匹...

k8s初始化kubeadm init与网络插件Calico的使用

k8s初始化的时候参数可以给详细一点,如下kubeadm init \ --apiserver-advertise-address=192.168.12.244 \ --image-repos...

k8s 网络插件 Calico 和 flannel 文档

https://projectcalico.docs.tigera.io/getting-started/kubernetes/flannel/flannel

Kubernetes Calico IPIP

Kubernetes Calico IPIP[TOC] Calico简介1.Calico是一个纯3层的数据中心网络方案,而且无缝集成像OpenStack这种Iaas云架构...

Kubernetes Calico Vxlan

Kubernetes Calico Vxlan[TOC] 安装vxlan我们可以通过如下命令一件安装Calico Vxlan。kubectl apply -f https://raw.githu...

Kubernetes Calico BGP Full Mesh模式

Kubernetes Calico BGP Full Mesh模式[TOC] Full Mesh模式简介Full Mesh - 全互联模式,启用了 BGP 之后,Calico 的默认行...

Kubernetes Calico VPP软协议栈

Kubernetes Calico VPP软协议栈[TOC] VPP简介VPP(Vector Packet Processor)是一个高性能、开源的用户空间网络数据平面,...

求解Calico多网卡绑定问题

# This section includes base Calico installation configuration.# For more information, see: https://docs.tigera.io/...
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术