第 9 章 网络
9.1. 网络概述 复制链接链接已复制到粘贴板!
OpenShift Virtualization 使用自定义资源和插件提供高级联网功能。虚拟机(VM)与 Red Hat OpenShift Service on AWS 联网及其生态系统集成。
对单堆栈 IPv6 集群的 OpenShift Virtualization 支持仅限于 OVN-Kubernetes localnet 和 Linux 网桥 Container Network Interface (CNI)插件。
在单堆栈 IPv6 集群上部署 OpenShift Virtualization 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
下图演示了 OpenShift Virtualization 的典型网络设置。也可以进行其他配置。
图 9.1. OpenShift Virtualization 网络概述
Pod 和虚拟机在同一网络基础架构上运行,允许您轻松连接容器化和虚拟化的工作负载。
您可以将虚拟机连接到默认 pod 网络和任意数量的二级网络。
默认 pod 网络提供其所有成员、服务抽象、IP 管理、微分段和其他功能之间的连接。
Multus 是一个 "meta" CNI 插件,它允许 pod 或虚拟机使用其他兼容 CNI 插件连接到其他网络接口。
默认 pod 网络是基于覆盖的,通过底层机器网络进行隧道连接。
机器网络可以在一组选定的网络接口控制器(NIC)上定义。
辅助虚拟机网络通常直接桥接到物理网络,且没有 VLAN 封装。也可以为二级网络创建虚拟覆盖网络。
在 Red Hat OpenShift Service on AWS、Azure for Red Hat OpenShift Service on AWS、Google Cloud 或 Oracle® Cloud Infrastructure (OCI)上不支持将虚拟机直接连接到底层网络。
在公有云上,建议使用 layer2 拓扑将虚拟机连接到用户定义的网络。
二级虚拟机网络可以在专用的 NIC 集合上定义,如图 1 所示,也可以使用机器网络。
9.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,集群管理员可用于在多个命名空间间创建共享网络。
- 节点网络配置策略(NNCP)
-
nmstate 项目引入的 CRD,描述节点上请求的网络配置。您可以通过将
NodeNetworkConfigurationPolicy清单应用到集群来更新节点网络配置,包括添加和删除网络接口 。
9.1.2. 使用默认 pod 网络 复制链接链接已复制到粘贴板!
- 将虚拟机连接到默认 pod 网络
- 每个虚拟机默认连接到默认的内部 pod 网络。您可以通过编辑虚拟机规格来添加或删除网络接口。
- 将虚拟机作为服务公开
-
您可以通过创建
Service对象在集群内或集群外公开虚拟机。
9.1.3. 配置主用户定义的网络 复制链接链接已复制到粘贴板!
- 将虚拟机连接到主用户定义的网络
您可以在虚拟机的主接口上将虚拟机(VM)连接到用户定义的网络(UDN)。主 UDN 替换默认 pod 网络,以在所选命名空间中连接 pod 和虚拟机。
集群管理员可以配置主
UserDefinedNetworkCRD,创建一个租户网络,该网络将租户命名空间与其他命名空间隔离开来,而无需网络策略。另外,集群管理员可以使用ClusterUserDefinedNetworkCRD 在多个命名空间中创建共享 OVNlayer2网络。具有
layer2覆盖拓扑的用户定义网络对虚拟机工作负载很有用,对于物理网络访问受到限制的环境中的辅助网络(如公共云)来说是很好的替代方案。layer2拓扑启用了虚拟机无缝迁移,而无需网络地址转换(NAT),并提供在重启和实时迁移过程中保留的持久性 IP 地址。
9.1.4. 配置虚拟机二级网络接口 复制链接链接已复制到粘贴板!
您可以使用 OVN-Kubernetes Container Network Interface (CNI)插件将虚拟机连接到二级网络。连接到二级网络接口时,不需要在虚拟机规格中指定主 pod 网络。
- 将虚拟机连接到 OVN-Kubernetes 二级网络
您可以将虚拟机连接到 Open Virtual Network (OVN) -Kubernetes 二级网络。OpenShift Virtualization 支持 OVN-Kubernetes 的
layer2拓扑。layer2拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes CNI 插件使用 Geneve (通用网络虚拟化封装)协议在节点间创建覆盖网络。您可以使用此覆盖网络在不同的节点上连接虚拟机,而无需配置任何其他物理网络基础架构。要配置 OVN-Kubernetes 二级网络并将虚拟机附加到该网络,请执行以下步骤:
- 通过创建网络附加定义(NAD)来配置 OVN-Kubernetes 二级网络。
- 通过在虚拟机规格中添加网络详情,将虚拟机连接到 OVN-Kubernetes 二级网络。
- 热插二级网络接口
-
您可以在不停止虚拟机的情况下添加或删除二级网络接口。OpenShift Virtualization 支持热插和热拔使用桥接绑定和 OVN-Kubernetes
layer2拓扑的二级接口。
- 配置和查看 IP 地址
- 您可以在创建虚拟机时配置二级网络接口的 IP 地址。IP 地址使用 cloud-init 置备。您可以使用 Red Hat OpenShift Service on AWS Web 控制台或命令行查看虚拟机的 IP 地址。QEMU 客户机代理收集网络信息。
9.1.5. 与 OpenShift Service Mesh 集成 复制链接链接已复制到粘贴板!
- 将虚拟机连接到服务网格
- OpenShift Virtualization 与 OpenShift Service Mesh 集成。您可以监控、视觉化和控制 pod 和虚拟机之间的流量。
9.1.6. 管理 MAC 地址池 复制链接链接已复制到粘贴板!
- 为网络接口管理 MAC 地址池
- KubeMacPool 组件从共享 MAC 地址池为虚拟机网络接口分配 MAC 地址。这样可确保为每个网络接口分配唯一的 MAC 地址。从该虚拟机创建的虚拟机实例在重启后保留分配的 MAC 地址。
9.1.7. 配置 SSH 访问 复制链接链接已复制到粘贴板!
- 配置对虚拟机的 SSH 访问
您可以使用以下方法配置到虚拟机的 SSH 访问:
您可以创建一个 SSH 密钥对,将公钥添加到虚拟机,并使用私钥运行
virtctl ssh命令连接到虚拟机。您可以在运行时将公共 SSH 密钥添加到 Red Hat Enterprise Linux (RHEL) 9 虚拟机,或者在第一次引导时使用 cloud-init 数据源配置的客户机操作系统的虚拟机。
您可以将
virtctl port-foward命令添加到.ssh/config文件中,并使用 OpenSSH 连接到虚拟机。您可以创建一个服务,将服务与虚拟机关联,并连接到该服务公开的 IP 地址和端口。
您可以配置二级网络,将虚拟机附加到二级网络接口,并连接到其分配的 IP 地址。