要详细分析 Calico BGP、IPIP 和 VXLAN 模式下不同 Node 上 Pod 之间的流量传输路径,需要关注以下几个关键网络接口的角色和数据流向:
- Pod 内部的 veth 接口
- 宿主机的 veth 对应端
- 宿主机的 CNI 设备(通常是
cali+
接口) - Node 上的物理网络接口(如
eth0
) - IPIP/VXLAN 设备(如果适用)
- 目的地 Node 的解封装流程
- 目的 Pod 的 veth 接口
一、Calico BGP 模式下 Pod 之间的流量传输 #
1. 网络拓扑 #
- Node1(192.168.1.1):
- PodA(10.1.1.2)
- 宿主机
eth0
(192.168.1.1) cali+
接口(连接 PodA)
- Node2(192.168.1.2):
- PodB(10.1.2.3)
- 宿主机
eth0
(192.168.1.2) cali+
接口(连接 PodB)
2. 详细流量路径 #
graph TD
subgraph Node1["Node 1 (192.168.1.1)"]
PodA["PodA (10.1.1.2)"]
vethA["vethA (PodA eth0)"]
caliA["caliXXXX (Calico veth)"]
eth1["eth0 (宿主机)"]
end
subgraph Node2["Node 2 (192.168.1.2)"]
PodB["PodB (10.1.2.3)"]
vethB["vethB (PodB eth0)"]
caliB["caliYYYY (Calico veth)"]
eth2["eth0 (宿主机)"]
end
PodA --> vethA --> caliA
caliA -->|BGP 路由| eth1
eth1 -->|裸 IP 直接转发| eth2
eth2 --> caliB --> vethB --> PodB
PodA (10.1.1.2) → PodB (10.1.2.3) #
- PodA 发送数据包
- PodA (10.1.1.2) 向 PodB (10.1.2.3) 发送数据包
- 数据包进入 PodA 的 veth 接口
eth0
- 通过 veth pair 进入宿主机
- PodA 的
eth0
(veth 子接口)连接到宿主机上的caliXXXX
设备(Calico 创建的 veth 对应端)
- PodA 的
- 宿主机查找路由
caliXXXX
设备收到数据包,进入宿主机的 路由表- 由于 Calico 通过 BGP 传播路由,Node1 知道 10.1.2.3 在 Node2
- 宿主机的
eth0
直接将数据包原生 IP 转发到192.168.1.2
- Node2 接收数据
- Node2 的
eth0
接收到数据包 - 根据 路由表 知道 10.1.2.3 在本机,数据包通过
caliXXXX
进入 PodB 的eth0
- Node2 的
- PodB 接收数据
- PodB(10.1.2.3)收到数据包,通信完成
特点 #
✅ 优点
- 没有封装,性能最佳
- 适用于裸金属环境
- ECMP 负载均衡支持
❌ 缺点
- 需要 BGP 交换机支持
- 云环境难以部署
二、Calico IP-in-IP (IPIP) 模式下 Pod 之间的流量传输 #
1. 网络拓扑 #
- Node1(192.168.1.1)
- PodA(10.1.1.2)
- 宿主机
eth0
(192.168.1.1) tunl0
(IPIP 隧道设备)
- Node2(192.168.1.2)
- PodB(10.1.2.3)
- 宿主机
eth0
(192.168.1.2) tunl0
(IPIP 隧道设备)
2. 详细流量路径 #
graph TD
subgraph Node1["Node 1 (192.168.1.1)"]
PodA["PodA (10.1.1.2)"]
vethA["vethA (PodA eth0)"]
caliA["caliXXXX (Calico veth)"]
tunl1["tunl0 (IPIP 隧道)"]
eth1["eth0 (宿主机)"]
end
subgraph Node2["Node 2 (192.168.1.2)"]
PodB["PodB (10.1.2.3)"]
vethB["vethB (PodB eth0)"]
caliB["caliYYYY (Calico veth)"]
tunl2["tunl0 (IPIP 隧道)"]
eth2["eth0 (宿主机)"]
end
PodA --> vethA --> caliA
caliA --> tunl1
tunl1 -->|IPIP 封装| eth1
eth1 -->|IPIP 隧道| eth2
eth2 --> tunl2
tunl2 -->|解封装| caliB
caliB --> vethB --> PodB
PodA (10.1.1.2) → PodB (10.1.2.3) #
PodA 发送数据包
- PodA 的
eth0
(veth 设备)发送数据包,进入caliXXXX
设备
- PodA 的
宿主机封装 IPIP
宿主机路由表发现 10.1.2.3 归属于 Node2
数据包被 IPIP 设备
tunl0
封装封装后的数据包
外层 IP 头: src=192.168.1.1, dst=192.168.1.2 内层 IP 头: src=10.1.1.2, dst=10.1.2.3
跨 Node 传输
eth0
发送 IPIP 封装数据包到 Node2
Node2 解封装
- Node2 收到 IPIP 数据包,通过
tunl0
解封,恢复原始 IP 头部
- Node2 收到 IPIP 数据包,通过
路由转发到 PodB
- 数据包进入
caliXXXX
,转发给 PodB(10.1.2.3)
- 数据包进入
PodB 接收数据
- PodB(10.1.2.3)收到数据包,通信完成
特点 #
✅ 优点
- 适用于云环境(无需 BGP 设备)
- 支持跨子网(可用
CrossSubnet
优化)
❌ 缺点
- 封装增加 20 字节开销
- 不支持 ECMP 负载均衡
三、Calico VXLAN 模式下 Pod 之间的流量传输 #
1. 网络拓扑 #
- Node1(192.168.1.1)
- PodA(10.1.1.2)
- 宿主机
eth0
(192.168.1.1) - VXLAN 设备
vxlan.calico
- Node2(192.168.1.2)
- PodB(10.1.2.3)
- 宿主机
eth0
(192.168.1.2) - VXLAN 设备
vxlan.calico
2. 详细流量路径 #
graph TD
subgraph Node1["Node 1 (192.168.1.1)"]
PodA["PodA (10.1.1.2)"]
vethA["vethA (PodA eth0)"]
caliA["caliXXXX (Calico veth)"]
vxlan1["vxlan.calico (VXLAN 隧道)"]
eth1["eth0 (宿主机)"]
end
subgraph Node2["Node 2 (192.168.1.2)"]
PodB["PodB (10.1.2.3)"]
vethB["vethB (PodB eth0)"]
caliB["caliYYYY (Calico veth)"]
vxlan2["vxlan.calico (VXLAN 隧道)"]
eth2["eth0 (宿主机)"]
end
PodA --> vethA --> caliA
caliA --> vxlan1
vxlan1 -->|VXLAN 封装| eth1
eth1 -->|UDP 4789 传输| eth2
eth2 --> vxlan2
vxlan2 -->|解封装| caliB
caliB --> vethB --> PodB
PodA (10.1.1.2) → PodB (10.1.2.3) #
PodA 发送数据包
- PodA 的
eth0
(veth 设备)发送数据包,进入caliXXXX
设备
- PodA 的
宿主机封装 VXLAN
vxlan.calico
设备将数据包封装成 VXLAN封装后的数据包
外层 IP 头: src=192.168.1.1, dst=192.168.1.2 VXLAN 头: VNI=4096 内层 IP 头: src=10.1.1.2, dst=10.1.2.3
通过 UDP 4789 端口 发送 VXLAN 数据包
跨 Node 传输
eth0
发送 VXLAN 数据包到 Node2
Node2 解封装
vxlan.calico
设备解封 VXLAN,恢复原始 IP 头部
路由转发到 PodB
- 数据包进入
caliXXXX
,转发给 PodB(10.1.2.3)
- 数据包进入
PodB 接收数据
- PodB(10.1.2.3)收到数据包,通信完成
特点 #
✅ 优点
- 适用于公有云
- 支持 ECMP 负载均衡
- 支持跨子网
❌ 缺点
- VXLAN 头部增加 50 字节
- 依赖 UDP 端口 4789
总结 #
模式 | 性能 | 适用场景 | 封装开销 | 负载均衡 |
---|---|---|---|---|
BGP | 高 | 裸金属/数据中心 | 无封装 | ✅ |
IPIP | 中等 | 公有云 | 20 字节 | ❌ |
VXLAN | 低 | 大规模公有云 | 50 字节 | ✅ |
希望这篇详细分析能帮到你!🚀
总结 #
模式 | 适用环境 | 负载均衡 | 额外封装 | 适用于公有云 | 适用于裸金属 |
---|---|---|---|---|---|
BGP | 物理数据中心 | ✅ | 无 | ❌ | ✅ |
IPIP | 公有云/私有云 | ❌ | 20 字节 | ✅ | ❌ |
VXLAN | 公有云/大规模集群 | ✅ | 50 字节 | ✅ | ❌ |
17k 住宿 600每月,4-6人间, 公积金3000 7% 双边交,五险7200 交,
17000 x 12,公积金400每月,
17.4k x 12=208.8k
十几薪?有无年终奖?有出差吗?包吃饭吗?
15.5k x 12+12k+12K+1.86kx12=232k