在 bridge 模式下,虚拟机通过 Linux Bridge 连接到 QEMU virtio 设备。virt-launcher Pod 的 IP 地址通过 DHCP 委派给虚拟机。虚拟机应配置为使用 DHCP 获取 IP 地址(virt-launcher Pod 的 IP 和 MAC 地址被移动到 KubeVirt 虚拟机内部,所以 virt-launcher Pod 网卡就没有 IP 和 MAC 地址了)。
在虚拟机外部,Node 通过 Open vSwitch 技术,将 virt-launcher Pod 与 Node 连接,实现网络互通。阅读本文前,请先完成跨主机通信 Open vSwitch 动手实验。
下图是 KubeVirt Bridge 模式下 virt-launcher Pod 与 KubeVirt 虚拟机的网络拓扑图。

使用 bridge.yaml 创建虚拟机:
apiVersion: kubevirt.io/v1
kind: VirtualMachine
metadata:
name: bridge-ovs
spec:
dataVolumeTemplates:
- metadata:
name: systemdisk-bridge-ovs
spec:
pvc:
accessModes:
- ReadWriteOnce
resources:
requests:
storage: 10Gi
storageClassName: local-path
source:
registry:
url: docker://release-ci.daocloud.io/virtnest/system-images/centos-7.9-x86_64:v1
runStrategy: Always
template:
metadata:
annotations:
ipam.spidernet.io/ippools: '[{"interface":"eth0","ipv4":["vlan40-v4"]}]'
spec:
architecture: amd64
domain:
cpu:
cores: 1
model: host-model
sockets: 2
threads: 1
devices:
disks:
- disk:
bus: virtio
name: systemdisk-bridge-ovs
- disk:
bus: virtio
name: cloudinitdisk
interfaces:
- bridge: {}
name: ovs-bridge1
- bridge: {}
name: ovs-bridge2
features:
acpi:
enabled: true
machine:
type: q35
resources:
requests:
memory: 1Gi
networks:
- multus:
default: true
networkName: kube-system/ovs-vlan30
name: ovs-bridge1
- multus:
networkName: kube-system/ovs-vlan40
name: ovs-bridge2
volumes:
- dataVolume:
name: systemdisk-bridge-ovs
name: systemdisk-bridge-ovs
- cloudInitNoCloud:
networkData: |
version: 2
ethernets:
enp1s0:
dhcp4: true
enp2s0:
dhcp4: true
userData: |
#cloud-config
ssh_pwauth: true
disable_root: false
chpasswd: {"list": "root:dangerous", expire: False}
runcmd:
- sed -i "/#\?PermitRootLogin/s/^.*$/PermitRootLogin yes/g" /etc/ssh/sshd_config
name: cloudinitdisk