9.3. 将虚拟机连接到主用户定义的网络
您可以使用 Red Hat OpenShift Service on AWS 经典架构 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
命令将端口转发到虚拟机。 - 您不能使用无头服务来访问虚拟机。
- 您无法定义就绪度和存活度探测来配置虚拟机健康检查。
9.3.1. 使用 Web 控制台创建主用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Service on AWS 经典架构 Web 控制台来创建主要命名空间范围的 UserDefinedNetwork
或集群范围的 ClusterUserDefinedNetwork
CRD。UDN 充当您在与网络关联的命名空间中创建的 pod 和虚拟机的默认主网络。
9.3.1.1. 使用 Web 控制台为用户定义的网络创建命名空间 复制链接链接已复制到粘贴板!
您可以使用 Red Hat OpenShift Service on AWS 经典架构 web 控制台创建一个用于主用户定义的网络(UDN)的命名空间。
先决条件
-
以具有
cluster-admin
权限的用户身份登录 Red Hat OpenShift Service on AWS 经典架构 Web 控制台。
流程
-
从 Administrator 视角中,点 Administration
Namespaces。 - 点 Create Namespace。
- 在 Name 字段中,为命名空间指定一个名称。名称必须包含小写字母数字字符或 '-',且必须以字母数字字符开头和结尾。
-
在 Labels 字段中,添加
k8s.ovn.org/primary-user-defined-network
标签。 -
可选:如果要将命名空间与现有集群范围的 UDN 一起使用,请添加
ClusterUserDefinedNetwork
自定义资源的spec.namespaceSelector
字段中定义的适当标签。 - 可选:指定一个默认网络策略。
- 点 Create 创建命名空间。
9.3.1.2. 使用 Web 控制台创建主要命名空间范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过在 Red Hat OpenShift Service on AWS 经典架构 web 控制台中创建 UserDefinedNetwork
自定义资源,在项目命名空间中创建隔离的主网络。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问 Red Hat OpenShift Service on AWS 经典架构 Web 控制台。 -
您已创建了命名空间,并应用
k8s.ovn.org/primary-user-defined-network
标签。如需更多信息,请参阅"使用 Web 控制台为用户定义网络创建命名空间"。
流程
-
从 Administrator 视角中,点 Networking
UserDefinedNetworks。 - 点 Create UserDefinedNetwork。
- 从 Project name 列表中,选择您之前创建的命名空间。
- 在 Subnet 字段中指定一个值。
- 点 Create。用户定义的网络充当您在此命名空间中创建的 Pod 和虚拟机的默认主网络。
9.3.1.3. 使用 Web 控制台创建主要集群范围的用户定义的网络 复制链接链接已复制到粘贴板!
您可以通过在 Red Hat OpenShift Service on AWS 经典架构 web 控制台中创建 ClusterUserDefinedNetwork
自定义资源,将多个命名空间连接到同一主用户定义的网络(UDN)。
先决条件
-
您可以使用具有
cluster-admin
权限的用户访问 Red Hat OpenShift Service on AWS 经典架构 Web 控制台。
流程
-
从 Administrator 视角中,点 Networking
UserDefinedNetworks。 - 从 Create 列表中,选择 ClusterUserDefinedNetwork。
- 在 Name 字段中,为集群范围的 UDN 指定名称。
- 在 Subnet 字段中指定一个值。
- 在 Project (s) Match Labels 字段中,添加适当的标签以选择集群 UDN 应用到的命名空间。
- 点 Create。集群范围的 UDN 充当 pod 和虚拟机位于命名空间的默认主网络,其中包含在第 5 步中指定的标签。
后续步骤
9.3.2. 使用 CLI 创建主要用户定义的网络 复制链接链接已复制到粘贴板!
您可以使用 CLI 创建主 UserDefinedNetwork
或 ClusterUserDefinedNetwork
CRD。
9.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
9.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
9.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
后续步骤
9.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