1. 參數(shù)解析
在 virt-install 命令中,--network 參數(shù)用于定義虛擬機(jī)的網(wǎng)絡(luò)配置。具體參數(shù)如下:
--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20
-
bridge=ovs-br0:指定虛擬機(jī)連接到 OVS 網(wǎng)橋ovs-br0。 -
model=virtio:使用 VirtIO 半虛擬化驅(qū)動(dòng),提升性能。 -
virtualport_type=openvswitch:通知 libvirt 使用 Open vSwitch 的虛擬端口類型。 -
virtualport_options:tag=20:為端口設(shè)置 VLAN 標(biāo)簽(此處為 VLAN 20)。
2. 驗(yàn)證虛擬機(jī)是否關(guān)聯(lián)到 OVS 網(wǎng)橋
步驟 1:創(chuàng)建虛擬機(jī)
使用以下命令創(chuàng)建 vm1 和 vm2:
# 創(chuàng)建 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
# 創(chuàng)建 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 端口
虛擬機(jī)啟動(dòng)后,檢查 OVS 網(wǎng)橋 ovs-br0 的端口信息:
sudo ovs-vsctl show
輸出應(yīng)包含以下信息:
Bridge ovs-br0
Port "vnet0" # vm1 的虛擬網(wǎng)卡
tag: 10
Interface "vnet0"
Port "vnet1" # vm2 的虛擬網(wǎng)卡
tag: 20
Interface "vnet1"
Port "eth0" # 物理網(wǎng)卡
trunks: [10, 20]
Interface "eth0"
步驟 3:驗(yàn)證 VLAN 標(biāo)簽
檢查端口 VLAN 配置:
# 查看 vnet0 的 VLAN 標(biāo)簽
sudo ovs-vsctl get port vnet0 tag
# 輸出應(yīng)為 10
# 查看 vnet1 的 VLAN 標(biāo)簽
sudo ovs-vsctl get port vnet1 tag
# 輸出應(yīng)為 20
3. 關(guān)鍵機(jī)制說(shuō)明
1. Libvirt 與 OVS 的集成
-
自動(dòng)端口管理:當(dāng)指定
virtualport_type=openvswitch時(shí),libvirt 會(huì)自動(dòng)調(diào)用 OVS 的 API,將虛擬機(jī)的虛擬網(wǎng)卡(如vnet0、vnet1)添加到 OVS 網(wǎng)橋ovs-br0。 -
VLAN 標(biāo)簽設(shè)置:通過(guò)
virtualport_options:tag=20,libvirt 會(huì)為 OVS 端口設(shè)置對(duì)應(yīng)的 VLAN 標(biāo)簽。
2. 無(wú)需手動(dòng)操作
- 用戶無(wú)需手動(dòng)運(yùn)行
ovs-vsctl add-port,libvirt 會(huì)自動(dòng)完成以下操作:- 將虛擬網(wǎng)卡(如
vnet0)添加到ovs-br0。 - 設(shè)置端口的 VLAN 標(biāo)簽(通過(guò)
tag參數(shù))。
- 將虛擬網(wǎng)卡(如
4. 驗(yàn)證虛擬機(jī)網(wǎng)絡(luò)
步驟 1:?jiǎn)?dòng)虛擬機(jī)并獲取 IP
在虛擬機(jī)內(nèi)部執(zhí)行以下命令(假設(shè)物理交換機(jī)已配置 VLAN 10 和 20 的 DHCP):
# 在 vm1(VLAN 10)中
dhclient -v eth0
ip addr show eth0 # 應(yīng)獲取類似 192.168.10.100/24 的 IP
# 在 vm2(VLAN 20)中
dhclient -v eth0
ip addr show eth0 # 應(yīng)獲取類似 192.168.20.100/24 的 IP
步驟 2:測(cè)試網(wǎng)絡(luò)連通性
# 在 vm1 中 ping VLAN 10 網(wǎng)關(guān)(假設(shè)網(wǎng)關(guān)為 192.168.10.1)
ping 192.168.10.1
# 在 vm2 中 ping VLAN 20 網(wǎng)關(guān)(假設(shè)網(wǎng)關(guān)為 192.168.20.1)
ping 192.168.20.1
5. 常見(jiàn)問(wèn)題排查
問(wèn)題 1:虛擬機(jī)無(wú)法獲取 IP
-
檢查 OVS 配置:
sudo ovs-vsctl show sudo ovs-vsctl get port vnet0 tag -
檢查物理交換機(jī):
- 確保連接宿主機(jī)的端口配置為 Trunk,允許 VLAN 10 和 20。
- 確保 VLAN 10 和 20 的 DHCP 服務(wù)已啟用。
問(wèn)題 2:虛擬機(jī)之間無(wú)法通信
- 設(shè)計(jì)隔離:VLAN 10 和 20 默認(rèn)是隔離的,跨 VLAN 通信需通過(guò)物理交換機(jī)或宿主機(jī)路由。
總結(jié)
通過(guò)以下參數(shù):
--network bridge=ovs-br0,model=virtio,virtualport_type=openvswitch,virtualport_options:tag=20
- ? 虛擬機(jī)已關(guān)聯(lián)到 OVS 網(wǎng)橋:libvirt 自動(dòng)將虛擬網(wǎng)卡添加到
ovs-br0。 - ? VLAN 標(biāo)簽已正確設(shè)置:OVS 端口標(biāo)記為指定 VLAN。
- ? 無(wú)需手動(dòng)操作:整個(gè)過(guò)程由 libvirt 和 OVS 自動(dòng)完成。
最終,虛擬機(jī)將通過(guò) OVS 接入指定 VLAN,并從物理交換機(jī)的 DHCP 服務(wù)獲取 IP 地址。