8.7. 将虚拟机连接到 OVN-Kubernetes 二级网络
您可以将虚拟机 (VM) 连接到 Open Virtual Network (OVN)-Kubernetes 二级网络。OpenShift Virtualization 支持 OVN-Kubernetes 的第 2 层和 localnet 拓扑。
- 第 2 层拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes Container Network Interface (CNI) 插件使用 Geneve (Generic Network Virtualization Encapsulation) 协议在节点间创建覆盖网络。您可以使用此覆盖网络在不同的节点上连接虚拟机,而无需配置任何其他物理网络基础架构。
- localnet 拓扑将二级网络连接到物理网络。这可让 east-west 集群流量并访问在集群外运行的服务,但它需要在集群节点上配置底层 Open vSwitch (OVS) 系统。
OVN-Kubernetes 二级网络与 多网络策略 API 兼容,它提供 MultiNetworkPolicy
自定义资源定义(CRD)来控制进出虚拟机的流量流。您可以使用 ipBlock
属性来定义特定 CIDR 块的网络策略入口和出口规则。
要配置 OVN-Kubernetes 二级网络并将虚拟机附加到该网络,请执行以下步骤:
通过创建网络附加定义(NAD)来配置 OVN-Kubernetes 二级网络。
注意对于 localnet 拓扑,您必须在创建 NAD 前创建一个
NodeNetworkConfigurationPolicy
对象来配置 OVS 网桥。- 通过在虚拟机规格中添加网络详情,将虚拟机连接到 OVN-Kubernetes 二级网络。
8.7.1. 创建 OVN-Kubernetes NAD
您可以使用 OpenShift Container Platform Web 控制台或 CLI 创建 OVN-Kubernetes 层 2 或 localnet 网络附加定义(NAD)。
不支持在虚拟机的网络附加定义中指定 spec.config.ipam.subnet
属性来配置 IP 地址管理(IPAM)。
8.7.1.1. 使用 CLI 为第 2 层拓扑创建 NAD
您可以创建一个网络附加定义(NAD),它描述了如何将 pod 附加到第 2 层覆盖网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
创建
NetworkAttachmentDefinition
对象:apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: l2-network namespace: my-namespace spec: config: |2 { "cniVersion": "0.3.1", 1 "name": "my-namespace-l2-network", 2 "type": "ovn-k8s-cni-overlay", 3 "topology":"layer2", 4 "mtu": 1300, 5 "netAttachDefName": "my-namespace/l2-network" 6 }
- 1
- CNI 规格版本。所需的值为
0.3.1
。 - 2
- 网络的名称。此属性不是命名空间。例如,您可以有一个名为
l2-network
的网络,该网络从两个不同的命名空间中存在的两个不同的NetworkAttachmentDefinition
对象引用。此功能可用于连接不同命名空间中的虚拟机。 - 3
- 要配置的 CNI 插件的名称。所需的值为
ovn-k8s-cni-overlay
。 - 4
- 网络的拓扑配置。所需的值为
layer2
。 - 5
- 可选:最大传输单元 (MTU) 值。默认值由内核自动设置。
- 6
NetworkAttachmentDefinition
对象的metadata
小节中的namespace
和name
字段的值。
注意上例配置了一个集群范围的覆盖,没有定义子网。这意味着实现网络的逻辑交换机仅提供第 2 层通信。您必须在创建虚拟机时配置 IP 地址,方法是设置静态 IP 地址,或在网络上为动态 IP 地址部署 DHCP 服务器。
应用清单:
$ oc apply -f <filename>.yaml
8.7.1.2. 使用 CLI 为 localnet 拓扑创建 NAD
您可以创建一个网络附加定义 (NAD),它描述了如何将 pod 附加到底层物理网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。 - 已安装 Kubernetes NMState Operator。
-
您已创建了
NodeNetworkConfigurationPolicy
对象,将 OVN-Kubernetes 二级网络映射到 Open vSwitch (OVS) 网桥。
流程
创建
NodeNetworkConfigurationPolicy
对象,将 OVN-Kubernetes 二级网络映射到 Open vSwitch (OVS)网桥:apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: mapping 1 spec: nodeSelector: node-role.kubernetes.io/worker: '' 2 desiredState: ovn: bridge-mappings: - localnet: localnet-network 3 bridge: br-ex 4 state: present 5
注意OpenShift Virtualization 不支持 Linux 网桥绑定模式 0、5 和 6。如需更多信息,请参阅 哪个绑定模式在与虚拟机客户机或容器连接的网桥一起使用时可以正常工作?
创建
NetworkAttachmentDefinition
对象:apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: default spec: config: |2 { "cniVersion": "0.3.1", 1 "name": "localnet-network", 2 "type": "ovn-k8s-cni-overlay", 3 "topology": "localnet", 4 "netAttachDefName": "default/localnet-network" 5 }
应用清单:
$ oc apply -f <filename>.yaml
8.7.1.3. 使用 Web 控制台为第 2 层拓扑创建 NAD
您可以创建一个网络附加定义 (NAD) 来描述如何将 pod 附加到第 2 层覆盖网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。
流程
-
在 web 控制台中进入 Networking
NetworkAttachmentDefinition。 - 点 Create Network Attachment Definition。网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
- 输入唯一 Name 和可选 Description。
- 从 Network Type 列表中选择 OVN Kubernetes L2 overlay 网络。
- 点 Create。
8.7.1.4. 使用 Web 控制台为 localnet 拓扑创建 NAD
您可以使用 OpenShift Container Platform Web 控制台创建网络附加定义(NAD)将工作负载连接到物理网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。 -
使用
nmstate
将 localnet 配置为 OVS 网桥映射。
流程
- 在 web 控制台中进入到 Networking → NetworkAttachmentDefinition。
- 点 Create Network Attachment Definition。网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
- 输入唯一 Name 和可选 Description。
- 从 Network Type 列表中选择 OVN Kubernetes secondary localnet network。
- 在 Bridge mapping 字段中输入预先配置的 localnet 标识符的名称。
- 可选:您可以将 MTU 明确设置为指定的值。内核选择默认值。
- 可选:封装 VLAN 中的流量。默认值为 none。
- 点 Create。
8.7.2. 将虚拟机附加到 OVN-Kubernetes 二级网络
您可以使用 OpenShift Container Platform web 控制台或 CLI 将虚拟机(VM)附加到 OVN-Kubernetes 二级网络接口。
8.7.2.1. 使用 CLI 将虚拟机附加到 OVN-Kubernetes 二级网络
您可以通过在虚拟机配置中包含网络详情,将虚拟机 (VM) 连接到 OVN-Kubernetes 二级网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。
流程
编辑
VirtualMachine
清单以添加 OVN-Kubernetes 二级网络接口详情,如下例所示:apiVersion: kubevirt.io/v1 kind: VirtualMachine metadata: name: vm-server spec: running: true template: spec: domain: devices: interfaces: - name: secondary 1 bridge: {} resources: requests: memory: 1024Mi networks: - name: secondary 2 multus: networkName: <nad_name> 3 # ...
应用
VirtualMachine
清单:$ oc apply -f <filename>.yaml
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。