8.2. 将虚拟机连接到默认 pod 网络
您可以通过将其网络接口配置为使用 masquerade
绑定模式,将虚拟机连接到默认的内部 pod 网络。
在实时迁移过程中,通过网络接口到默认 pod 网络的流量会中断。
8.2.1. 从命令行配置伪装模式
您可以使用伪装模式将虚拟机的外发流量隐藏在 pod IP 地址后。伪装模式使用网络地址转换 (NAT) 来通过 Linux 网桥将虚拟机连接至 pod 网络后端。
启用伪装模式,并通过编辑虚拟机配置文件让流量进入虚拟机。
先决条件
- 虚拟机必须配置为使用 DHCP 来获取 IPv4 地址。
流程
编辑虚拟机配置文件的
interfaces
规格:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm spec: template: spec: domain: devices: interfaces: - name: default masquerade: {} 1 ports: 2 - port: 80 # ... networks: - name: default pod: {}
注意端口 49152 和 49153 保留供 libvirt 平台使用,这些端口的所有其他传入流量将被丢弃。
创建虚拟机:
$ oc create -f <vm-name>.yaml
8.2.2. 使用双栈(IPv4 和 IPv6)配置伪装模式
您可以使用 cloud-init 将新虚拟机配置为在默认 pod 网络上同时使用 IPv6 和 IPv4。
虚拟机实例配置中的 Network.pod.vmIPv6NetworkCIDR
字段决定虚拟机的静态 IPv6 地址和网关 IP 地址。virt-launcher Pod 使用它们将 IPv6 流量路由到虚拟机,而不在外部使用。Network.pod.vmIPv6NetworkCIDR
字段在无类别域间路由(CIDR)标记中指定一个 IPv6 地址块。默认值为 fd10:0:2::2/120
。您可以根据网络要求编辑这个值。
当虚拟机运行时,虚拟机的传入和传出流量将路由到 IPv4 地址和 virt-launcher Pod 的唯一 IPv6 地址。virt-launcher pod 随后将 IPv4 流量路由到虚拟机的 DHCP 地址,并将 IPv6 流量路由到虚拟机的静态设置 IPv6 地址。
先决条件
- OpenShift Container Platform 集群必须使用为双栈配置的 OVN-Kubernetes Container Network Interface (CNI) 网络插件。
流程
在新的虚拟机配置中,包含具有
masquerade
的接口,并使用 cloud-init 配置 IPv6 地址和默认网关。apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: example-vm-ipv6 spec: template: spec: domain: devices: interfaces: - name: default masquerade: {} 1 ports: - port: 80 2 # ... networks: - name: default pod: {} volumes: - cloudInitNoCloud: networkData: | version: 2 ethernets: eth0: dhcp4: true addresses: [ fd10:0:2::2/120 ] 3 gateway6: fd10:0:2::1 4
在命名空间中创建虚拟机:
$ oc create -f example-vm-ipv6.yaml
验证
- 要验证 IPv6 是否已配置,启动虚拟机并查看虚拟机实例的接口状态,以确保它具有 IPv6 地址:
$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"
8.2.3. 关于巨型帧支持
使用 OVN-Kubernetes CNI 插件时,您可以在默认 pod 网络上连接的两个虚拟机 (VM) 之间发送未分片的巨型帧数据包。巨型帧有一个大于 1500 字节的最大传输单元 (MTU) 值。
虚拟机自动获得集群网络的 MTU 值,由集群管理员设置,如下所示:
-
libvirt
:如果客户机操作系统具有 VirtIO 驱动程序的最新版本,该驱动程序可通过模拟设备中的 Peripheral Component Interconnect (PCI) 配置寄存器来解释传入的数据。 - DHCP :如果客户机 DHCP 客户端可以从 DHCP 服务器响应中读取 MTU 值。
对于没有 VirtIO 驱动程序的 Windows 虚拟机,您必须使用 netsh
或类似的工具手动设置 MTU。这是因为 Windows DHCP 客户端没有读取 MTU 值。