×

您可以通过将虚拟机的网络接口配置为使用masquerade绑定模式来将其连接到默认内部Pod网络。

在实时迁移期间,通过网络接口到默认Pod网络的流量会被中断。

从命令行配置伪装模式

您可以使用伪装模式将虚拟机的出站流量隐藏在Pod IP地址后面。伪装模式使用网络地址转换 (NAT) 通过Linux桥将虚拟机连接到Pod网络后端。

编辑虚拟机配置文件,启用伪装模式并允许流量进入虚拟机。

先决条件
  • 必须将虚拟机配置为使用DHCP获取IPv4地址。

步骤
  1. 编辑虚拟机配置文件的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: {}
    1 使用伪装模式连接。
    2 可选:列出您要从虚拟机公开的端口,每个端口由port字段指定。port值必须是0到65536之间的数字。当不使用ports数组时,有效范围内的所有端口都允许传入流量。在此示例中,端口80允许传入流量。

    端口49152和49153保留供libvirt平台使用,所有其他传入这些端口的流量都会被丢弃。

  2. 创建虚拟机

    $ oc create -f <vm-name>.yaml

使用双栈(IPv4和IPv6)配置伪装模式

您可以使用cloud-init配置新的虚拟机 (VM) 以在默认Pod网络上同时使用IPv6和IPv4。

虚拟机实例配置中的Network.pod.vmIPv6NetworkCIDR字段确定VM的静态IPv6地址和网关IP地址。这些由virt-launcher Pod用于将IPv6流量路由到虚拟机,并且不会在外部使用。Network.pod.vmIPv6NetworkCIDR字段指定无类域间路由 (CIDR) 表示法中的IPv6地址块。默认值为fd10:0:2::2/120。您可以根据网络需求编辑此值。

虚拟机运行时,虚拟机的传入和传出流量将路由到virt-launcher Pod的IPv4地址和唯一的IPv6地址。然后,virt-launcher Pod将IPv4流量路由到虚拟机的DHCP地址,并将IPv6流量路由到虚拟机的静态设置的IPv6地址。

先决条件
  • OpenShift Container Platform集群必须使用为双栈配置的OVN-Kubernetes容器网络接口 (CNI) 网络插件。

步骤
  1. 在新虚拟机配置中,包含一个带有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)
    1 使用伪装模式连接。
    2 允许传入端口80到虚拟机的流量。
    3 虚拟机实例配置中Network.pod.vmIPv6NetworkCIDR字段确定的静态IPv6地址。默认值为fd10:0:2::2/120
    4 虚拟机实例配置中Network.pod.vmIPv6NetworkCIDR字段确定的网关IP地址。默认值为fd10:0:2::1
  2. 在命名空间中创建虚拟机

    $ oc create -f example-vm-ipv6.yaml
验证
  • 要验证是否已配置IPv6,请启动虚拟机并查看虚拟机实例的接口状态,以确保它具有IPv6地址

$ oc get vmi <vmi-name> -o jsonpath="{.status.interfaces[*].ipAddresses}"

关于巨型帧支持

使用OVN-Kubernetes CNI插件时,您可以在默认Pod网络上连接的两个虚拟机 (VM) 之间发送未分段的巨型帧数据包。巨型帧的最大传输单元 (MTU) 值大于1500字节。

VM会通过以下方式之一自动获取集群管理员设置的集群网络的MTU值:

  • libvirt:如果客户机操作系统具有最新版本的VirtIO驱动程序,该驱动程序可以通过模拟设备中的外围组件互连 (PCI) 配置寄存器解释传入数据。

  • DHCP:如果客户机DHCP客户端可以从DHCP服务器响应中读取MTU值。

对于没有安装 VirtIO 驱动的 Windows 虚拟机,必须使用netsh或类似工具手动设置 MTU。这是因为 Windows DHCP 客户端不读取 MTU 值。