问题概述:
- 问题:Windows 虚拟机未能通过 DHCP 获取 IP 地址,网络无法连接。
- 环境:KubeVirt 与 Kube-OVN 环境下的 Windows 虚拟机,网络配置为桥接模式(Underlay)。
解决方案:
步骤 1:下载完整 virtio-win ISO
由于 KubeVirt 需要使用 virtio 驱动来使 Windows 虚拟机 正常连接网络,首先需要下载并使用完整的 virtio-win ISO,其中包含所有必须的驱动文件。
在一台可以访问外网的机器上执行以下命令:
bash
mkdir -p /opt/virtio-win
cd /opt/virtio-win
# 使用 virtio-win 的 0.1.240 版本,版本可以修改为需要的版本
curl -L -o virtio-win.iso \
https://fedorapeople.org/groups/virt/virtio-win/direct-downloads/archive-virtio/virtio-win-0.1.240-1/virtio-win-0.1.240.iso
或者可以手动下载 ISO 文件,并将其上传到你的服务器,只要确保文件在某个目录下即可。
步骤 2:容器化 virtio-win ISO
为了让 KubeVirt 使用 virtio-win ISO ,我们将其容器化,放入一个 Docker 镜像中,并命名为 virtio-win 镜像。步骤如下:
- 在
/opt/virtio-win目录下创建一个Dockerfile:
Dockerfile
# 使用一个极简的基础镜像
FROM scratch
# KubeVirt 要求镜像里有 /disk/disk.img
# 我们把 virtio-win ISO 直接当作 disk.img
ADD virtio-win.iso /disk/disk.img
- 然后,在
/opt/virtio-win目录中构建镜像:
bash
cd /opt/virtio-win
# 构建 Docker 镜像
docker build -t registry.cn-shanghai.aliyuncs.com/akops/virtio-win-0.1.240:latest .
# 登录到你的 Docker 仓库(如阿里云仓库)
docker login registry.cn-shanghai.aliyuncs.com
# 推送镜像到仓库
docker push registry.cn-shanghai.aliyuncs.com/akops/virtio-win-0.1.240:latest
这将会把 virtio-win ISO 转换为镜像,推送到你的镜像仓库。KubeVirt 通过这个镜像挂载虚拟光盘来进行驱动安装。
步骤 3:网卡配置
双击 virtio-win-gt-x64 文件,按提示完成驱动安装。
安装完成后,Windows 虚拟机能够识别并使用 virtio 驱动,并成功获得网络 IP。
- 驱动安装后,Windows 会重新识别网络接口,并显示
Red Hat VirtIO Ethernet Adapter。 - 在
ipconfig /all中,确认 Windows 虚拟机获得了 10.47.13.13 的 IP 地址,并且可以访问网络。
步骤 4:验证与测试
- 通过 ping 命令,确认 Windows 虚拟机与宿主机及其它设备之间的网络连接正常。
- 确认 Windows 虚拟机 已经可以通过 10.47.13.13 地址访问外部网络。
总结:
通过安装 virtio-win-gt-x64 驱动,Windows 虚拟机成功识别并配置了网络接口,解决了获取 IP 的问题。现在,Windows 虚拟机可以正常通过 DHCP 获取 IP,并通过该 IP 访问内外网。
附:KubeVirt Windows VM 网络配置 (YAML)
以下是 Windows 虚拟机 YAML 配置示例,包含 virtio 驱动安装挂载配置:
yaml
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: windows-vm
namespace: vm
annotations:
ovn.kubernetes.io/logical_switch: vm-sub-201
spec:
running: true
template:
metadata:
labels:
kubevirt.io/vm: windows-vm
annotations:
ovn.kubernetes.io/logical_switch: vm-sub-201
spec:
domain:
devices:
interfaces:
- name: default
bridge: {} # 使用桥接模式
disks:
- name: windows-iso
bootOrder: 1
cdrom:
bus: sata
readonly: true
- name: windows-disk
bootOrder: 2
disk:
bus: virtio
- name: virtio-drivers
cdrom: # 挂载 virtio 驱动 ISO
bus: sata
readonly: true
networks:
- name: default
pod: {}
volumes:
- name: windows-iso
persistentVolumeClaim:
claimName: windows-iso
- name: windows-disk
persistentVolumeClaim:
claimName: windows-disk
- name: virtio-drivers
containerDisk:
image: registry.cn-shanghai.aliyuncs.com/yourrepo/virtio-win-0.1.240:latest
记得根据使用的 virtio 驱动版本以及你的镜像仓库修改相应字段。