3. 网络拓扑设计:扁平网络、Overlay网络、Underlay网络、混合拓扑场景
Kubernetes 网络拓扑的选择直接决定了集群的转发效率、故障隔离粒度以及运维复杂度。在生产环境中,没有一种拓扑能适用于所有场景;理解扁平、Overlay、Underlay 及混合拓扑的底层原理与性能特征,是进行 Helm 参数协同调优的前提。
3.1 四种核心拓扑模型对比
| 拓扑类型 | 转发路径 | 封装开销 | MTU 影响 | 典型场景 |
|---|---|---|---|---|
| 扁平网络 | Pod ↔ Node 同一二层/三层 | 无 | 无额外损耗 | 小规模开发集群、物理机直连 |
| Overlay 网络 | Pod → VTEP → 隧道 → VTEP → Pod | VXLAN/Geneve/IPIP 50~100 字节 | 需降低 50~100 | 多租户、跨机房、公有云 |
| Underlay 网络 | Pod 直接使用 Node 物理网络 | 无 | 无额外损耗 | 高性能计算、低延迟场景 |
| 混合拓扑 | 部分 Overlay + 部分 Underlay | 按需 | 需分段规划 | 分级服务、敏感业务隔离 |
性能关键指标: Overlay 每增加 50 字节封装头,在 1500 MTU 链路上有效载荷减少 3.3%;若未调整 Pod MTU,TCP 分段将导致吞吐量下降 15%~25%。
3.2 扁平网络拓扑
扁平网络是最原始的 K8s 网络模型:每个 Pod 被分配与 Node 同网段的 IP,Pod 之间通过宿主机的路由表直接通信,无需额外封装。这种拓扑在小型集群(< 50 节点)中表现优异,延迟接近物理网卡性能。
- 优势: 零封装开销,吞吐量可达线速;tcpdump 可直接抓取 Pod 流量,排障直观。
- 劣势: IP 地址规划受限,Pod 数量受限于子网大小;跨子网通信需要外部路由配合,扩展性差。
- 适用 CNI: macvlan、ipvlan、host-gw 模式(Calico)。
# 扁平网络下 Pod 与 Node 同网段示例
Node IP: 10.0.1.10/24
Pod IP: 10.0.1.20/24
Gateway: 10.0.1.1
# 无隧道封装,直接二层转发
3.3 Overlay 网络拓扑
Overlay 网络通过在现有三层网络之上构建虚拟化隧道层,使 Pod 可以拥有独立于物理网络的 IP 空间。这是当前公有云和多租户场景中最主流的方案。
封装协议选择: VXLAN(Linux 内核原生支持,UDP 8472)适合通用场景;Geneve(UDP 6081)支持更丰富的元数据扩展;IPIP 封装最小但仅支持 IPv4 单播。
Overlay 网络的核心性能瓶颈在于 隧道封装/解封装 的 CPU 开销以及 MTU 链式降低。以 VXLAN 为例:
- 物理网络 MTU = 1500 → Pod 网卡 MTU 必须 ≤ 1450(50 字节 VXLAN 头)。
- 若物理网络启用 jumbo frame(MTU 9000),Pod MTU 可设为 8950,吞吐量提升显著。
- 封装操作在 VTEP(VXLAN Tunnel Endpoint)上进行,内核态处理延迟约 2~5 μs,DPDK 加速可降至亚微秒级。
# Overlay 网络 MTU 链式调整示例(Helm values)
cni:
type: calico
mtu: 1450 # 物理 MTU 1500 - 50 封装头
overlay: vxlan
vxlanPort: 4789
# 若物理网络支持 jumbo frame
cni:
mtu: 8950 # 物理 MTU 9000 - 50 封装头
3.4 Underlay 网络拓扑
Underlay 网络让 Pod 直接“挂载”到物理网络接口上,Pod IP 与 Node IP 处于同一路由域。这种拓扑消除了封装开销,但要求底层网络设备支持大量 MAC/IP 学习,对交换机规格有较高要求。
- 性能特征: 延迟接近裸机,P99 延迟通常 < 10 μs;吞吐量可达 40Gbps 线速。
- 运维代价: 每个 Pod 的 IP 都需要在物理交换机上注册,大规模集群(> 200 节点)可能导致 MAC 表溢出。
- 典型实现: macvlan bridge 模式、SR-IOV、Calico BGP 直连模式。
避坑提示: Underlay 网络下,Pod 迁移(如 Deployment 滚动更新)会导致旧 IP 被立即释放,新 Pod 可能分配到不同 IP。若业务依赖固定 IP 白名单,必须配合 StatefulSet 或 IPAM 预留策略。
3.5 混合拓扑场景
混合拓扑在同一集群内同时运行 Overlay 和 Underlay 网络,通常通过 多 CNI 插件 或 NetworkAttachmentDefinition(NAD) 实现。这种设计在金融、实时音视频、AI 训练等场景中越来越普遍。
| 业务类型 | 推荐拓扑 | 原因 |
|---|---|---|
| Web API / 微服务 | Overlay | 灵活调度,多租户隔离 |
| 数据库 / 缓存 | Underlay | 低延迟,零封装开销 |
| AI 训练 / HPC | Underlay + RDMA | GPU 直接通信,绕过 CPU |
| 日志 / 监控采集 | Overlay | 无需高性能,简化网络规划 |
混合拓扑的 Helm 参数协同需要为不同工作负载设置独立的 values.yaml 覆盖:
# 全局默认使用 Overlay
global:
network:
mode: overlay
mtu: 1450
# 数据库 StatefulSet 使用 Underlay
statefulset:
db:
network:
mode: underlay
mtu: 1500
interface: eth1
ipam:
type: host-local
subnet: "10.100.0.0/24"
3.6 拓扑选择决策流程
3.7 Helm 参数协同要点
无论选择哪种拓扑,Helm 部署时都需要通过 values 文件精确控制网络参数。以下是不同拓扑下的关键参数对照:
| 参数路径 | 扁平网络 | Overlay 网络 | Underlay 网络 | 混合拓扑 |
|---|---|---|---|---|
cni.type |
calico/host-gw | calico/vxlan | macvlan/sriov | multus + 辅 CNI |
cni.mtu |
1500 | 1450 | 1500 | 按接口独立设置 |
ipam.type |
host-local | calico-ipam | whereabouts | 多 IPAM 共存 |
routing.bgp |
可选 | 不需要 | 推荐 | 按需启用 |
performance.cpuAffinity |
不敏感 | 建议绑定 | 必须绑定 | 按工作负载 |
Helm 参数协同最佳实践: 在 Chart 的
values.yaml 中定义全局网络默认值,然后通过 --set 或子 Chart 的 values 覆盖特定工作负载的网络配置。使用 helm get values 验证最终生效的参数组合。