bgp通告

 


Calico + Bird + BGP 网络通信原理(IBGP 与 EBGP)

1️⃣ 基础概念

  • BGP (Border Gateway Protocol):自治系统 (AS) 内外的路由通告协议。

  • Calico:容器网络方案,支持 veth 网络和 BGP 路由通告。

  • Bird:用户空间路由守护进程,可作为 Calico 的 BGP backend。

  • IBGP / EBGP

    • IBGP:同 AS 内节点间路由通告。

    • EBGP:跨 AS 节点或外部路由器间路由通告。


2️⃣ IBGP(同 AS)示例

节点与网段

节点Host IPPod 网段AS
NodeA 10.0.0.1 192.168.10.0/24 65001
NodeB 10.0.0.2 192.168.20.0/24 65001

Bird 配置示意(NodeA)

protocol kernel {
    scan time 20;
    import all;
    export all;
}

protocol bgp IBGP_TO_B {
    local as 65001;
    neighbor 10.0.0.2 as 65001;
    import all;
    export all;  # 通告 NodeA Pod 网段
}

通告流程 ASCII 图(IBGP)

PodA 192.168.10.2
   |
   v
vethA (Calico)
   |
   v
NodeA Kernel route 192.168.10.0/24
   |
   v
Bird (NodeA) ---------- IBGP 通告 --------+
                                           |
                                     Bird (NodeB)
                                           |
                                           v
                               NodeB Kernel route 192.168.10.0/24
                                           |
                                           v
                                      vethB (PodB)
                                           |
                                           v
                                       PodB 192.168.20.2

说明

  • IBGP 仅在同 AS 节点间通告。

  • NodeB 学到 NodeA Pod 网段,下一跳仍为 NodeA。

  • 内核路由表更新保证 Pod 间互通。


3️⃣ EBGP(跨 AS)示例

节点与网段

节点Host IPPod 网段AS
NodeA 10.0.0.1 192.168.10.0/24 65001
NodeC 10.0.1.1 192.168.30.0/24 65002

Bird 配置示意(NodeA)

protocol bgp EBGP_TO_C {
    local as 65001;
    neighbor 10.0.1.1 as 65002;
    import all;
    export all;  # 通告 NodeA Pod 网段给 NodeC
}

通告流程 ASCII 图(EBGP)

PodA 192.168.10.2
   |
   v
vethA (Calico)
   |
   v
NodeA Kernel route 192.168.10.0/24
   |
   v
Bird (NodeA) ---------- EBGP 通告 ---------> Bird (NodeC)
                                           |
                                           v
                               NodeC Kernel route 192.168.10.0/24
                                           |
                                           v
                                      vethC (PodC)
                                           |
                                           v
                                       PodC 192.168.30.2

说明

  • EBGP 用于跨 AS 通告。

  • NodeC 学到 NodeA Pod 网段,下一跳默认 NodeA(可配置 next-hop-self)。

  • 内核路由表更新后,PodC 可以访问 PodA。


4️⃣ IBGP vs EBGP 对比

特性IBGPEBGP
AS 相同 不同
下一跳策略 保留原下一跳 默认保留原下一跳,可修改
通告范围 同 AS 节点间 跨 AS 节点或外部网络
使用场景 集群内部 Pod 网段互通 与外部网络或其他集群互通

5️⃣ 完整 Pod-to-Pod 通信流程

IBGP 数据包流

PodA ── vethA ──> NodeA Kernel ──> Bird ──[IBGP]──> Bird NodeB ──> NodeB Kernel ── vethB ──> PodB

EBGP 数据包流

PodA ── vethA ──> NodeA Kernel ──> Bird ──[EBGP]──> Bird NodeC ──> NodeC Kernel ── vethC ──> PodC

重点

  1. BGP 通告:仅更新路由信息,不传递数据包。

  2. 数据包转发:Pod -> veth -> Node Kernel -> 下一跳节点 -> veth -> 目标 Pod。

  3. IBGP:同 AS,下一跳保留原节点 Host IP。

  4. EBGP:跨 AS,可配置 next-hop-self

  5. Calico veth:承载最终 Pod 间实际通信流量。


6️⃣ 三节点完整拓扑示意(IBGP + EBGP)

           +----------------+
           |    NodeA       |
           | Host: 10.0.0.1 |
           | Pods: 192.168.10.0/24
           +----------------+
             | IBGP | EBGP
     +-------+      +-------------------+
     |                              |
+-----------+                   +-----------+
| NodeB     |                   | NodeC     |
| Host:10.0.0.2 |                | Host:10.0.1.1 |
| Pods:192.168.20.0/24 |          | Pods:192.168.30.0/24 |
+-----------+                   +-----------+

说明

  • NodeA <-> NodeB:IBGP,保持下一跳为 NodeA。

  • NodeA <-> NodeC:EBGP,可选择 next-hop-self

  • 数据包从 Pod 发出,经过 veth、Node Kernel 路由和 BGP 学到的下一跳节点,最终到达目标 Pod。


✅ 文档完整覆盖:

  • BGP 基础与 Calico 网络

  • IBGP / EBGP 配置示例

  • 路由通告流程 ASCII 图

  • 内核路由更新

  • Pod-to-Pod 数据包路径

  • 三节点拓扑示意


 

posted on 2025-09-09 15:01  吃草的青蛙  阅读(23)  评论(0)    收藏  举报

导航