8.5. 将虚拟机连接到 Linux 网桥网络


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

您可以通过执行以下步骤来创建 Linux 网桥网络,并将虚拟机 (VM) 附加到网络:

  1. 创建 Linux 网桥节点网络配置策略 (NNCP)
  2. 使用 Web 控制台命令行创建 Linux 网桥网络附加定义(NAD)。
  3. 使用 Web 控制台命令行配置虚拟机,以识别 NAD。

8.5.1. 创建 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
    网桥附加到的节点 NIC。

8.5.2. 创建 Linux 网桥 NAD

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

8.5.2.1. 使用 Web 控制台创建 Linux 网桥 NAD

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

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

警告

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

流程

  1. 在 Web 控制台中,点 Networking NetworkAttachmentDefinitions
  2. Create Network Attachment Definition

    注意

    网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。

  3. 输入唯一 Name 和可选 Description
  4. Network Type 列表中选择 CNV Linux 网桥
  5. Bridge Name 字段输入网桥名称。
  6. 可选:如果资源配置了 VLAN ID,请在 VLAN Tag Number 字段中输入 ID 号。
  7. 可选: 选择 MAC Spoof Check 来启用 MAC spoof 过滤。此功能只允许单个 MAC 地址退出 pod,从而可以防止使用 MAC 欺骗进行的安全攻击。
  8. Create

8.5.2.2. 使用命令行创建 Linux 网桥 NAD

您可以创建一个网络附加定义 (NAD) 来使用命令行为 pod 和虚拟机 (VM) 提供第 2 层网络。

NAD 和虚拟机必须位于同一命名空间中。

警告

不支持在虚拟机的网络附加定义中配置 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/bridge-interface 2
    spec:
      config: |
        {
          "cniVersion": "0.3.1",
          "name": "bridge-network", 3
          "type": "bridge", 4
          "bridge": "bridge-interface", 5
          "macspoofchk": false, 6
          "vlan": 100, 7
          "disableContainerInterface": true,
          "preserveDefaultVlan": false 8
        }
    1
    NetworkAttachmentDefinition 对象的名称。
    2
    可选:为节点选择注解键值对,其中 bridge-interface 必须与某些节点上配置的桥接名称匹配。如果在网络附加定义中添加此注解,您的虚拟机实例将仅在连接 bridge-interface 网桥的节点中运行。
    3
    配置的名称。建议您将配置名称与网络附加定义的 name 值匹配。
    4
    为这个网络附加定义的 Container Network Interface(CNI)插件的实际名称。不要更改此字段,除非要使用不同的 CNI。
    5
    节点上配置的 Linux 网桥名称。
    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

8.5.3. 配置虚拟机网络接口

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

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

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

先决条件

  • 为网络创建了网络附加定义。

流程

  1. 进入到 Virtualization VirtualMachines
  2. 点虚拟机查看 VirtualMachine 详情页。
  3. Configuration 选项卡上,点 Network interfaces 选项卡。
  4. Add network interface
  5. 输入接口名称,然后从 Network 列表中选择网络附加定义。
  6. 点击 Save
  7. 重启虚拟机以应用更改。
网络字段
名称描述

Name

网络接口控制器的名称。

model

指明网络接口控制器的型号。支持的值有 e1000evirtio

网络

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

类型

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

  • 默认 pod 网络:masquerade
  • Linux 网桥网络:bridge
  • SR-IOV 网络: SR-IOV

MAC 地址

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

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

您可以使用命令行为桥接网络配置虚拟机 (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. 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.