第 10 章 网络
10.1. 网络概述 复制链接链接已复制到粘贴板!
要将虚拟机(VM)连接到集群网络,请在 OpenShift Virtualization 中配置默认和用户定义的网络选项。
对单堆栈 IPv6 集群的 OpenShift Virtualization 支持仅限于 OVN-Kubernetes localnet 和 Linux 网桥 Container Network Interface (CNI)插件。
在单堆栈 IPv6 集群上部署 OpenShift Virtualization 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
下图演示了 OpenShift Virtualization 的典型网络设置。也可以进行其他配置。
图 10.1. OpenShift Virtualization 网络概述
Pod 和虚拟机在同一网络基础架构中运行,以便您可以轻松连接容器化和虚拟化的工作负载。
您可以将虚拟机连接到默认 pod 网络和任意数量的二级网络。
默认 pod 网络提供其所有成员、服务抽象、IP 管理、微分段和其他功能之间的连接。
Multus 是一个 "meta" CNI 插件,它允许 pod 或虚拟机使用其他兼容 CNI 插件连接到其他网络接口。
默认 pod 网络是基于覆盖的,通过底层机器网络进行隧道连接。
您可以通过一组选定的网络接口控制器(NIC)定义机器网络。
辅助虚拟机网络通常直接桥接到物理网络,且没有 VLAN 封装。也可以为二级网络创建虚拟覆盖网络。
Red Hat OpenShift Service on AWS、Google Cloud 或 Oracle® Cloud Infrastructure (OCI) 不支持将虚拟机直接连接到底层网络。
在公有云上,建议使用 layer2 拓扑将虚拟机连接到用户定义的网络。
二级虚拟机网络可以在专用的 NIC 集合上定义,如图 1 所示,或者可以使用机器网络。
10.1.1. OpenShift Virtualization 术语表 复制链接链接已复制到粘贴板!
以下是在 OpenShift Virtualization 文档中使用的术语:
- Container Network Interface (CNI)
- 一个 Cloud Native Computing Foundation 项目,侧重容器网络连接。OpenShift Virtualization 使用 CNI 插件基于基本 Kubernetes 网络功能进行构建。
- Multus
- 一个“meta”CNI 插件,支持多个 CNI 共存,以便 pod 或虚拟机可使用其所需的接口。
- 自定义资源定义(CRD)
- 一个 Kubernetes API 资源,用于定义自定义资源,或使用 CRD API 资源定义的对象。
NetworkAttachmentDefinition- 由 Multus 项目引入的 CRD,允许您将 Pod、虚拟机和虚拟机实例附加到一个或多个网络。
UserDefinedNetwork- 用户定义的网络 (UDN) API 中引入的命名空间范围的 CRD,用于创建租户网络,将租户命名空间与其他命名空间隔离。
ClusterUserDefinedNetwork- 由用户定义的网络 API 引入了的集群范围的 CRD,集群管理员可用于在多个命名空间间创建共享网络。
NodeNetworkConfigurationPolicy-
nmstate 项目引入的 CRD,描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。
10.1.2. 管理覆盖网络 复制链接链接已复制到粘贴板!
要确保虚拟机使用标准的 OpenShift Container Platform 网络模型可靠地连接,请为集群范围的连接配置默认 pod 网络。
覆盖网络在物理网络之上提供灵活的、软件定义的连接层,实现了网络分段、自定义路由和简化的管理服务,而不更改底层硬件。
- 将虚拟机连接到默认 pod 网络
每个虚拟机默认连接到默认的内部 pod 网络。您可以通过编辑虚拟机规格来添加或删除网络接口。
现在,您可以使用无头服务,访问连接到一个具有稳定 FQDN 的默认内部 pod 网络的虚拟机。
- 将虚拟机连接到自定义主覆盖网络
配置主用户定义的网络(UDN),它支持多命名空间连接,为您的工作负载提供隔离和灵活的流量路径。
集群管理员可以配置主
UserDefinedNetworkCRD,创建一个租户网络,该网络将租户命名空间与其他命名空间隔离开来,而无需网络策略。另外,集群管理员可以使用ClusterUserDefinedNetworkCRD 在多个命名空间中创建共享 OVN 第 2 层网络。带有第 2 层覆盖拓扑的用户定义网络对虚拟机工作负载很有用,对于物理网络访问受到限制的环境中(如公共云)来说是很好的替代方案。第 2 层拓扑启用了虚拟机无缝迁移,而无需网络地址转换(NAT),并提供在重启和实时迁移过程中保留的持久性 IP 地址。
- 将虚拟机连接到自定义辅助覆盖网络
- 使用第 2 层拓扑配置辅助 UDN,以便在不同节点的一组虚拟机之间创建一个私有隔离通信频道。第 2 层拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes CNI 插件使用 Geneve (通用网络虚拟化封装)协议在节点间创建覆盖网络。您可以使用此覆盖网络在不同的节点上连接虚拟机,而无需配置任何其他物理网络基础架构。
- 通过将虚拟机公开为服务来配置外部入口
-
您可以通过创建
Service对象在集群内或集群外公开虚拟机。对于内部集群,您可以使用 MetalLB Operator 配置负载均衡服务。您可以使用 OpenShift Container Platform Web 控制台或 CLI 安装 MetalLB Operator。 - 将虚拟机添加到 Service Mesh
- OpenShift Virtualization 与 Red Hat OpenShift Service Mesh 集成。您可以使用 IPv4 监控、视觉化和控制默认 pod 网络上的 pod 和虚拟机之间的流量。
10.1.3. 连接到供应商的物理网络 复制链接链接已复制到粘贴板!
要为虚拟机(VM)授予互联网或其他物理设备的访问权限,您可以配置节点网络,定义二级网络,并将虚拟机附加到二级网络。
- 使用 Open vSwitch 网桥将虚拟机连接到物理网络
您可以使用 localnet 拓扑配置 OVN-Kubernetes 二级用户定义的网络(UDN),将虚拟机连接到物理网络基础架构。
localnet 拓扑将二级网络连接到物理网络。这可让 east-west 集群流量和访问集群外运行的服务,但它需要集群节点上的底层 Open vSwitch (OVS)网桥的额外配置。
集群管理员可以使用以下步骤配置 localnet UDN:
- 安装 Kubernetes NMState Operator,它在集群节点中提供状态驱动的网络配置。
-
使用
NodeNetworkConfigurationPolicy自定义资源(CR)配置 OVS 网桥,并在节点上添加适当的网桥映射。 -
使用 UDN API 中的
ClusterUserDefinedNetworkCR,通过上一步中配置的 OVS 网桥将其工作负载附加到 underlay 网络。
- 使用 Linux 网桥将虚拟机连接到物理网络
安装 Kubernetes NMState Operator,为您的二级网络配置 Linux 网桥、VLAN 和绑定。OVN-Kubernetes
localnet拓扑是将虚拟机连接到底层物理网络的建议方法,但 OpenShift Virtualization 还支持 Linux 网桥网络。注意使用 Linux 网桥网络时,您无法直接附加到默认机器网络。
您可以通过执行以下步骤来创建 Linux 网桥网络并将虚拟机附加到网络:
- 通过创建 Linux 网桥节点网络配置策略(NNCP)来准备节点网络。
- 通过创建网络附加定义(NAD)来定义二级 Linux 网桥网络。
- 将虚拟机附加到 Linux 网桥网络。
- 使用 SR-IOV 设备将虚拟机连接到物理网络
对于需要高带宽或低延迟的应用程序,您可以在裸机或 Red Hat OpenStack Platform (RHOSP)基础架构上安装 OpenShift Container Platform 集群上的额外网络使用单根 I/O 虚拟化(SR-IOV)网络设备。
您必须在集群中安装 SR-IOV Network Operator,以管理 SR-IOV 网络设备和网络附加。
您可以通过执行以下步骤将虚拟机连接到 SR-IOV 网络:
-
通过创建一个
SriovNetworkNodePolicyCR 来配置 SR-IOV 物理网络设备。 -
通过创建
SriovNetwork对象来定义 SR-IOV 二级网络。 - 通过在虚拟机配置中包含网络详情,将虚拟机连接到 SR-IOV 网络。
-
通过创建一个
- 使用带有 SR-IOV 硬件的 DPDK 驱动程序将虚拟机连接到物理网络
Data Plane Development Kit (DPDK) 提供了一组库和驱动程序,用于快速数据包处理。您可以通过执行以下步骤将集群和虚拟机配置为在 SR-IOV 网络上运行 DPDK 工作负载:
- 配置节点硬件。
- 为 DPDK 配置虚拟机命名空间。
- 配置虚拟机和客户机操作系统以运行 DPDK 应用程序。
10.1.3.1. 比较 Linux 网桥 CNI 和 OVN-Kubernetes localnet 拓扑 复制链接链接已复制到粘贴板!
下表提供了在使用 Linux bridge CNI 与 OVN-Kubernetes 插件的 localnet 拓扑相比可用功能的比较。
| 功能 | 在 Linux 网桥 CNI 上提供 | OVN-Kubernetes localnet 上提供 |
|---|---|---|
| 第 2 层访问 underlay 原生网络 | 仅在二级网络接口控制器(NIC)上。 | 是 |
| Layer 2 访问底层 VLAN | 是 | 是 |
| 第 2 层中继访问 | 是 | 否 |
| 网络策略 | 否 | 是 |
| MAC spoof 过滤 | 是 | Yes (Always on) |
10.1.4. 管理虚拟机网络接口配置 复制链接链接已复制到粘贴板!
管理虚拟机(VM)网络配置以在不发生应用程序停机时间的情况下扩展连接,对网络延迟进行故障排除,定义和自动化 MAC 地址池的管理、配置 IP 地址并隔离实时迁移流量。
- 热插拔二级网络接口
- 您可以在不停止虚拟机的情况下添加或删除二级网络接口。OpenShift Virtualization 支持热插和热拔使用桥接绑定和 VirtIO 设备驱动程序的二级接口。OpenShift Virtualization 还支持热插使用 SR-IOV 绑定的二级接口。
- 使用其外部 FQDN 访问虚拟机
-
您可以使用其完全限定域名 (FQDN) 访问从集群外部附加到二级网络接口的虚拟机。要使用其外部 FQDN 连接到虚拟机,您必须配置 DNS 服务器,检索集群 FQDN,然后使用
ssh命令连接到虚拟机。 - 管理虚拟机网络接口的链接状态
您可以使用 OpenShift Container Platform Web 控制台或命令行管理主或二级虚拟机网络接口的链接状态。通过指定链接状态,您可以逻辑上连接或断开虚拟网络接口控制器(vNIC)与网络的连接。
注意OpenShift Virtualization 不支持对单根 I/O 虚拟化(SR-IOV)二级网络接口的链接状态管理,也不会报告其链接状态。
- 配置和查看虚拟机 IP 地址
- 您可以在创建虚拟机时配置二级网络接口的 IP 地址。IP 地址使用 cloud-init 置备。您可以使用 OpenShift Container Platform Web 控制台或命令行查看虚拟机的 IP 地址。QEMU 客户机代理收集网络信息。
- 管理虚拟机网络接口的 MAC 地址池
- KubeMacPool 组件从共享 MAC 地址池为虚拟机网络接口分配 MAC 地址。这样可确保为每个网络接口分配唯一的 MAC 地址。从该虚拟机创建的虚拟机实例在重启后保留分配的 MAC 地址。
- 为实时迁移配置专用网络
- 您可以为实时迁移配置专用 Multus 网络。专用的网络可最小化实时迁移期间对租户工作负载的网络饱和影响。
10.1.5. 配置虚拟机 SSH 访问 复制链接链接已复制到粘贴板!
您可以使用 SSH 从命令行安全地访问虚拟机(VM)。
要设置 SSH 配置,请使用以下方法之一:
- 使用
virtctl ssh命令 您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行
virtctl ssh命令连接到虚拟机。您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或第一次引导到使用 cloud-init 数据源配置的客户机操作系统的虚拟机。
- 使用
virtctl port-forward命令 -
您可以将
virtctl port-foward命令添加到.ssh/config文件中,并使用 OpenSSH 连接到虚拟机。 - 服务
- 您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。
- 二级网络
- 您可以配置二级网络,将虚拟机附加到二级网络接口,并连接到其分配的 IP 地址。