管理 OpenShift 虚拟化的虚拟网络接口
虚拟私有云 4.20 后来 仅限裸机工作节点 仅限 RHCOS 需要 OVN- Kubernetes CNI
您可以使用虚拟网络接口 (VNI),通过 OpenShift Virtualization 为运行在 Red Hat OpenShift on IBM Cloud 集群上的虚拟机 (VM) 启用高级网络连接。
了解虚拟网络接口
虚拟网络接口(VNI)是 IBM Cloud VPC 抽象,代表单个网络连接。 VNI 嵌入了网络连接的属性,如 IP 地址、MAC 地址和所属的 VPC 子网。
VNI 仅适用于带有裸机工作节点的集群。
Red Hat OpenShift on IBM Cloud 使用基于 VNI 的网络附加功能,可在集群上运行的工作负载与集群外的工作负载之间实现灵活连接。 VNI 通过使用具有 Localnet 拓扑的 OVN 用户定义网络 (UDN),使基于 OpenShift 虚拟化的虚拟机 (VM) 能够直接接触 VPC 网络。 通过连接到裸机工作节点的 VNI,虚拟机的实时迁移可以保留网络连接,因为 VNI 可以在同一区域内的裸机工作实例之间隐式浮动并跟踪
VM 工作负载。
主要功能
- 每个工作节点的静态 VNI
- 在 IBM Cloud VPC 中创建基于裸机的 Red Hat OpenShift on IBM Cloud 群集或新工作池时,会自动创建两个 VNI 并静态连接到每个裸机工作节点。 一个 VNI 负责处理常规工作者流量(pod 网络、叠加 UDN 和主站通信)。 第二个 VNI 充当您管理的动态 VNI 附件的载体。
- 动态 VNI 附件
- 创建群集后,您可以按需创建和管理 VNI。 在实时迁移过程中,动态 VNI 可以连接到特定的工作人员,也可以配置为在同一区域的工作人员之间浮动,跟随 VM 工作负载。
- 实时迁移支持
- 通过连接到裸机工作节点的 VNI,基于 OpenShift Virtualization 的虚拟机的实时迁移可以保留网络连接。 VNI 在同一区域内的裸机工作实例之间隐式浮动并跟踪工作负载。
有关虚拟网络标识的重要限制和注意事项,请参阅 限制和注意事项。
跨账户附件
在 Red Hat OpenShift on IBM Cloud 中,工作节点不在账户中配置,这意味着 VNI 的生命周期管理与独立的 VPC 裸机实例略有不同。 Red Hat OpenShift on IBM Cloud 群集管理员对 VNI 附件的可见性不同,因为它们附加到工作负载上,而工作负载在账户内是不可见的。 本文档介绍了 VNI 管理的不同之处。
有关独立 VPC 裸机实例上 VNI 的更多信息,请参阅 关于虚拟网络接口。
局限性和考虑因素
- 静态 VNI 修改
- 不要修改为每个工作节点自动创建的静态 VNI。 虽然这些 VNI 在您的 VPC 账户中可见,但不支持对其设置进行任何更改。 这包括附加浮动 IP、更改安全组或修改任何其他 VNI 属性。 修改静态 VNI 可能会导致群集连接问题。
- 浮动附件的 VNI 修改限制
- 不能修改浮动(群集作用域)动态附件的 VNI 属性。 这包括更改 VNI 名称、浮动 IP 地址、基础架构 NAT 设置和安全组分配。 要更新这些设置,必须先分离 VNI,进行更改,然后将其重新连接到群集。 这种限制是暂时的。
- 区域限制
- VNI 连接到特定的 VPC 子网,不能在区域之间浮动。 在多区域 Red Hat OpenShift on IBM Cloud 集群中,VNI 只能处理在配置 VNI 的同一区域的集群工作者上运行的工作负载的流量。 这也意味着,当特定 VM 使用 Localnet UDN 上的 VNI 时,必须避免 OpenShift Virtualization VM 区域间的实时迁移。
- 裸机要求
- VNI 仅支持裸机工作节点。 虚拟服务器实例 (VSI) 工作节点不支持 VNI。
- RHCOS 要求
- 工作节点必须运行 Red Hat CoreOS (RHCOS) 操作系统。
- OVN- Kubernetes CNI
- 集群必须使用 OVN- Kubernetes Container Network Interface (CNI) 插件。
- 版本要求
- 支持 VNI 需要 OpenShift 4.20 或更高版本。
- 本地网 UDN 限制
- 本地网 UDN 在 OVN 端禁用了 IP 地址管理 (IPAM),这意味着不会从 OVN 向 pod 分配静态 IP 地址。 该配置专为 VM 工作负载设计,这些负载使用 DHCP 或在客户操作系统内设置静态 IP。 常规 pod 不能连接到本地网 UDN。
先决条件
开始之前,请确保您拥有以下资源和权限。
- Red Hat OpenShift on IBM Cloud 集群,版本为 4.20 或更高,带有裸机工作节点
- 创建了带有虚拟网络标识符的 VPC 基础设施
- 工作节点上的 RHCOS 操作系统
- OpenShift 已安装虚拟化操作器
- 为 OpenShift 虚拟化配置的存储
- 操作员平台访问角色为 Kubernetes Service 在 IBM Cloud IAM
- IBM Cloud IAM 中 VPC 基础设施服务的编辑或管理员平台访问角色
- 允许名单上的账户访问 VNI 功能
- OVN- Kubernetes CNI(需要 VNI 支持 4.20 +)
有关多网络配置的一般信息,请参阅 Red Hat OpenShift 多网络文档。
为 Pod 和虚拟机创建覆盖 UDN
您可以创建覆盖用户定义网络,与 pod 或 VM 工作负载一起使用。 OpenShift 控制台用户界面的用户定义网络体验可能会随着近期版本的发布而发生变化。 本文档中的示例使用 YAML 定义,以便重复使用。
创建主 UDN
要将主用户定义网络用于 pod 或 VM 工作负载,首先要创建 UDN 本身。
可跨命名空间使用的集群用户定义网络示例:
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
name: primary
spec:
namespaceSelector:
matchLabels:
kubernetes.io/metadata.name: green
network:
layer2:
ipam:
lifecycle: Persistent
role: Primary
subnets:
- 10.0.0.0/24
topology: Layer2
然后,创建将使用它的命名空间。 命名空间在创建时必须包含一个特定标签(称为 k8s.ovn.org/primary-user-defined-network ),以便使用主 UDN。
示例:
kind: Namespace
apiVersion: v1
metadata:
name: green
labels:
k8s.ovn.org/primary-user-defined-network: ''
一旦 (C)UDN 和命名空间就位,在该命名空间中创建的任何工作负载都将使用默认路由访问 UDN。
创建辅助 UDN
辅助 UDN 配置与主 UDN 类似,但角色设置为 Secondary。 有关详细信息,请参阅 Red Hat OpenShift 多网络文档。
使用 VPC 负载均衡器公开虚拟机
您可以通过使用 VPC 应用程序负载平衡器,在不使用 UDN 或本地网 VNI 的情况下暴露虚拟机。 有关配置负载平衡器的更多信息,请参阅 关于 VPC 负载平衡器。
设置本地网用户定义网络
本地网 UDN 需要准备 Red Hat OpenShift on IBM Cloud 集群的 OVN 网络。 在裸机集群节点上,两个静态网络接口在主机操作系统上有可预测的名称。 专用于传输动态附加 VNI 流量的网络接口称为 eth1。 利用 Localnet 需要在 eth1 的基础上,在裸机集群节点上创建专用的 OVS 网桥。 准备一个用于连接 VNI 的 VLAN ID。 在 CUDN 资源中也将提及。
安装 NMState 操作符
OpenShift 虚拟化服务集群 已预装 NMState 操作员,并由 openshift-virtualization 插件进行管理。 如果您使用的是虚拟化服务,请跳过此步骤。
-
从 OperatorHub Red Hat OpenShift on IBM Cloud 控制台或使用 CLI 部署 NMState Operator。
-
使用默认配置创建 NMState 实例。
apiVersion: nmstate.io/v1 kind: NMState metadata: name: nmstate spec: probeConfiguration: dns: host: root-servers.net
创建 OVS 网桥
OpenShift 虚拟化服务 集群已预先配置了所需的NNCP资源。 您只需为采用手动安装 OpenShift 虚拟化功能的标准 OpenShift 集群手动创建这些资源。
-
通过部署以下 NMState 自定义资源,创建连接到
eth1的专用 OVS 网桥。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: "br-eth1" spec: desiredState: interfaces: - name: "br-eth1" description: A dedicated OVS bridge with a NIC as a port type: ovs-bridge state: up bridge: allow-extra-patch-ports: true options: stp: false port: - name: "eth1" -
检查自定义资源状态,并等待所有适用的群集节点核对桥接创建请求。
-
创建以下 NMState 自定义资源,将新 OVS 桥接器修补为默认桥接器。 将
vpc-vlans替换为所需的网络名称。apiVersion: nmstate.io/v1 kind: NodeNetworkConfigurationPolicy metadata: name: "vpc-vlans" spec: desiredState: ovn: bridge-mappings: - localnet: "vpc-vlans" bridge: "br-eth1" state: present -
检查自定义资源状态,并等待所有适用的群集节点核对桥接映射请求。
创建本地网用户定义网络
创建 UDN 或 ClusterUserDefinedNetwork (CUDN),通过使用选定的 VLAN 提供来自 VNI 的流量。
apiVersion: k8s.ovn.org/v1
kind: ClusterUserDefinedNetwork
metadata:
name: "vlan250"
spec:
namespaceSelector:
matchExpressions:
- key: kubernetes.io/metadata.name
operator: In
values:
- "default"
network:
topology: Localnet
localnet:
role: "Secondary"
physicalNetworkName: "vpc-vlans"
ipam:
mode: Disabled
vlan:
mode: Access
access:
id: 250
替换以下值:
vlan250:您的 CUDN 名称default:要使用 CUDN 的命名空间vpc-vlans:您在网桥映射中定义的物理网络名称250:您所需的 VLAN ID(范围:1-500)
至此,特定 VLAN 的网络管道连接结束。 您可以使用不同的 VLAN ID 定义多个 CUDN,同时重复使用网桥映射。
完成 localnet UDN 设置后,可使用 IBM Cloud 控制台或 IBM Cloud CLI ks vni 命令将 VNI 附加到群集。 请参阅以下章节中的示例。
将 VNI 附加到群集
设置本地网 UDN 后,可使用 IBM Cloud 控制台或 CLI 将 VNI 附加到群集。
准备工作
-
在 VPC 中创建 VNI,并配置适当的子网和 IP 地址。
-
确保您拥有管理群集和 VNI 所需的权限。
从控制台附加虚拟网络接口
您可以将 VNI 附加到特定工作节点(非浮动)或群集(浮动)。 浮动 VNI 可以跟踪同一区域内工人之间的工作负载。
VNI、子网和工作节点都是区域资源。 VNI 计算区必须与所选的工作区匹配。 对于浮动附件,假定 VNI 为区域,浮动附件也有区域约束。 VNI 可以从任意子网连接,但只能从与群集相同的 VPC 内连接。
-
在导航菜单中,单击网络 > VNI 附件。
-
单击附加 VNI。
-
在“附加 VNI”面板中,配置以下设置:
- 子网:选择 VNI 所在子网。 只有与工作节点位于同一区域的子网才可用。
- 工作节点:选择要将 VNI 附加到的特定工作节点,或选择“所有工作节点”来创建浮动 VNI 附加,以便在同一区域的工作节点之间跟踪工作负载。
- VNI:从所选子网中的可用 VNI 中选择要连接的 VNI。
- VLAN ID:输入与本地网 UDN 配置相匹配的 VLAN ID(范围:1-500)。
- 自动删除:可选。 选择此选项可在 VNI 从群集中删除时自动删除。
-
单击连接。
从 CLI 附加 VNI
您可以将 VNI 附加到特定工作节点(非浮动)或群集(浮动)。 浮动 VNI 可以跟踪同一区域内工人之间的工作负载。
VNI、子网和工作节点都是区域资源。 VNI 计算区必须与所选的工作区匹配。 对于浮动附件,假定 VNI 为区域,浮动附件也有区域约束。 VNI 可以从任意子网连接,但只能从与群集相同的 VPC 内连接。
要将 VNI 附加到特定工作节点,请运行以下命令。
ibmcloud ks vni attach baremetal --worker WORKER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]
要将浮动 VNI 附加到群集,请运行以下命令。
ibmcloud ks vni attach baremetal --cluster-id CLUSTER_ID --vni VNI_ID --vlan VLAN_ID [--auto-delete]
--worker WORKER_ID- 工作节点的ID。 要列出工作者 ID,请运行
ibmcloud ks workers --cluster CLUSTER。 --cluster-id CLUSTER_ID- 群组的 ID。 要列出集群 ID,请运行
ibmcloud ks clusters。 --vni VNI_ID- 要附加的 VNI 的 ID。
--vlan VLAN_ID- 附件的 VLAN ID(范围:1-500)。 这必须与 CUDN 配置中的 VLAN ID 相匹配。
--auto-delete- 可选:从群集中删除 VNI 时自动删除。
示例
ibmcloud ks vni attach baremetal --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 --vlan 251
示例输出
OK
Successfully attached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba to worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.
Worker Node ID VNI ID VLAN ID
kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba 251
查看 VNI 附件
您可以通过 IBM Cloud 控制台或 CLI 查看 VNI 附件。
从控制台查看 VNI 附件
-
在导航菜单中,单击网络 > VNI 附件。
-
虚拟网络接口附件 页面会显示一个表格,其中包含每个已连接 VNI 的以下信息:
- VNI 名称:虚拟网络接口的名称
- 工作节点名称:VNI 所连接的工作节点,如果是浮动连接,则应注明
- 子网:与 VNI 关联的 VPC 子网
- VLAN ID:附件使用的 VLAN ID
- 主 IP:VNI 的主 IP 地址
-
可选:使用页面顶部的筛选器按子网或工作节点筛选 VNI。
通过 CLI 查看 VNI 附件
要列出连接到群集的所有 VNI,请运行以下命令。
ibmcloud ks vni ls --cluster-id CLUSTER_ID
要列出连接到特定工作者的 VNI,请运行以下命令。
ibmcloud ks vni ls --worker WORKER_ID
示例输出
ibmcloud ks vni ls --cluster-id c9pqfcmw0tq431jdnrrg
OK
VNI ID Worker Node IP Address MAC Address VLAN Floating Auto-delete
0716-d97d3626-acb2-476b-8b12-bcafa1dec5bb kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000456 10.240.1.5 02:00:02:00:73:A5 250 - false
0716-aac49630-f3b4-4ef6-9a3a-5145481697ba kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123 10.240.1.4 02:00:01:00:73:A5 251 - false
分离 VNI
您可以从 IBM Cloud 控制台或使用 CLI 分离 VNI。
从控制台分离 VNI
-
在导航菜单中,单击网络 > VNI 附件。
-
在 虚拟网络接口附件 表中,找到要分离的 VNI。
-
单击 VNI 的操作菜单图标(⋯)并选择“分离”。
-
在确认对话框中,单击“分离”确认操作。
从 CLI 中分离 VNI
要从工作者节点分离 VNI,必须同时指定 VNI ID 和工作者 ID。
ibmcloud ks vni detach --worker WORKER_ID --vni VNI_ID
对于浮动 VNI,首先列出 VNI 以找到当前工人 ID,然后使用该工人 ID 进行分离。
示例
ibmcloud ks vni detach --vni 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba --worker kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123
Detach VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123? This action cannot be undone. [y/N]> y
OK
Successfully detached VNI 0716-aac49630-f3b4-4ef6-9a3a-5145481697ba from worker node kube-c9pqfcmw0tq431jdnrrg-mycluster-default-00000123.
将 VNI 与 OpenShift 虚拟化结合使用
连接 VNI 并配置本地网 UDN 后,就可以将它们与 OpenShift Virtualization 虚拟机一起使用。
-
使用 OpenShift 虚拟化创建虚拟机,并将 CUDN 添加为辅助网络。 本地网附件不能用作主网络。 您可以使用 OpenShift 控制台添加附件。
-
指定附件的 MAC 地址,以便 VM 操作系统使用 DHCP 获取其 IP 地址。 或者,也可以在 VM 中为相应的网络接口静态分配 VNI IP 地址。
有关创建和管理虚拟机的更多信息,请参阅以下 Red Hat 文档:
虚拟网络接口故障排除
为什么不能将普通 pod 附加到本地网 UDN?
本地网 UDN 在 OVN 端禁用了 IP 地址管理 (IPAM),这意味着不会从 OVN 向 pod 分配静态 IP 地址。 该配置专为 VM 工作负载设计,这些负载使用 DHCP 或在客户操作系统内设置静态 IP。 这些选项不适用于 pod 工作负载。
为什么跨工人池的实时迁移尚未完成?
不同的工人池可能有不同的工人类型,CPU 也有不同的世代和性能。 如果 VM 工作负载可以透明地看到全部 CPU 功能集,则无法将 VM 迁移到另一个不支持全部 CPU 功能的工作负载上。 您可以在开始时限制客户操作系统的可见 CPU 功能,以获得更高的跨 Worker 版本兼容性。
为什么动态连接的虚拟网络标识符不起作用?
检查以下各项:
- 验证 CUDN 中的 VLAN ID 是否与 VNI 附件中的 VLAN ID 一致。 如果 VLAN 不匹配,VPC DHCP 仍可正常工作,不会产生更多流量。
- 如果未启用浮动,请确保工作负载调度在连接 VNI 的工作站上。
- 验证专用 OVS 网桥和映射是否存在于工作者身上。 检查 NodeNetworkConfigurationPolicy 资源状态。