核心思想

将每个Kubernetes节点都变成一个”虚拟路由器”,通过BGP协议(边界网关协议)在节点间动态交换路由信息,从而实现Pod间的纯三层网络通信,无需任何隧道封装

Tip

BGP路由模式(无隧道封装) = 纯三层

核心组件

  • Felix (节点代理):运行在每个节点上,负责将Pod的路由信息写入Linux内核的路由表,并将网络策略转化为访问控制规则,是底层的”执行者”。
  • BIRD (BGP客户端):运行在每个节点上,负责将Felix写入内核的路由信息通过BGP协议广播给集群内的其他节点或外部的物理路由器。
  • BGP Route Reflector (路由反射器,可选):在大规模集群中,为解决节点间BGP连接数爆炸的问题,可以指定部分节点作为路由反射器(RR)。其他节点只需与RR建立连接,由RR集中分发路由信息,从而降低连接数

工作流程

  1. 当Pod A要访问Pod B时,数据包到达节点A。
  2. 节点A查询本地路由表(由Felix维护),发现去往Pod B所在网段的下一跳是节点B的IP(由BIRD通过BGP分发)。
  3. 然后数据包被直接通过节点A的物理网卡发送给节点B,节点B再将数据包转发给目标Pod。

部署拓扑

  • 全互联模式 (Full-Mesh)

    • 每个节点都与其他所有节点建立BGP连接。
    • 这种模式配置简单,适合中小规模集群。官方推荐在100个节点以内使用。
    • 当节点数增多时,连接数呈平方级增长(例如1000个节点就需要约50万条连接),这会成为巨大的性能负担。
  • 路由反射器模式 (Route Reflector)

    • 集群中专门指定一个或多个节点作为路由反射器(RR),它们彼此间建立全互联。
    • 其他普通节点只需与RR建立BGP连接。路由反射器负责将所有节点的路由信息收集并反射给其他节点,从而将连接数从N²降为N
    • 这是大规模集群的必选方案。