11.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
命令将端口转发到虚拟机。 - 您不能使用无头服务来访问虚拟机。
- 您无法定义就绪度和存活度探测来配置虚拟机健康检查。
11.3.1. 使用 Web 控制台创建主用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 OpenShift Container Platform Web 控制台创建主命名空间范围的 UserDefinedNetwork
或集群范围的 ClusterUserDefinedNetwork
CRD。UDN 充当您在与网络关联的命名空间中创建的 pod 和虚拟机的默认主网络。
11.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 创建命名空间。
11.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 和虚拟机的默认主网络。
11.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 步中指定的标签。
后续步骤
11.3.2. 使用 CLI 创建主要用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 创建主 UserDefinedNetwork
或 ClusterUserDefinedNetwork
CRD。
11.3.2.1. 使用 CLI 为用户定义的网络创建命名空间 复制链接链接已复制到粘贴板!
您可以使用 CLI 创建用于主用户定义的网络(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>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.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>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
11.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>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
后续步骤
11.3.3. 使用 CLI 将虚拟机附加到主用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过请求 pod 网络附加并配置接口绑定,将虚拟机(VM)连接到主用户定义的网络(UDN)。
先决条件
-
已安装 OpenShift CLI(
oc
)。
流程
编辑
VirtualMachine
清单以添加 UDN 接口详情,如下例所示:VirtualMachine
清单示例Copy to Clipboard Copied! Toggle word wrap Toggle overflow 运行以下命令来应用
VirtualMachine
清单:oc apply -f <filename>.yaml
$ oc apply -f <filename>.yaml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow