KVM&OVS组网配置案例-2

0.配置要求

  • 1.使用ovs创建一个网桥,网桥上添加宿主机eth0接口,接口为trunk,可转发所有vlan的数据
  • 2.使用KVM创建并图形安装两个linux虚拟机vm1,vm2。
  • 3.vm1关联ovs的vlan10接口,vm2关联ovs的vlan20接口。
  • 4.vm1获取vlan10的IP地址,vm2获取vlan20IP地址。
  • 5.vlan10,vlan20的网关在宿主机eth0接口连接的物理交换机上,物理交换机开启vlan10,vlan20的DHCP功能,为vm1,vm2自动分配地址。

1. 环境准备

1.1 安装必要软件

# 安装 OVS 和 KVM 相关工具
sudo apt update
sudo apt install openvswitch-switch qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils virt-manager

1.2 验证 OVS 和 KVM 状态

sudo systemctl status openvswitch-switch libvirtd

2. 配置 OVS 网桥

2.1 创建 OVS 网桥 ovs-br0

sudo ovs-vsctl add-br ovs-br0

2.2 将宿主机物理网卡 eth0 添加为 Trunk 端口

# 将 eth0 添加到 ovs-br0,并允许所有 VLAN(1-4094)
sudo ovs-vsctl add-port ovs-br0 eth0 trunk=10,20  # 仅允许 VLAN 10 和 20(根据实际需求调整)
sudo ovs-vsctl add-port ovs-br0 eth0 tag=*  # tag=*或0表示允许所有VLAN标签的数据通过

2.3 验证 OVS 配置

sudo ovs-vsctl show

输出应包含以下信息:

Bridge ovs-br0
    Port eth0
        trunks: [10, 20]
    Port ovs-br0
        Interface ovs-br0
            type: internal

3. 创建 KVM 虚拟机

3.1 创建虚拟机磁盘

# 创建 vm1 和 vm2 的磁盘镜像
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm1.qcow2 10G
sudo qemu-img create -f qcow2 /var/lib/libvirt/images/vm2.qcow2 10G

3.2 创建虚拟机并关联 OVS 接口

# 创建 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 spice \
  --console pty,target_type=serial \
  --cdrom /path/to/ubuntu-20.04.iso  # 关键:挂载 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 spice \
  --console pty,target_type=serial \
  --cdrom /path/to/ubuntu-20.04.iso

3.3 安装操作系统

通过 SPICE/VNC 控制台完成操作系统的安装过程。
安装完成后,虚拟机会自动从磁盘启动。

3.4 验证虚拟机接口

# 查看虚拟机接口名称(例如 vnet0 和 vnet1)
virsh domiflist vm1
virsh domiflist vm2

4. 验证 OVS 端口 VLAN 配置

# 查看 OVS 端口 VLAN 标记
sudo ovs-vsctl list port | grep -E 'name|tag'

输出应类似:

name                : "vnet0"
tag                 : 10

name                : "vnet1"
tag                 : 20

name                : "eth0"
trunks              : [10, 20]

5. 虚拟机网络配置

5.1 启动虚拟机并获取 DHCP 地址

# 进入 vm1 控制台(按 Enter 激活)
virsh console vm1

# 在 vm1 内执行:
dhclient -v eth0  # 自动获取 VLAN 10 的 IP

# 进入 vm2 控制台
virsh console vm2

# 在 vm2 内执行:
dhclient -v eth0  # 自动获取 VLAN 20 的 IP

5.2 验证 IP 地址

# 在 vm1 内:
ip addr show eth0  # 应显示类似 192.168.10.x/24

# 在 vm2 内:
ip addr show eth0  # 应显示类似 192.168.20.x/24

5.3 验证网关连通性

# 在 vm1 内:
ping 192.168.10.1  # VLAN 10 网关(假设物理交换机 VLAN 10 网关 IP)

# 在 vm2 内:
ping 192.168.20.1  # VLAN 20 网关

6. 物理交换机配置(补充说明)

确保物理交换机满足以下条件:

  1. 连接宿主机的端口配置为 Trunk,允许 VLAN 10 和 20。
  2. VLAN 10 和 20 已启用 DHCP 服务(例如通过 DHCP 中继或本地 DHCP 服务器)。

7. 故障排查

7.1 虚拟机无法获取 IP

  • 检查 OVS VLAN 标记
    sudo ovs-vsctl get port vnet0 tag
    sudo ovs-vsctl get port vnet1 tag
    
  • 检查物理交换机 Trunk 配置:确保允许 VLAN 10 和 20。

7.2 虚拟机之间无法通信

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

总结

通过以上步骤,您完成了以下配置:

  1. OVS 网桥 ovs-br0 作为 Trunk 接口连接物理网络。
  2. 两个虚拟机分别接入 VLAN 10 和 20。
  3. 虚拟机通过物理交换机的 DHCP 服务自动获取 IP。
  4. VLAN 间隔离由物理交换机和 OVS 共同实现。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容