×

默认情况下,OpenShift Virtualization安装了一个单一的内部Pod网络。

您可以通过执行以下步骤来创建一个Linux桥接网络并将虚拟机(VM)连接到该网络

  1. 创建Linux桥接节点网络配置策略(NNCP).

  2. 使用Web控制台命令行创建Linux桥接网络附件定义(NAD)。

  3. 使用Web控制台命令行配置虚拟机以识别NAD。

OpenShift Virtualization不支持Linux桥接绑定模式0、5和6。更多信息,请参见虚拟机客户机或容器连接到的桥接器使用哪些绑定模式?

创建Linux桥接NNCP

您可以为Linux桥接网络创建一个NodeNetworkConfigurationPolicy (NNCP)清单。

先决条件
  • 您已安装Kubernetes NMState Operator。

步骤
  • 创建NodeNetworkConfigurationPolicy清单。此示例包含您必须替换为自身信息的示例值。

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: br1-eth1-policy (1)
    spec:
      desiredState:
        interfaces:
          - name: br1 (2)
            description: Linux bridge with eth1 as a port (3)
            type: linux-bridge (4)
            state: up (5)
            ipv4:
              enabled: false (6)
            bridge:
              options:
                stp:
                  enabled: false (7)
              port:
                - name: eth1 (8)
    1 策略名称。
    2 接口名称。
    3 可选:接口的可读描述。
    4 接口类型。此示例创建一个桥接器。
    5 创建后接口的请求状态。
    6 在此示例中禁用IPv4。
    7 在此示例中禁用STP。
    8 连接桥接器的节点网卡。

创建Linux桥接NAD

您可以使用OpenShift Container Platform Web控制台或命令行创建Linux桥接网络附件定义(NAD)。

使用Web控制台创建Linux桥接NAD

您可以使用OpenShift Container Platform Web控制台创建网络附件定义(NAD),为Pod和虚拟机提供第2层网络。

Linux桥接网络附件定义是将虚拟机连接到VLAN的最有效方法。

不支持在虚拟机的网络附件定义中配置IP地址管理(IPAM)。

步骤
  1. 在Web控制台中,点击网络NetworkAttachmentDefinitions

  2. 点击创建网络附件定义

    网络附件定义必须与Pod或虚拟机位于相同的命名空间。

  3. 输入唯一的名称和可选的描述

  4. 网络类型列表中选择CNV Linux桥接器

  5. 桥接器名称字段中输入桥接器的名称。

  6. 可选:如果资源配置了VLAN ID,请在VLAN标记号字段中输入ID号。

  7. 可选:选择MAC欺骗检查以启用MAC欺骗过滤。此功能通过只允许单个MAC地址离开Pod来提供针对MAC欺骗攻击的安全性。

  8. 点击创建

使用命令行创建Linux桥接NAD

您可以使用命令行创建网络附件定义(NAD),为Pod和虚拟机(VM)提供第2层网络。

NAD和VM必须位于相同的命名空间。

不支持在虚拟机的网络附件定义中配置IP地址管理(IPAM)。

先决条件
  • 节点必须支持 nftables,并且必须部署nft二进制文件才能启用 MAC 地址欺骗检查。

步骤
  1. 将虚拟机添加到NetworkAttachmentDefinition配置中,如下例所示

    apiVersion: "k8s.cni.cncf.io/v1"
    kind: NetworkAttachmentDefinition
    metadata:
      name: bridge-network (1)
      annotations:
        k8s.v1.cni.cncf.io/resourceName: bridge.network.kubevirt.io/br1 (2)
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "bridge-network", (3)
          "type": "bridge", (4)
          "bridge": "br1", (5)
          "macspoofchk": false, (6)
          "vlan": 100, (7)
          "disableContainerInterface": true,
          "preserveDefaultVlan": false (8)
        }
    1 NetworkAttachmentDefinition对象的名称。
    2 可选:用于节点选择的注释键值对,用于在某些节点上配置的桥接。如果您将此注释添加到网络附加定义中,您的虚拟机实例将仅在连接了已定义桥接的节点上运行。
    3 配置的名称。建议将配置名称与网络附加定义的name值匹配。
    4 提供此网络附加定义网络的容器网络接口 (CNI) 插件的实际名称。除非您想使用不同的 CNI,否则不要更改此字段。
    5 在节点上配置的 Linux 桥接的名称。此名称应与NodeNetworkConfigurationPolicy清单中定义的接口桥接名称匹配。
    6 可选:启用 MAC 地址欺骗检查的标志。设置为true时,您无法更改 Pod 或访客接口的 MAC 地址。此属性仅允许单个 MAC 地址离开 Pod,从而提供针对 MAC 地址欺骗攻击的安全性。
    7 可选:VLAN 标签。节点网络配置策略不需要额外的 VLAN 配置。
    8 可选:指示虚拟机是否通过默认 VLAN 连接到桥接。默认值为true

    Linux桥接网络附件定义是将虚拟机连接到VLAN的最有效方法。

  2. 创建网络附加定义

    $ oc create -f network-attachment-definition.yaml (1)
    1 其中network-attachment-definition.yaml是网络附加定义清单的文件名。
验证
  • 运行以下命令验证网络附加定义是否已创建

    $ oc get network-attachment-definition bridge-network

配置虚拟机网络接口

您可以使用 OpenShift Container Platform Web 控制台或命令行配置虚拟机 (VM) 网络接口。

使用 Web 控制台配置虚拟机网络接口

您可以使用 OpenShift Container Platform Web 控制台为虚拟机 (VM) 配置网络接口。

先决条件
  • 您已为网络创建网络附加定义。

步骤
  1. 导航到**虚拟化** → **虚拟机**。

  2. 单击虚拟机以查看**虚拟机详细信息**页面。

  3. 在**配置**选项卡上,单击**网络接口**选项卡。

  4. 单击**添加网络接口**。

  5. 输入接口名称,并从**网络**列表中选择网络附加定义。

  6. 单击**保存**。

  7. 重新启动虚拟机以应用更改。

网络字段

名称 描述

名称

网络接口控制器的名称。

模型

指示网络接口控制器的型号。支持的值为**e1000e**和**virtio**。

网络

可用的网络附加定义列表。

类型

可用的绑定方法列表。选择适合网络接口的绑定方法

  • 默认 Pod 网络:masquerade

  • Linux 桥接网络:bridge

  • SR-IOV 网络:SR-IOV

MAC 地址

网络接口控制器的 MAC 地址。如果未指定 MAC 地址,则会自动分配一个。

使用命令行配置虚拟机网络接口

您可以使用命令行配置桥接网络的虚拟机 (VM) 网络接口。

先决条件
  • 编辑配置前请关闭虚拟机。如果您编辑正在运行的虚拟机,则必须重新启动虚拟机才能使更改生效。

步骤
  1. 将桥接接口和网络附加定义添加到虚拟机配置中,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - bridge: {}
                  name: bridge-net (1)
    # ...
          networks:
            - name: bridge-net (2)
              multus:
                networkName: a-bridge-network (3)
    1 桥接接口的名称。
    2 网络的名称。此值必须与相应的spec.template.spec.domain.devices.interfaces条目的name值匹配。
    3 网络附加定义的名称。
  2. 应用配置

    $ oc apply -f example-vm.yaml
  3. 可选:如果您编辑了正在运行的虚拟机,则必须重新启动它才能使更改生效。