8.4. 将虚拟机连接到 Linux 网桥网络
默认情况下,OpenShift Virtualization 安装了一个内部 pod 网络。
您可以通过执行以下步骤来创建 Linux 网桥网络,并将虚拟机 (VM) 附加到网络:
- 创建 Linux 网桥节点网络配置策略 (NNCP)。
- 使用 Web 控制台或命令行创建 Linux 网桥网络附加定义(NAD)。
- 使用 Web 控制台或命令行配置虚拟机,以识别 NAD。
OpenShift Virtualization 不支持 Linux 网桥绑定模式 0、5 和 6。如需更多信息,请参阅 哪个绑定模式在与虚拟机客户机或容器连接的网桥一起使用时可以正常工作?
8.4.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.4.2. 创建 Linux 网桥 NAD
您可以使用 OpenShift Container Platform Web 控制台或命令行创建 Linux 网桥网络附加定义 (NAD)。
8.4.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.4.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/br1 2 spec: config: | { "cniVersion": "0.3.1", "name": "bridge-network", 3 "type": "bridge", 4 "bridge": "br1", 5 "macspoofchk": false, 6 "vlan": 100, 7 "preserveDefaultVlan": false 8 }
- 1
NetworkAttachmentDefinition
对象的名称。- 2
- 可选:为某些节点上配置的桥接注解键值对。如果您在网络附加定义中添加此注解,您的虚拟机实例将仅在连接的网桥节点上运行。
- 3
- 配置的名称。建议您将配置名称与网络附加定义的
name
值匹配。 - 4
- 为这个网络附加定义的 Container Network Interface(CNI)插件的实际名称。不要更改此字段,除非要使用不同的 CNI。
- 5
- 节点上配置的 Linux 网桥名称。名称应与
NodeNetworkConfigurationPolicy
清单中定义的接口网桥名称匹配。 - 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.4.3. 配置虚拟机网络接口
您可以使用 OpenShift Container Platform web 控制台或命令行配置虚拟机 (VM) 网络接口。
8.4.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.4.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
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。