×

OpenShift Virtualization 使用自定义资源和插件提供高级网络功能。虚拟机 (VM) 与 OpenShift Container Platform 网络及其生态系统集成。

您无法在单栈 IPv6 集群上运行 OpenShift Virtualization。

下图说明了 OpenShift Virtualization 的典型网络设置。也可能存在其他配置。

OpenShift Virtualization networking architecture
图 1. OpenShift Virtualization 网络概述

20 Pod 和虚拟机运行在相同的网络基础架构上,这使您可以轻松连接您的容器化和虚拟化工作负载。

20 您可以将虚拟机连接到默认 Pod 网络和任意数量的次要网络。

20 默认 Pod 网络在所有成员之间提供连接、服务抽象、IP 管理、微分段和其他功能。

20 Multus 是一个“元”CNI 插件,它允许 Pod 或虚拟机通过使用其他兼容的 CNI 插件连接到额外的网络接口。

20 默认 Pod 网络是基于覆盖网络的,通过底层主机网络进行隧道传输。

20 主机网络可以在选定的网络接口控制器 (NIC) 集上定义。

20 次要虚拟机网络通常直接桥接到物理网络,可以使用或不使用 VLAN 封装。也可以为次要网络创建虚拟覆盖网络。

在 AWS 上的 Red Hat OpenShift Service 中不支持将虚拟机直接连接到下层网络。

20 次要虚拟机网络可以在专用的一组网卡上定义,如图 1 所示,也可以使用机器网络。

OpenShift 虚拟化网络术语表

以下术语贯穿 OpenShift 虚拟化文档始终

容器网络接口 (CNI)

一个云原生计算基金会项目,专注于容器网络连接。OpenShift 虚拟化使用 CNI 插件来构建 Kubernetes 基本网络功能。

Multus

一个“元”CNI 插件,允许多个 CNI 同时存在,以便 Pod 或虚拟机可以使用其所需的接口。

自定义资源定义 (CRD)

一个Kubernetes API 资源,允许您定义自定义资源,或使用 CRD API 资源定义的对象。

网络连接定义 (NAD)

Multus 项目引入的 CRD,允许您将 Pod、虚拟机和虚拟机实例连接到一个或多个网络。

节点网络配置策略 (NNCP)

nmstate 项目引入的 CRD,描述了节点上所需的网络配置。您可以通过将NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除接口。

使用默认 Pod 网络

将虚拟机连接到默认 Pod 网络

默认情况下,每个虚拟机都连接到默认内部 Pod 网络。您可以通过编辑虚拟机规范来添加或删除网络接口。

将虚拟机公开为服务

您可以通过创建Service对象来公开集群内或集群外的虚拟机。对于本地集群,您可以使用 MetalLB Operator 配置负载均衡服务。您可以安装 MetalLB Operator,方法是使用 OpenShift Container Platform Web 控制台或 CLI。

配置虚拟机辅助网络接口

您可以使用 Linux bridge、SR-IOV 和 OVN-Kubernetes CNI 插件将虚拟机连接到辅助网络。您可以在虚拟机规范中列出多个辅助网络和接口。连接到辅助网络接口时,不需要在虚拟机规范中指定主 Pod 网络。

将虚拟机连接到 OVN-Kubernetes 辅助网络

您可以将虚拟机连接到 OVN-Kubernetes 辅助网络。OpenShift 虚拟化支持 OVN-Kubernetes 的layer2localnet拓扑结构。localnet拓扑结构是将虚拟机公开到底层物理网络的推荐方式,可以使用或不使用 VLAN 封装。

  • layer2拓扑结构通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes CNI 插件使用 Geneve(通用网络虚拟化封装)协议在节点之间创建覆盖网络。您可以使用此覆盖网络连接不同节点上的虚拟机,而无需配置任何额外的物理网络基础设施。

  • localnet拓扑结构将辅助网络连接到底层物理网络。这既可以实现东西向集群流量,也可以访问集群外部运行的服务,但这需要对集群节点上的底层 Open vSwitch (OVS) 系统进行额外配置。

要配置 OVN-Kubernetes 辅助网络并将虚拟机连接到该网络,请执行以下步骤

  1. 通过创建网络连接定义 (NAD) 来配置 OVN-Kubernetes 辅助网络。

    对于localnet拓扑结构,您必须在创建NAD之前,配置一个OVS桥接器,方法是创建一个NodeNetworkConfigurationPolicy对象。

  2. 通过将网络详细信息添加到虚拟机规范中,将虚拟机连接到OVN-Kubernetes辅助网络

将虚拟机连接到SR-IOV网络

对于需要高带宽或低延迟的应用程序,您可以在安装在裸机或Red Hat OpenStack Platform (RHOSP)基础架构上的OpenShift Container Platform集群上,将单根I/O虚拟化(SR-IOV)网络设备与辅助网络一起使用。

您必须在集群上安装SR-IOV网络操作符来管理SR-IOV网络设备和网络连接。

您可以通过执行以下步骤将虚拟机连接到SR-IOV网络:

  1. 配置SR-IOV网络设备,方法是创建一个SriovNetworkNodePolicy CRD。

  2. 配置SR-IOV网络,方法是创建一个SriovNetwork对象。

  3. 将虚拟机连接到SR-IOV网络,方法是在虚拟机配置中包含网络详细信息。

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

安装Kubernetes NMState操作符来为您的辅助网络配置Linux桥接器、VLAN和绑定。OVN-Kubernetes localnet拓扑结构是将虚拟机连接到底层物理网络的推荐方法,但OpenShift Virtualization也支持Linux桥接网络。

使用Linux桥接网络时,您不能直接连接到默认的机器网络。

您可以创建一个Linux桥接网络并将虚拟机连接到该网络,方法是执行以下步骤:

  1. 配置Linux桥接网络设备,方法是创建一个NodeNetworkConfigurationPolicy自定义资源定义(CRD)。

  2. 配置Linux桥接网络,方法是创建一个NetworkAttachmentDefinition CRD。

  3. 将虚拟机连接到Linux桥接网络,方法是在虚拟机配置中包含网络详细信息。

热插拔次要网络接口

您可以添加或删除辅助网络接口,而无需停止虚拟机。OpenShift Virtualization支持使用桥接绑定和VirtIO设备驱动程序的辅助接口的热插拔和热拔插。OpenShift Virtualization也支持使用SR-IOV绑定的辅助接口的热插拔。

将 DPDK 与 SR-IOV 配合使用

数据平面开发套件(DPDK)提供了一套用于快速数据包处理的库和驱动程序。您可以配置集群和虚拟机以通过SR-IOV网络运行DPDK工作负载。

为实时迁移配置专用网络

您可以为实时迁移配置一个专用的Multus网络。专用网络最大限度地减少了实时迁移期间网络饱和对租户工作负载的影响。

使用集群FQDN访问虚拟机

您可以使用其完全限定域名(FQDN)从集群外部访问连接到辅助网络接口的虚拟机。

配置和查看 IP 地址

您可以在创建虚拟机时配置辅助网络接口的IP地址。IP地址由cloud-init配置。您可以使用OpenShift Container Platform Web控制台或命令行查看虚拟机的IP地址。网络信息由QEMU访客代理收集。

比较Linux桥接CNI和OVN-Kubernetes localnet拓扑结构

下表比较了使用Linux桥接CNI与OVN-Kubernetes插件的localnet拓扑结构时可用的功能。

表1. Linux桥接CNI与OVN-Kubernetes localnet拓扑结构的比较
功能 Linux桥接CNI可用 OVN-Kubernetes localnet可用

对底层原生网络的2层访问

仅在辅助网络接口控制器(NIC)上

对底层VLAN的2层访问

网络策略

托管IP池

MAC地址欺骗过滤

与OpenShift Service Mesh集成

将虚拟机连接到服务网格

OpenShift Virtualization与OpenShift Service Mesh集成。您可以监控、可视化和控制Pod和虚拟机之间的流量。

管理MAC地址池

管理网络接口的 MAC 地址池

KubeMacPool组件从共享MAC地址池中为虚拟机网络接口分配MAC地址。这确保每个网络接口都被分配一个唯一的MAC地址。从该虚拟机创建的虚拟机实例在重启后保留分配的MAC地址。

配置SSH访问

配置对虚拟机的SSH访问

您可以使用以下方法配置对虚拟机的SSH访问:

  • virtctl ssh命令

    您可以创建一个SSH密钥对,将公钥添加到虚拟机,然后使用私钥运行virtctl ssh命令来连接到虚拟机。

    您可以将公钥SSH密钥添加到Red Hat Enterprise Linux (RHEL) 9虚拟机运行时,或者在第一次启动时添加到可以使用cloud-init数据源配置的访客操作系统的虚拟机。

  • virtctl port-forward命令

    您可以将virtctl port-forward命令添加到您的.ssh/config文件中,并使用OpenSSH连接到虚拟机。

  • 服务

    您可以创建一个服务,将服务与虚拟机关联,然后连接到服务公开的IP地址和端口。

  • 辅助网络

    您可以配置辅助网络,将虚拟机连接到辅助网络接口,并连接到其分配的IP地址。