温馨提示×

Ubuntu Overlay虚拟机如何搭建

小樊
38
2025-12-10 04:31:50
栏目: 云计算

Ubuntu Overlay 虚拟机搭建指南

一、目标与架构选择

  • 常见“Overlay”有两类:一类是容器跨主机通信的Docker Overlay 网络,另一类是虚拟化/SDN中的二层/三层 Overlay 网络(如基于Open vSwitch OVN)。前者运行在容器引擎之上,后者运行在宿主机/虚拟机网络栈之上。
  • 典型架构对比:
    • Docker Overlay:依赖键值存储(如Consul)或内置集群,创建VXLAN隧道承载容器跨主机流量,适合容器工作负载。
    • OVN/OVS Overlay:在宿主机上用OVN编排OVS流表,通过Geneve/VXLAN封装,适合虚拟机或裸金属的多租户网络。

二、方案一 Docker Overlay 在虚拟机中的搭建

  • 适用场景:多台运行 Ubuntu 的虚拟机,需要在其上运行的容器实现跨主机互联。
  • 步骤
    1. 环境准备(两台以上 Ubuntu 虚拟机)
      • 安装 Docker:sudo apt-get update && sudo apt-get install -y docker.io
      • 允许管理流量通过本地端口(示例用端口2375;生产建议启用 TLS):
        • /etc/docker/daemon.json 增加: { “cluster-store”: “consul://<KV_IP>:8500”, “cluster-advertise”: “<本机管理IP>:2375” }
        • 重启:sudo systemctl daemon-reload && sudo systemctl restart docker
    2. 部署键值存储(Consul)
      • 在其中一台虚拟机启动 Consul(单机演示): nohup consul agent -server -bootstrap -ui -client=0.0.0.0 -bind=<本机IP> -data-dir=/opt/consul >/var/log/consul.log 2>&1 &
      • 浏览器访问 http://<KV_IP>:8500 检查成员与健康状态。
    3. 创建 Overlay 网络
      • 在任一节点执行: docker network create -d overlay --subnet 10.22.1.0/24 --gateway 10.22.1.1 my_overlay_network
    4. 启动容器并验证
      • 在不同虚拟机上分别运行容器并接入同一 Overlay 网络: docker run -d --name c1 --net my_overlay_network ubuntu:24.04 sleep infinity docker run -it --rm --net my_overlay_network ubuntu:24.04 ping <另一容器的IP>
      • 如需固定 IP:docker run -d --name c2 --net my_overlay_network --ip 10.22.1.10 ubuntu:24.04
    5. 常见问题
      • 管理端口未开放或防火墙阻断(放行2375/8500等)。
      • 各节点时间不同步(建议安装并启用 chrony/ntp)。
      • 使用自签名证书或启用 TLS 时,需正确配置 Docker 客户端证书。

三、方案二 基于 OVS/OVN 的虚拟机 Overlay 搭建

  • 适用场景:需要在虚拟机层面提供二层/三层隔离跨主机互联,可叠加安全组、ACL 等能力。
  • 步骤(两台以上 Ubuntu 宿主机/虚拟机)
    1. 安装基础组件
      • sudo apt-get update
      • sudo apt-get install -y openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils
    2. 部署 OVN(简化路径)
      • 安装 OVN(Ubuntu 22.04/24.04 常见可用版本): sudo apt-get install -y ovn-central ovn-host
      • 初始化北向/南向数据库(在“Central”节点): sudo ovn-nbctl set-connection ptcp:6641:0.0.0.0 sudo ovn-sbctl set-connection ptcp:6642:0.0.0.0
    3. 配置 OVN 逻辑网络
      • 在 Central 节点创建逻辑交换机与端口(示例): sudo ovn-nbctl ls-add ls1 sudo ovn-nbctl lsp-add ls1 vm1-port sudo ovn-nbctl lsp-set-addresses vm1-port 00:00:00:00:00:01 sudo ovn-nbctl lsp-set-port-security vm1-port 00:00:00:00:00:01
      • 将宿主机接入(在每台宿主机执行,<本机IP> 为管理 IP): sudo ovs-vsctl set open . external-ids:ovn-remote=tcp:<Central_IP>:6642 sudo ovs-vsctl set open . external-ids:ovn-encap-type=geneve,vxlan sudo ovs-vsctl set open . external-ids:ovn-encap-ip=<本机IP> sudo systemctl restart ovn-controller
    4. 在虚拟机中接入
      • 使用 libvirt 创建 VM,将网卡连接到由 OVS 管理的网桥(如 br-int 或自定义桥),并在 OVN 中将对应端口加入逻辑交换机 ls1
      • 为 VM 配置静态 MAC(如上 00:00:00:00:00:01),便于 OVN 学习转发。
    5. 验证
      • 在 VM 内互 ping;在 Central 节点查看逻辑拓扑与端口绑定: sudo ovn-nbctl show sudo ovn-sbctl show
  • 说明
    • OVN 支持 Geneve/VXLAN 封装、分布式逻辑路由、ACL 等;生产可结合 OVSDB 高可用与证书认证。

四、快速对比与选型建议

维度 Docker Overlay OVS/OVN Overlay
工作层级 容器网络之上 宿主机/虚拟机网络之上
依赖组件 Docker + KV(如 Consul) OVS + OVN
封装协议 常见为 VXLAN Geneve/VXLAN
适用对象 容器跨主机互联 虚拟机/裸金属多租户网络
配置复杂度 低-中 中-高
典型场景 微服务、开发测试 NFV、多租户云、复杂网络策略

五、常见问题与排障要点

  • 端口与连通性
    • Docker Overlay:放行 2375/8500(或启用 TLS 的相关端口);Consul UI 端口 8500 用于健康检查。
    • OVN:放行 6641/6642(OVN NB/SB),以及 Geneve(6081)/VXLAN(4789) 等封装端口;确保管理网络互通。
  • 时间同步
    • 多节点环境务必启用 chrony/ntp,否则 KV/数据库一致性会受影响。
  • 防火墙与安全
    • 生产环境不要长期开放未加密的管理端口;Docker 建议启用 TLS;OVN 可结合 RBAC/证书
  • 虚拟化网络模式
    • 若使用 libvirt/KVM,优先使用桥接到 OVS 的方式接入 Overlay,而非 NAT,以避免额外 NAT 影响与策略复杂性。
  • 日志与诊断
    • Docker:journalctl -u docker;Consul:/var/log/consul.log;OVN:ovn-nbctl/ovn-sbctl show、ovs-vsctl show、journalctl -u ovn-controller。

0