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 IP | Pod 网段 | 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 IP | Pod 网段 | 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 对比
| 特性 | IBGP | EBGP |
|---|---|---|
| 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
重点:
-
BGP 通告:仅更新路由信息,不传递数据包。
-
数据包转发:Pod -> veth -> Node Kernel -> 下一跳节点 -> veth -> 目标 Pod。
-
IBGP:同 AS,下一跳保留原节点 Host IP。
-
EBGP:跨 AS,可配置
next-hop-self。 -
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 数据包路径
-
三节点拓扑示意
浙公网安备 33010602011771号