10.3. 将虚拟机连接到主用户定义的网络
您可以使用 OpenShift Container Platform web 控制台或 CLI 将虚拟机(VM)连接到虚拟机的主接口上的用户定义网络(UDN)。主用户定义的网络替换了指定命名空间中的默认 pod 网络。与 pod 网络不同,您可以定义每个项目的主要 UDN,每个项目都可以使用其特定的子网和拓扑。
OpenShift Virtualization 支持命名空间范围的 UserDefinedNetwork 和集群范围的 ClusterUserDefinedNetwork 自定义资源定义(CRD)。
集群管理员可以配置主 UserDefinedNetwork CRD,创建一个租户网络,该网络将租户命名空间与其他命名空间隔离开来,而无需网络策略。另外,集群管理员可以使用 ClusterUserDefinedNetwork CRD 在多个命名空间中创建共享 OVN 网络。
在创建用于用户定义的网络的命名空间时,您必须添加 k8s.ovn.org/primary-user-defined-network 标签。
使用第 2 层拓扑时,OVN-Kubernetes 会在节点间创建一个覆盖网络。您可以使用此覆盖网络来连接不同节点上的虚拟机,而无需配置任何额外的物理网络基础架构。
第 2 层拓扑启用虚拟机无缝迁移,而无需进行网络地址转换(NAT),因为实时迁移过程中在集群节点中保留持久的 IP 地址。
在实现主 UDN 前,您必须考虑以下限制:
-
您不能使用
virtctl ssh命令配置虚拟机的 SSH 访问。 -
您不能使用
oc port-forward命令将端口转发到虚拟机。 - 您不能使用无头服务来访问虚拟机。
10.3.1. 使用 Web 控制台创建主用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台创建主命名空间范围的 UserDefinedNetwork 或集群范围的 ClusterUserDefinedNetwork CRD。UDN 充当您在与网络关联的命名空间中创建的 pod 和虚拟机的默认主网络。
10.3.1.1. 使用 Web 控制台为用户定义的网络创建命名空间 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台创建用于主用户定义的网络(UDN)的命名空间。
先决条件
-
以具有
cluster-admin权限的用户身份登录到 OpenShift Container Platform web 控制台。
流程
-
从 Administrator 视角中,点 Administration
Namespaces。 - 点 Create Namespace。
- 在 Name 字段中,为命名空间指定一个名称。名称必须包含小写字母数字字符或 '-',且必须以字母数字字符开头和结尾。
-
在 Labels 字段中,添加
k8s.ovn.org/primary-user-defined-network标签。 -
可选:如果要将命名空间与现有集群范围的 UDN 一起使用,请添加
ClusterUserDefinedNetwork自定义资源的spec.namespaceSelector字段中定义的适当标签。 - 可选:指定一个默认网络策略。
- 点 Create 创建命名空间。
10.3.1.2. 使用 Web 控制台创建主要命名空间范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过在 OpenShift Container Platform Web 控制台中创建 UserDefinedNetwork 自定义资源,在项目命名空间中创建隔离的主网络。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问 OpenShift Container Platform Web 控制台。 -
您已创建了命名空间,并应用
k8s.ovn.org/primary-user-defined-network标签。如需更多信息,请参阅"使用 Web 控制台为用户定义网络创建命名空间"。
流程
-
从 Administrator 视角中,点 Networking
UserDefinedNetworks。 - 点 Create UserDefinedNetwork。
- 从 Project name 列表中,选择您之前创建的命名空间。
- 在 Subnet 字段中指定一个值。
- 点 Create。用户定义的网络充当您在此命名空间中创建的 Pod 和虚拟机的默认主网络。
10.3.1.3. 使用 Web 控制台创建主要集群范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过在 OpenShift Container Platform web 控制台中创建 ClusterUserDefinedNetwork 自定义资源,将多个命名空间连接到同一主用户定义的网络(UDN)。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问 OpenShift Container Platform Web 控制台。
流程
-
从 Administrator 视角中,点 Networking
UserDefinedNetworks。 - 从 Create 列表中,选择 ClusterUserDefinedNetwork。
- 在 Name 字段中,为集群范围的 UDN 指定名称。
- 在 Subnet 字段中指定一个值。
- 在 Project (s) Match Labels 字段中,添加适当的标签以选择集群 UDN 应用到的命名空间。
- 点 Create。集群范围的 UDN 充当 pod 和虚拟机位于命名空间的默认主网络,其中包含在第 5 步中指定的标签。
后续步骤
10.3.2. 使用 CLI 创建主要用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 创建主 UserDefinedNetwork 或 ClusterUserDefinedNetwork CRD。
10.3.2.1. 使用 CLI 为用户定义的网络创建命名空间 复制链接链接已复制到粘贴板!
您可以使用 OpenShift CLI (oc)创建一个命名空间,以用于主要用户定义的网络(UDN)。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 -
已安装 OpenShift CLI(
oc)。
流程
创建一个
Namespace对象作为一个类似以下示例的 YAML 文件:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 与 UDN 关联的命名空间需要该标签。如果命名空间与现有集群 UDN 一起使用,还必须添加
ClusterUserDefinedNetwork自定义资源的spec.namespaceSelector字段中定义的适当标签。
运行以下命令来应用
Namespace清单:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3.2.2. 使用 CLI 创建主要命名空间范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 在项目命名空间中创建隔离的主网络。您必须使用 OVN-Kubernetes 第 2 层拓扑,并在用户定义的网络(UDN)配置中启用持久性 IP 地址分配,以确保虚拟机实时迁移支持。
先决条件
-
已安装 OpenShift CLI(
oc)。 -
您已创建了命名空间,并应用
k8s.ovn.org/primary-user-defined-network标签。
流程
创建一个
UserDefinedNetwork对象来指定自定义网络配置。UserDefinedNetwork清单示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
UserDefinedNetwork自定义资源的名称。 - 2
- 指定虚拟机所在的命名空间。命名空间必须具有
k8s.ovn.org/primary-user-defined-network标签。命名空间不能为default,openshift requirements命名空间,或者与 Cluster Network Operator (CNO)定义的任何全局命名空间匹配。 - 3
- 指定网络的拓扑配置。所需的值为
Layer2。Layer2拓扑会创建一个逻辑交换机,供所有节点共享。 - 4
- 指定 UDN 是 primary 或 secondary。
Primary角色意味着 UDN 充当虚拟机的主网络,所有默认流量都通过此网络。 - 5
- 指定虚拟工作负载在重新引导和迁移后具有一致的 IP 地址。当指定
ipam.lifecycle: Persistent时,需要spec.layer2.subnets字段。
运行以下命令来应用
UserDefinedNetwork清单:oc apply -f --validate=true <filename>.yaml
$ oc apply -f --validate=true <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
10.3.2.3. 使用 CLI 创建主要集群范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 将多个命名空间连接到同一主要用户定义的网络(UDN),以实现原生租户隔离。
先决条件
-
您可以使用具有
cluster-admin权限的用户访问集群。 -
已安装 OpenShift CLI(
oc)。
流程
创建
ClusterUserDefinedNetwork对象来指定自定义网络配置。ClusterUserDefinedNetwork清单示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 1
- 指定
ClusterUserDefinedNetwork自定义资源的名称。 - 2
- 指定集群 UDN 应用到的命名空间集合。命名空间选择器不得指向
default、openshift channel命名空间或 Cluster Network Operator (CNO) 定义的任何全局命名空间。 - 3
- 指定选择器的类型。在本例中,
matchExpressions选择器选择带有标签kubernetes.io/metadata.name且值为red-namespace或blue-namespace的对象。 - 4
- 指定 Operator 的类型。可能的值有
In、NotIn和Exists。 - 5
- 指定网络的拓扑配置。所需的值为
Layer2。Layer2拓扑会创建一个逻辑交换机,供所有节点共享。 - 6
- 指定 UDN 是 primary 或 secondary。
Primary角色意味着 UDN 充当虚拟机的主网络,所有默认流量都通过此网络。
运行以下命令来应用
ClusterUserDefinedNetwork清单:oc apply -f --validate=true <filename>.yaml
$ oc apply -f --validate=true <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
10.3.3. 将虚拟机附加到主用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过请求 pod 网络附加并配置接口绑定,将虚拟机(VM)连接到主用户定义的网络(UDN)。
OpenShift Virtualization 支持以下网络绑定插件,将网络接口连接到虚拟机:
- 第 2 层网桥
- 第 2 层网桥绑定在虚拟机虚拟接口和 UDN 的虚拟交换机之间创建一个直接层 2 连接。
- Passt
Plug a Simple Socket Transport (passt) 绑定提供了一个用户空间网络解决方案,可与 pod 网络无缝集成,从而更好地与 OpenShift Container Platform 网络生态系统集成。
Passt 绑定有以下优点:
- 您可以定义就绪度和存活度 HTTP 探测来配置虚拟机健康检查。
- 您可以参阅 Red Hat Advanced Cluster Security 来监控集群中的 TCP 流量。
使用 passt 绑定插件将虚拟机附加到主 UDN 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
10.3.3.1. 使用 web 控制台将虚拟机附加到主用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform web 控制台将虚拟机连接到主用户定义的网络(UDN)。在配置了主 UDN 的命名空间中创建的虚拟机会自动附加到带有第 2 层网桥网络绑定插件的 UDN。
要使用 Plug a Simple Socket Transport (passt) 绑定将虚拟机附加到主 UDN,请在 web 控制台中启用插件并配置虚拟机网络接口。
使用 passt 绑定插件将虚拟机附加到主 UDN 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
先决条件
- 已登陆到 OpenShift Container Platform Web 控制台。
流程
按照以下步骤启用 passt 网络绑定插件技术预览功能:
- 从 Virtualization 视角中,点 Overview。
- 在 Virtualization 页中,点 Settings 选项卡。
- 点 Preview features,将 Enable Passt binding for primary user-defined networks 设置为 on。
- 从 Virtualization 视角中,点 VirtualMachines。
- 选择一个虚拟机以打开 VirtualMachine 详情页。
- 点 Configuration 选项卡。
- 点 Network。
-
点 Network interfaces 页中的 Options 菜单
并选择 Edit。
- 在 Edit network interface 对话框中,从 Network 列表中选择默认 pod 网络附加。
- 展开 Advanced,然后选择 Passt 绑定。
- 点击 Save。
- 如果您的虚拟机正在运行,重启它以使更改生效。
10.3.3.2. 使用 CLI 将虚拟机附加到主用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 将虚拟机(VM)连接到主用户定义的网络(UDN)。
先决条件
-
已安装 OpenShift CLI(
oc)。
流程
编辑
VirtualMachine清单以添加 UDN 接口详情,如下例所示:VirtualMachine清单示例:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:如果您使用 Plug a Simple Socket Transport (passt)网络绑定插件,请运行以下命令将
HyperConverged自定义资源(CR)中的hco.kubevirt.io/deployPasstNetworkBinding注解设置为true:oc annotate hco kubevirt-hyperconverged -n kubevirt-hyperconverged hco.kubevirt.io/deployPasstNetworkBinding=true --overwrite
$ oc annotate hco kubevirt-hyperconverged -n kubevirt-hyperconverged hco.kubevirt.io/deployPasstNetworkBinding=true --overwriteCopy to Clipboard Copied! Toggle word wrap Toggle overflow 重要使用 passt 绑定插件将虚拟机附加到主 UDN 只是一个技术预览功能。技术预览功能不受红帽产品服务等级协议(SLA)支持,且功能可能并不完整。红帽不推荐在生产环境中使用它们。这些技术预览功能可以使用户提早试用新的功能,并有机会在开发阶段提供反馈意见。
有关红帽技术预览功能支持范围的更多信息,请参阅技术预览功能支持范围。
运行以下命令来应用
VirtualMachine清单:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yamlCopy to Clipboard Copied! Toggle word wrap Toggle overflow