Calico BGP 网络模型生产实践

📅 2026/6/26 2:23:42
Calico BGP 网络模型生产实践
每台机架作为 AS 自治系统该模型下两种模式中 Leaf 交换机的路由表数量是一致的区别仅为谁来承担 BGP Peer 带来的连接压力。1.1.L2 Spine 模式如上图所示L2 Spine 模式下 Spine 是纯二层交换机所有 Leaf 建立 eBGP 连接AS 号不一样这样会导致 Leaf 交换机承担了所有连接压力公式中为什么要 /2因为 A 跟 B 建立了连接在 B 处就不能算这条连接了...跟阶梯式九九乘法表一个逻辑BGP FullMesh 全网连接数计算公式N× (N-1)/2在上图中可能这么一个疑问L2 Spine 的纯二层交换机有什么意义呢从图 Key 可以看到蓝色连线是 Ethernet Connection也就是网线。以环境中有 100 台 Leaf 交换机建立 eBGP 为例他们要怎样进行物理上的连接呢按照上面的计算公式完成所有连接则需要 4959 跟网线这显然不可能...所以L2 Spine 存在的意义就是提供所有 Leaf 之间的二层连通性它解决的不是路由问题而是物理连线问题。1.2.L3 Spine 模式如上图所示L3 Spine 模式下 Spine 是三层交换机具有路由功能每台 Leaf 只和几台 Spine 建 eBGP 联系。这样就由性能更强的 Spine 交换机承担所有的 eBGP 连接N 为 Spine 交换机S 为 Leaf 交换机N×S以 100 台 Leaf 交换机、4 台 Spine 交换机为例每台 Spine 交换机建立 100 条 eBGP 连接4 台就是 400 条2.每台服务器作为 AS 自治系统该模型将 每台机架作为 AS 自治系统 这一概念做到了极致。在前文引用的 IETF RFC 7938 文档中其整体模型所的假设是机架顶层交换机ToR是第一层的聚合与路由单元。而在 Calico 架构中即使三层交换机 ToR 具有路由能力但它实际处于的架构层级也只是第二层因为服务器本身才是第一层路由器/聚合点Pod 流量最先也是最后到达的都是服务器上的路由栈。因此该模型将 AS 边界从机架上的 ToR 变为了机架中的服务器。但同机架两台服务器通信必须走 ToR原因纯碎是 BGP 拓扑结构决定的由于每台服务器都是独立的 AS所以同机架内的服务器并不会建立 BGP 会话那两台服务器间的 Pod 通信还是要经过 ToR 转发...那这样做的意义并不大 况且每台服务器一个 AS 编号管理成本太高了...L2 Spine 模式参考 1.1.L2 Spine 模式仅有机架内服务器是否作为路由器来用这一个区别L3 Spine 模式参考 1.2.L3 Spine 模式仅有机架内服务器是否作为路由器来用这一个区别3.Downward Default 模型在前面两种模型中Calico BGP 路由反射器RR Leaf通过 eBGP 连接上层 Spine 交换机这就带来一个问题Leaf 交换机会收到全量路由表而不仅仅是本机架的路由会给 Leaf 造成较大的压力。所以 Calico 官方提供了一种名为 Downward Default 的模型用于解决 Leaf 交换机压力问题。在此模型中路由传递遵循原则朝向 Spine 交换机时每层设备会把自己知道的所有 Pod 路由都通告出去。比如每个 K8s 节点会把自己上面的所有 Pod 网段告诉 LeafLeaf 收到后继续把这些 Pod 路由告诉 Spine朝向服务器时每层设备只通告一条默认路由 0.0.0.0/0没有具体的 Pod 路由。比如 Spine 只告诉 Leaf 一条默认路由Leaf 也只告诉下面的 K8s 节点一条默认路由。这样 Leaf 只需要记住本机柜Rack的 Pod 路由不需要学习其他机柜的路由可以大幅降低路由表规模。当一个 Pod 需要访问另一个 Pod 时请求同机柜 Pod通过默认路由把流量发给 Leaf查到目标是本机柜内的 Pod直接转发给对应节点请求不同机柜 PodLeaf 通过默认路由把流量转发给 Spine由 Spine 根据自己掌握的全量路由表把流量送到目标机柜对应的 Leaf最终到达目标 Pod。另一方面为防止网络中其他节点的路由因被识别为源自本地 AS 而无法被成功安装AS 号会在路由路径的每一个阶段被移除。此处移除 AS并不是说配置中删去 asNumber而是指BGP 路由的每个阶段都移除 AS Path 内容。假设一条 Pod 路由是这样的ControlAS 65500 -- Leaf0AS 64512 → Spine0AS 500-- Leaf1AS 64512-- Worker2AS 65500每经过一个 AS 后BGP 会把自己的 AS 号追加到 AS Path 前面最左。所以 Worker2 收到这条路由时AS Path 是64512、500、64512、65500由于 eBGP 防环规则iBGP 不会修改 AS Path只有 eBGP 传递 Worker2 一看 AS Path 里面有自己的 AS 号直接就丢了也就是被防环机制拒绝了。这时会有一个疑问既然 BGP 防环靠的就是 AS Path把它去掉后靠什么防环在 Downward Default 模型中只有两条路能走都不存在环路​ a. 路由通告自下而上Pod -- Leaf -- Spine转递 Pod 全