mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4
728 字
2 分钟
为什么集群需要 Overlay 网络
2023-09-05

在 Kubernetes 和 Docker Swarm 等容器编排平台中,Overlay 网络是连接多个主机上容器的关键技术。为什么需要 Overlay 网络?它解决了什么问题?

一、容器网络的基础问题#

1.1 单机容器网络#

flowchart LR subgraph 主机 A C1[容器 1] C2[容器 2] N[Network Namespace] end C1 <--> C2

单机上,容器通过 Linux Bridge 或 veth 对通信。

1.2 跨主机通信的需求#

flowchart LR subgraph 主机 1 C1[容器 1] end subgraph 主机 2 C2[容器 2] end C1 -->|通信| C2 Note: 容器 1 如何找到容器 2?

问题

  • 多个主机上的容器 IP 可能冲突
  • 主机网络和容器网络需要隔离
  • 动态扩缩容需要网络自动调整

二、Overlay 网络的解决方案#

2.1 什么是 Overlay 网络?#

flowchart LR subgraph Underlay (物理网络) H1[主机 1] H2[主机 2] end subgraph Overlay (虚拟网络) C1[容器 1] C2[容器 2] end C1 <-->|Overlay| C2 C1 -->|封装| H1 H1 -->|解封| H2 H2 -->|封装| C2

Overlay 网络:在物理网络之上构建的虚拟网络。

2.2 Overlay 的优势#

优势说明
IP 隔离容器使用独立 IP 段,不与物理网络冲突
透明迁移容器可以在主机间迁移而 IP 不变
规模扩展支持大规模容器集群
网络自动化容器网络自动化管理

三、VXLAN:主流的 Overlay 协议#

3.1 VXLAN 原理#

flowchart LR subgraph 原始数据包 E[以太网头] I[IP 头] U[UDP 头] V[VXLAN 头] D[原始数据] end subgraph 封装后 OE[外部以太网头] OI[外部 IP 头] OU[外部 UDP 头] OV[VXLAN 头] E2[以太网头] I2[IP 头] D2[原始数据] end E --> OV I --> OV U --> OV V --> OV D --> OV OV --> OE OV --> OI OV --> OU OV --> E2 OV --> I2 OV --> D2

VXLAN(Virtual eXtensible LAN)

  • 使用 UDP 封装
  • 24 位 VNI,支持 1600 万个虚拟网络
  • 通过 VTEP(VXLAN Tunnel End Point)封装/解封

3.2 VXLAN 的工作流程#

sequenceDiagram participant C1 as 容器 1 participant V1 as VTEP 1 participant P as 物理网络 participant V2 as VTEP 2 participant C2 as 容器 2 C1->>V1: 发送数据包(目标容器 2) V1->>V1: 添加 VXLAN 头(VNI=100) V1->>P: 封装为 UDP 包(目标主机 2 IP) P->>V2: 路由到目标主机 V2->>V2: 移除 VXLAN 头 V2->>C2: 传递原始数据包

四、Kubernetes 中的 Overlay 网络#

4.1 CNI 插件的角色#

flowchart LR K[Kubernetes] --> CNI[CNI 插件] CNI --> F[Flannel] CNI --> C[Cilium] CNI --> CB[Calico] F -->|使用| VXV[VXLAN] C -->|使用| VXE[VXLAN/eBPF] CB -->|使用| IP[IPIP/BGP]

4.2 Flannel 的实现#

# Flannel 配置文件
{
"Network": "10.244.0.0/16",
"Backend": {
"Type": "vxlan"
}
}
模式说明
VXLAN使用 VXLAN 封装,推荐用于生产
host-gw直接路由,性能更好,需要二层连通
UDP性能最差,已弃用

4.3 Pod 网络流程#

sequenceDiagram participant P1 as Pod A participant N as Node 1 CNI participant V as VTEP participant P2 as Pod B participant N2 as Node 2 CNI P1->>N: 发送数据包(Pod B IP) N->>V: 查询路由表,找到 Pod B 在 Node 2 V->>V: VXLAN 封装 V->>N2: 通过物理网络发送到 Node 2 N2->>P2: 解封装,传递到 Pod B

五、Overlay vs Underlay#

5.1 对比#

特性UnderlayOverlay
网络类型物理网络虚拟网络
IP 分配DHCP/静态容器网络插件
隔离性
灵活性
性能有额外开销
复杂度

5.2 何时使用 Overlay#

场景推荐
多主机容器集群必须使用 Overlay
大规模容器网络Overlay(VXLAN)
容器需要独立 IP 段Overlay
高性能应用Underlay 或 host-gw

六、性能考量#

6.1 Overlay 的开销#

flowchart LR subgraph 无封装 D[数据] end subgraph VXLAN 封装 E[Ethernet] I[IP] U[UDP] V[VXLAN] D2[数据] end D -->|原始| O1[约 0% 开销] E -->|封装| O2[约 5-10% CPU 开销]

VXLAN 开销

  • CPU:封装/解封需要额外处理
  • 带宽:额外的头部开销(约 50 字节/包)
  • 延迟:略有增加

6.2 优化建议#

# 1. 使用网卡 offload
ethtool -K eth0 tx-gso-robust on
# 2. 调整 UDP 封装端口
# 使用较大的 RSS 队列

七、总结#

7.1 为什么需要 Overlay 网络#

原因说明
IP 隔离容器网络与物理网络隔离
跨主机通信容器在不同主机上仍能通信
可扩展性支持大规模集群
自动化网络配置自动化管理

7.2 VXLAN 的特点#

特性说明
VNI24 位,支持 1600 万虚拟网络
封装UDP 封装,穿越物理网络
兼容性兼容现有物理网络设备

核心观点:Overlay 网络是云原生时代的必然选择,它让容器网络与物理网络解耦,实现了容器集群的灵活性和可扩展性。

参考资料#

支持与分享

如果这篇文章对你有帮助,欢迎支持作者或分享给更多人

为什么集群需要 Overlay 网络
https://blog.souloss.com/posts/why-the-design/why-clusters-need-overlay-networks/
作者
Souloss
发布于
2023-09-05
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时