Overlay网络在哪些操作系统上应用,能助我高效拓展哪些特定网络技能?
- 内容介绍
- 文章标签
- 相关推荐
Overlay网络 成为了连接多主机容器的关键技术。许多开发者在学习 Docker、Kubernetes 或建立自研微服务时经常遇到以下痛点:
- 为什么需要它?
- 不知道哪些操作程序支持 Overlay 网络,导致部署时出现兼容性问题。
- 想把 Overlay 网络应用到自己的项目,但缺乏实际案例和可执行的步骤。
- 对底层源码实现感兴趣,却不知道从哪里开始阅读。
Overlay网络是一种虚拟网络,它在已有的物理网络之上叠加一层逻辑网路。通过软件定义的隧道,将跨主机的容器或虚拟机数据包封装后再解封装。实现了跨宿主机通信。它是 Docker Swarm、Kubernetes 等多节点集群主要的网络方案。
主要工作原理
1️⃣ 容器生成数据包 → 2️⃣ 隧道驱动为每个数据包添加 VNI → 3️⃣ 在物理网卡上发送封装后的报文 → 4️⃣ 对端节点解封装后交给目标容器。
哪些操作程序可以直接使用 Overlay 网络?
Linux 主机
- CentOS / RHEL:7.x 及以上,内核 3.10+ 支持 VXLAN;推荐 8.x / 9.x 程序以获得更好稳定性。
- Ubuntu:20.04+ 或 Debian Bullseye;内核至少 5.4,默认已开启 VXLAN 支持。
- Debian:Kali、Stretch 等也能使用,但需手动加载 overlay 模块;建议使用最新 LTS,
windows 与 macOS 的实现差异
- windows:- Hyper‑V 虚拟交换机 + VXLAN/ Geneve 支持; 需要 Windows Server 2016+ 或 Windows 10 Pro/Enterprise 的 Hyper‑V 功能开启。
- macOS:- Docker Desktop 内部使用 lightweight hipervisor 来跑 Linux 容器;Overlay 网络通过 macOS 上的 VPNKit 实现,并通过 VirtualBox / HyperKit 与宿主机共享网络。对普通使用者只需开启 Docker Desktop 的 “Use legacy Hyper‑Kit” 即可体验 Overlay 功能。
Docker & Kubernetes 如何启用 Overlay 网络?
Docker Swarm 简单示例
# 初始化 Swarm
docker swarm init
# 创建一个 overlay 网络
docker network create -d overlay my_overlay
# 在不同节点开启服务
docker service create --name web \
--replicas=4 \
--network my_overlay \
nginx
Kubernetes 中的 Calico / Flannel 示例
- Kubeadm + Calico:CreateCalico.yaml 中会自动部署 CNI 插件,默认就会使用 VXLAN Overlay。
- Kubeadm + Flannel:`kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml` 会生成一个基于 VXLAN 的 overlay。
User Pain Point:源码理解与实战应用如何结合?
"我想贡献代码,但不了解源码结构"
- Moby Project: Docker Engine 是用 Go 写成的。其 CNI 插件代码位于 m/cni-driver/overlayfs.cni.go,可直接查看 vxlan 驱动实现。建议先看官方文档中关于 CNI plugin architecture 的章节,再去阅读对应源文件。话说回来,
- Kubernetes Network Plugin: K8s 官方插件如 Calico、Flannel 都有完整 GitHub 仓库。你可以 fork 后在本地搭建 Minikube 或 kind 集群。接下来修改配置文件测试不同 VNI 范围或 MTU 设置,从而观察流量走向变化。
- Tutorial + Test Cases: 先从最小可运行实例做起。例如在两台 Linux 虚拟机上跑 docker swarm 并加入同一个 overlay,接下来用 tcpdump 捕获桥接口数据包,验证 VNI 是否正确匹配。这样既能验证功能,又能让你快速定位代码中的关键变量和函数调用方法。老实说,
Overlay网络 成为了连接多主机容器的关键技术。许多开发者在学习 Docker、Kubernetes 或建立自研微服务时经常遇到以下痛点:
- 为什么需要它?
- 不知道哪些操作程序支持 Overlay 网络,导致部署时出现兼容性问题。
- 想把 Overlay 网络应用到自己的项目,但缺乏实际案例和可执行的步骤。
- 对底层源码实现感兴趣,却不知道从哪里开始阅读。
Overlay网络是一种虚拟网络,它在已有的物理网络之上叠加一层逻辑网路。通过软件定义的隧道,将跨主机的容器或虚拟机数据包封装后再解封装。实现了跨宿主机通信。它是 Docker Swarm、Kubernetes 等多节点集群主要的网络方案。
主要工作原理
1️⃣ 容器生成数据包 → 2️⃣ 隧道驱动为每个数据包添加 VNI → 3️⃣ 在物理网卡上发送封装后的报文 → 4️⃣ 对端节点解封装后交给目标容器。
哪些操作程序可以直接使用 Overlay 网络?
Linux 主机
- CentOS / RHEL:7.x 及以上,内核 3.10+ 支持 VXLAN;推荐 8.x / 9.x 程序以获得更好稳定性。
- Ubuntu:20.04+ 或 Debian Bullseye;内核至少 5.4,默认已开启 VXLAN 支持。
- Debian:Kali、Stretch 等也能使用,但需手动加载 overlay 模块;建议使用最新 LTS,
windows 与 macOS 的实现差异
- windows:- Hyper‑V 虚拟交换机 + VXLAN/ Geneve 支持; 需要 Windows Server 2016+ 或 Windows 10 Pro/Enterprise 的 Hyper‑V 功能开启。
- macOS:- Docker Desktop 内部使用 lightweight hipervisor 来跑 Linux 容器;Overlay 网络通过 macOS 上的 VPNKit 实现,并通过 VirtualBox / HyperKit 与宿主机共享网络。对普通使用者只需开启 Docker Desktop 的 “Use legacy Hyper‑Kit” 即可体验 Overlay 功能。
Docker & Kubernetes 如何启用 Overlay 网络?
Docker Swarm 简单示例
# 初始化 Swarm
docker swarm init
# 创建一个 overlay 网络
docker network create -d overlay my_overlay
# 在不同节点开启服务
docker service create --name web \
--replicas=4 \
--network my_overlay \
nginx
Kubernetes 中的 Calico / Flannel 示例
- Kubeadm + Calico:CreateCalico.yaml 中会自动部署 CNI 插件,默认就会使用 VXLAN Overlay。
- Kubeadm + Flannel:`kubectl apply -f https://raw.githubusercontent.com/coreos/flannel/master/Documentation/kube-flannel.yml` 会生成一个基于 VXLAN 的 overlay。
User Pain Point:源码理解与实战应用如何结合?
"我想贡献代码,但不了解源码结构"
- Moby Project: Docker Engine 是用 Go 写成的。其 CNI 插件代码位于 m/cni-driver/overlayfs.cni.go,可直接查看 vxlan 驱动实现。建议先看官方文档中关于 CNI plugin architecture 的章节,再去阅读对应源文件。话说回来,
- Kubernetes Network Plugin: K8s 官方插件如 Calico、Flannel 都有完整 GitHub 仓库。你可以 fork 后在本地搭建 Minikube 或 kind 集群。接下来修改配置文件测试不同 VNI 范围或 MTU 设置,从而观察流量走向变化。
- Tutorial + Test Cases: 先从最小可运行实例做起。例如在两台 Linux 虚拟机上跑 docker swarm 并加入同一个 overlay,接下来用 tcpdump 捕获桥接口数据包,验证 VNI 是否正确匹配。这样既能验证功能,又能让你快速定位代码中的关键变量和函数调用方法。老实说,

