温馨提示×

如何使用Linux Overlay进行网络虚拟化

小樊
36
2025-11-30 04:03:48
栏目: 云计算

Linux Overlay 网络虚拟化实操指南

一 核心概念与适用场景

  • Overlay 网络是在现有物理网络(Underlay)之上构建的虚拟网络,将二层/三层报文封装在三层/IP 之上进行传输,实现跨主机互联,同时与底层物理组网解耦。常见封装包括 VXLAN,标识为 VNI,可支持约 16M 个逻辑网络,突破传统 VLAN 约 4000 的规模限制。Overlay 适合数据中心、多租户、云原生等需要灵活隔离与快速扩展的场景。

二 方案一 手动用 Linux VXLAN 搭建 Overlay

  • 适用:需要完全掌控隧道与转发表项、学习原理或小规模实验。
  • 步骤
    1. 环境准备
      • 至少两台 Linux 主机,内核建议 ≥ 3.9/3.10(VXLAN 自 3.7 合入内核,稳定性与功能在后续版本更好)。
      • 主机间 Underlay 互通(如二层直连或三层可达),选定 VTEP 源接口(如 eth0)。
    2. 创建 VXLAN 接口(点对点示例)
      • 主机 A(Underlay IP 192.168.8.100)创建 VTEP:
        sudo ip link add vxlan0 type vxlan \
            id 42 \
            dstport 4789 \
            remote 192.168.8.101 \
            local 192.168.8.100 \
            dev eth0
        sudo ip link set vxlan0 up
        
      • 主机 B(Underlay IP 192.168.8.101)创建 VTEP(remote 指向 A)。
      • 说明:参数含义——id 42 为 VNI;dstport 4789 为 IANA 分配端口(Linux 默认 8472 为兼容保留);remote 为对端 VTEP;local 为本端 VTEP 源地址;dev 为承载隧道流量的物理网卡。
    3. 关联网桥与业务口
      • 将 VXLAN 接口加入网桥(如 br-overlay),并把容器/VM 的 veth/tap 接到该网桥,实现二层互通:
        sudo ip link add br-overlay type bridge
        sudo ip link set br-overlay up
        sudo ip link set vxlan0 master br-overlay
        sudo ip link set vxlan0 up
        
    4. 多主机泛洪替代(无组播网络时)
      • 创建不带 remote/group 的 VXLAN,手动维护 FDB(转发数据库)以替代多播:
        sudo ip link add vxlan0 type vxlan id 42 dstport 4789 dev eth0
        sudo bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst 192.168.8.101
        sudo bridge fdb append 00:00:00:00:00:00 dev vxlan0 dst 192.168.8.102
        
      • 可启用 ARP 代理减少广播:创建 VXLAN 时增加 proxy 参数,并在本地维护 IP-MAC 映射以减少 ARP 泛洪。
    5. 连通性验证
      • 在两端 Overlay 网段内配置网关/路由或直接给网桥/容器接口配置 IP,执行 ping 测试;抓包可用 tcpdump -i vxlan0 观察封装报文。

三 方案二 使用 Docker 内置 Overlay 网络

  • 适用:容器跨主机通信,快速落地生产/测试环境。
  • 步骤
    1. 准备
      • Docker ≥ 1.9 支持多主机网络;选择键值存储(如 Consul)作为控制面后端。
      • 各主机 Docker 守护进程启用集群存储与通告:
        sudo dockerd \
          --cluster-store=consul://<consul_addr>:8500 \
          --cluster-advertise=<本机IP>:0
        
    2. 创建 Overlay 网络
      docker network create --driver overlay --subnet 10.0.2.0/24 ovr-net
      
    3. 启动服务/容器
      docker service create --network ovr-net --name web nginx:alpine
      
    4. 验证
      • 进入容器检查 ip addr/route,跨主机 ping/ curl 验证连通性。
    5. 说明
      • Docker Overlay 将二层报文封装在三层进行跨主机转发,无需改动 Underlay 网络拓扑。

四 方案三 使用 OVN 与 Open vSwitch 构建 Overlay

  • 适用:需要更强的网络抽象、ACL、多租户与与 OpenStack/K8s 集成的场景。
  • 步骤
    1. 前置
      • 各主机安装 Open vSwitch ≥ 2.5;准备分布式键值存储(如 Consul)。
    2. 启动 OVN 控制面
      • 在“中心”节点配置 OVSDB 监听与 ovn-northd(北向/南向转换):
        ovs-appctl -t ovsdb-server ovsdb-server/add-remote ptcp:6640
        /usr/share/openvswitch/scripts/ovn-ctl start_northd
        
    3. 各主机接入 OVN
      • 运行 OVN 提供的接入脚本/命令,指定本地 OVN 控制器Underlay IP,完成 VTEP/逻辑网络配置(具体命令依 OVN 版本与发行包而定)。
    4. 创建逻辑网络与端口
      • 通过 OVN 北向接口创建 逻辑交换机/路由器/ACL,将容器/VM 端口挂接到逻辑网络,实现跨主机 Overlay 通信。
    5. 验证
      • 查看 ovn-nbctl/ovn-sbctl 状态,容器/VM 内做连通性与策略验证。

五 管理与排障要点

  • 配置与持久化
    • 使用 NetworkManager/nmcli 或发行版网络脚本持久化接口/网桥配置;容器/服务编排平台(如 Docker/K8s)优先使用其网络插件/网络策略进行统一管理。
  • 监控与抓包
    • 利用 netstat/tcpdump/Wireshark 观察 Overlay 与 Underlay 流量;Overlay 抓包建议针对 vxlan 接口,关注 VNI、外层 SIP/DIP、内层 MAC/IP
  • 常见问题
    • Underlay 不通/MTU 问题:Overlay 封装引入额外头部,建议将 Underlay MTU 下调约 50 字节(如 1500→1450),避免分片。
    • 组播不可用:改用“手动 FDB + ARP 代理”或采用控制面自动学习(如 OVN/Flannel/Calico 等)。
    • 控制面异常:Consul/etcd 失联会导致网络不可达,检查服务状态、网络连通与 ACL。
    • 日志与事件:结合系统日志(如 /var/log/syslog)与容器/编排平台事件进行定位。

0