7.4. 将虚拟机连接到 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 二级网络并将虚拟机附加到该网络,请执行以下步骤:
- 通过创建网络附加定义(NAD)来配置 OVN-Kubernetes 二级网络。
- 通过在虚拟机规格中添加网络详情,将虚拟机连接到 OVN-Kubernetes 二级网络。
7.4.1. 创建 OVN-Kubernetes NAD
您可以使用 Red Hat OpenShift Service on AWS Web 控制台或 CLI 创建 OVN-Kubernetes 第 2 层或 localnet 网络附加定义(NAD)。
不支持在虚拟机的网络附加定义中配置 IP 地址管理(IPAM)。
7.4.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: |- { "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
7.4.1.2. 使用 CLI 为 localnet 拓扑创建 NAD
您可以创建一个网络附加定义 (NAD),它描述了如何将 pod 附加到底层物理网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问集群。 -
已安装 OpenShift CLI(
oc
)。 - 已安装 Kubernetes NMState Operator。
-
您已创建了
NodeNetworkConfigurationPolicy
对象,将 OVN-Kubernetes 二级网络映射到 Open vSwitch (OVS) 网桥。
流程
创建
NetworkAttachmentDefinition
对象:apiVersion: k8s.cni.cncf.io/v1 kind: NetworkAttachmentDefinition metadata: name: localnet-network namespace: default spec: config: |- { "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
7.4.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。
7.4.1.4. 使用 Web 控制台为 localnet 拓扑创建 NAD
您可以使用 Red Hat OpenShift Service on AWS 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。
7.4.2. 将虚拟机附加到 OVN-Kubernetes 二级网络
您可以使用 Red Hat OpenShift Service on AWS web 控制台或 CLI 将虚拟机(VM)附加到 OVN-Kubernetes 二级网络接口。
7.4.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
- 可选:如果编辑了正在运行的虚拟机,您必须重启它才能使更改生效。