8.5. 将虚拟机连接到 Linux 网桥网络
默认情况下,OpenShift Virtualization 安装了一个内部 pod 网络。
您可以通过执行以下步骤来创建 Linux 网桥网络,并将虚拟机 (VM) 附加到网络:
- 创建 Linux 网桥节点网络配置策略 (NNCP)。
- 使用 Web 控制台或命令行创建 Linux 网桥网络附加定义(NAD)。
- 使用 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
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)。
流程
-
在 Web 控制台中,点 Networking
NetworkAttachmentDefinitions。 点 Create Network Attachment Definition。
注意网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
- 输入唯一 Name 和可选 Description。
- 从 Network Type 列表中选择 CNV Linux 网桥。
- 在 Bridge Name 字段输入网桥名称。
- 可选:如果资源配置了 VLAN ID,请在 VLAN Tag Number 字段中输入 ID 号。
- 可选: 选择 MAC Spoof Check 来启用 MAC spoof 过滤。此功能只允许单个 MAC 地址退出 pod,从而可以防止使用 MAC 欺骗进行的安全攻击。
- 点 Create。
8.5.2.2. 使用命令行创建 Linux 网桥 NAD
您可以创建一个网络附加定义 (NAD) 来使用命令行为 pod 和虚拟机 (VM) 提供第 2 层网络。
NAD 和虚拟机必须位于同一命名空间中。
不支持在虚拟机的网络附加定义中配置 IP 地址管理(IPAM)。
先决条件
-
节点必须支持 nftables,必须部署
nft
二进制文件才能启用 MAC 欺骗检查。
流程
将虚拟机添加到
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 的最有效方法。
创建网络附加定义:
$ 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 控制台为虚拟机配置网络接口。
先决条件
- 为网络创建了网络附加定义。
流程
-
进入到 Virtualization
VirtualMachines。 - 点虚拟机查看 VirtualMachine 详情页。
- 在 Configuration 选项卡上,点 Network interfaces 选项卡。
- 点 Add network interface。
- 输入接口名称,然后从 Network 列表中选择网络附加定义。
- 点击 Save。
- 重启虚拟机以应用更改。
网络字段
名称 | 描述 |
---|---|
Name | 网络接口控制器的名称。 |
model | 指明网络接口控制器的型号。支持的值有 e1000e 和 virtio。 |
网络 | 可用网络附加定义的列表。 |
类型 | 可用绑定方法列表。选择适合网络接口的绑定方法:
|
MAC 地址 | 网络接口控制器的 MAC 地址。如果没有指定 MAC 地址,则会自动分配一个。 |
8.5.3.2. 使用命令行配置虚拟机网络接口
您可以使用命令行为桥接网络配置虚拟机 (VM) 网络接口。
先决条件
- 在编辑配置前关闭虚拟机。如果编辑正在运行的虚拟机,您必须重启虚拟机才能使更改生效。
流程
在虚拟机配置中添加网桥接口和网络附加定义,如下例所示:
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
应用配置:
$ oc apply -f example-vm.yaml
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。