干货收藏!Calico的BGP RouteReflector策略实践

💡 原文中文,约20400字,阅读约需49分钟。
📝

内容提要

本文介绍了Calico BGP RouteReflector策略的实践,通过使用Route Reflector模式减少BGP连接数量,提高网络性能。文章详细介绍了Calico BGP RouteReflector模式的组网架构和搭建环境,并提供了相关的配置文件和脚本,实现集群内外的通信和访问。

🔎

延伸解读

为什么大规模集群需要Route Reflector

Calico BGP的fullmesh模式要求每个节点与其他所有节点建立BGP连接,节点数增加时连接数呈平方级增长,会消耗大量网络资源。Route Reflector模式通过指定一个或多个BGP Speaker作为路由反射器,其他节点只需与反射器建立连接即可获得全网路由,从而显著减少BGP连接数量,更适合大规模Kubernetes集群。

组网架构与AS划分原则

文章采用Leaf-Spine架构,在不改变IDC机房内部网络拓扑的前提下,将每个接入层交换机与其管理的Node二层联通并划入同一个AS,核心层与接入层交换机之间每个路由器单独占用一个AS并物理直连运行BGP。这样核心层可感知全网路由,接入层仅感知直连Node的路由,Pod CIDR按Node物理位置分配并通过BGP宣告。

从fullmesh切换到RR模式的关键操作

部署Calico CNI时需手动关闭默认的IPIP模式以启用BGP模式。安装后节点间默认建立fullmesh全连接,需通过calicoctl应用BGPConfiguration将nodeToNodeMeshEnabled设为false来关闭全连接。随后为每个Node配置AS号和IP,并通过BGPPeer资源指定对端Leaf交换机作为路由反射器,使节点成为RR客户端。

验证BGP路由与外部访问

配置完成后,可在节点上查看BGP信息,确认不再是fullmesh形式,node specific表示该节点为路由反射器客户端。在Leaf交换机上查看路由表,应能看到K8s集群的Pod路由信息,说明外部可访问Pod。文章还通过部署DaemonSet和NodePort Service进行访问测试,并指出若核心交换机与公网配置EBGP同步路由,公网流量也能进入集群。

❓

Q&A

Calico的BGP RouteReflector策略有什么优势?

Calico的BGP RouteReflector策略可以减少BGP连接数量,避免全连接带来的网络消耗,从而提高网络性能。

如何搭建Calico BGP RouteReflector的环境?

搭建环境需要Ubuntu 22.04、Docker、Kind和ContainerLab等工具,并按照提供的脚本进行配置。

Calico BGP RouteReflector模式的组网架构是怎样的?

组网架构中,接入层交换机与核心层交换机通过BGP连接,节点通过BGP协议宣告路由信息,实现全网通信能力。

Calico CNI插件如何配置以启用BGP模式?

需要手动关闭ipip模式,确保不通过ipip/vxlan封装,从而启用BGP模式。

在Calico中如何关闭BGP全连接模式?

可以通过执行配置脚本,设置BGPConfiguration中的nodeToNodeMeshEnabled为false来关闭全连接模式。

如何进行BGP验证测试以确保网络互通性?

可以通过集群外访问Pod进行BGP验证测试,确保路由信息正确并且网络互通。

🏷️

标签

➡️

继续阅读