核心思想
将每个Kubernetes节点都变成一个”虚拟路由器”,通过BGP协议(边界网关协议)在节点间动态交换路由信息,从而实现Pod间的纯三层网络通信,无需任何隧道封装
Tip
BGP路由模式(无隧道封装) = 纯三层
核心组件
- Felix (节点代理):运行在每个节点上,负责将Pod的路由信息写入Linux内核的路由表,并将网络策略转化为访问控制规则,是底层的”执行者”。
- BIRD (BGP客户端):运行在每个节点上,负责将Felix写入内核的路由信息通过BGP协议广播给集群内的其他节点或外部的物理路由器。
- BGP Route Reflector (路由反射器,可选):在大规模集群中,为解决节点间BGP连接数爆炸的问题,可以指定部分节点作为路由反射器(RR)。其他节点只需与RR建立连接,由RR集中分发路由信息,从而降低连接数
工作流程
- 当Pod A要访问Pod B时,数据包到达节点A。
- 节点A查询本地路由表(由Felix维护),发现去往Pod B所在网段的下一跳是节点B的IP(由BIRD通过BGP分发)。
- 然后数据包被直接通过节点A的物理网卡发送给节点B,节点B再将数据包转发给目标Pod。
部署拓扑
-
全互联模式 (Full-Mesh):
- 每个节点都与其他所有节点建立BGP连接。
- 这种模式配置简单,适合中小规模集群。官方推荐在100个节点以内使用。
- 当节点数增多时,连接数呈平方级增长(例如1000个节点就需要约50万条连接),这会成为巨大的性能负担。
-
路由反射器模式 (Route Reflector):
- 集群中专门指定一个或多个节点作为路由反射器(RR),它们彼此间建立全互联。
- 其他普通节点只需与RR建立BGP连接。路由反射器负责将所有节点的路由信息收集并反射给其他节点,从而将连接数从N²降为N
- 这是大规模集群的必选方案。