KVM&OVS组网配置案例-3(解惑)

1. 参数解析

virt-install 命令中,--network 参数用于定义虚拟机的网络配置。具体参数如下:

--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20
  • bridge=ovs-br0:指定虚拟机连接到 OVS 网桥 ovs-br0
  • model=virtio:使用 VirtIO 半虚拟化驱动,提升性能。
  • virtualport_type=openvswitch:通知 libvirt 使用 Open vSwitch 的虚拟端口类型。
  • virtualport_options:tag=20:为端口设置 VLAN 标签(此处为 VLAN 20)。

2. 验证虚拟机是否关联到 OVS 网桥

步骤 1:创建虚拟机

使用以下命令创建 vm1vm2

# 创建 vm1(VLAN 10)
sudo virt-install \
  --name vm1 \
  --ram 1024 \
  --vcpus 1 \
  --disk path=/var/lib/libvirt/images/vm1.qcow2 \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=10 \
  --graphics none \
  --console pty,target_type=serial \
  --cdrom /path/to/ubuntu-20.04.iso

# 创建 vm2(VLAN 20)
sudo virt-install \
  --name vm2 \
  --ram 1024 \
  --vcpus 1 \
  --disk path=/var/lib/libvirt/images/vm2.qcow2 \
  --os-type linux \
  --os-variant ubuntu20.04 \
  --network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20 \
  --graphics none \
  --console pty,target_type=serial \
  --cdrom /path/to/ubuntu-20.04.iso

步骤 2:查看 OVS 端口

虚拟机启动后,检查 OVS 网桥 ovs-br0 的端口信息:

sudo ovs-vsctl show

输出应包含以下信息:

Bridge ovs-br0
    Port "vnet0"          # vm1 的虚拟网卡
        tag: 10
        Interface "vnet0"
    Port "vnet1"          # vm2 的虚拟网卡
        tag: 20
        Interface "vnet1"
    Port "eth0"           # 物理网卡
        trunks: [10, 20]
        Interface "eth0"

步骤 3:验证 VLAN 标签

检查端口 VLAN 配置:

# 查看 vnet0 的 VLAN 标签
sudo ovs-vsctl get port vnet0 tag
# 输出应为 10

# 查看 vnet1 的 VLAN 标签
sudo ovs-vsctl get port vnet1 tag
# 输出应为 20

3. 关键机制说明

1. Libvirt 与 OVS 的集成

  • 自动端口管理:当指定 virtualport_type=openvswitch 时,libvirt 会自动调用 OVS 的 API,将虚拟机的虚拟网卡(如 vnet0vnet1)添加到 OVS 网桥 ovs-br0
  • VLAN 标签设置:通过 virtualport_options:tag=20,libvirt 会为 OVS 端口设置对应的 VLAN 标签。

2. 无需手动操作

  • 用户无需手动运行 ovs-vsctl add-port,libvirt 会自动完成以下操作:
    1. 将虚拟网卡(如 vnet0)添加到 ovs-br0
    2. 设置端口的 VLAN 标签(通过 tag 参数)。

4. 验证虚拟机网络

步骤 1:启动虚拟机并获取 IP

在虚拟机内部执行以下命令(假设物理交换机已配置 VLAN 10 和 20 的 DHCP):

# 在 vm1(VLAN 10)中
dhclient -v eth0
ip addr show eth0  # 应获取类似 192.168.10.100/24 的 IP

# 在 vm2(VLAN 20)中
dhclient -v eth0
ip addr show eth0  # 应获取类似 192.168.20.100/24 的 IP

步骤 2:测试网络连通性

# 在 vm1 中 ping VLAN 10 网关(假设网关为 192.168.10.1)
ping 192.168.10.1

# 在 vm2 中 ping VLAN 20 网关(假设网关为 192.168.20.1)
ping 192.168.20.1

5. 常见问题排查

问题 1:虚拟机无法获取 IP

  • 检查 OVS 配置
    sudo ovs-vsctl show
    sudo ovs-vsctl get port vnet0 tag
    
  • 检查物理交换机
    • 确保连接宿主机的端口配置为 Trunk,允许 VLAN 10 和 20。
    • 确保 VLAN 10 和 20 的 DHCP 服务已启用。

问题 2:虚拟机之间无法通信

  • 设计隔离:VLAN 10 和 20 默认是隔离的,跨 VLAN 通信需通过物理交换机或宿主机路由。

总结

通过以下参数:

--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20
  • 虚拟机已关联到 OVS 网桥:libvirt 自动将虚拟网卡添加到 ovs-br0
  • VLAN 标签已正确设置:OVS 端口标记为指定 VLAN。
  • 无需手动操作:整个过程由 libvirt 和 OVS 自动完成。

最终,虚拟机将通过 OVS 接入指定 VLAN,并从物理交换机的 DHCP 服务获取 IP 地址。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容