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 和虚拟机的默认主网络。

您可以使用 OpenShift Container Platform Web 控制台创建用于主用户定义的网络(UDN)的命名空间。

先决条件

  • 以具有 cluster-admin 权限的用户身份登录到 OpenShift Container Platform web 控制台。

流程

  1. Administrator 视角中,点 Administration Namespaces
  2. Create Namespace
  3. Name 字段中,为命名空间指定一个名称。名称必须包含小写字母数字字符或 '-',且必须以字母数字字符开头和结尾。
  4. Labels 字段中,添加 k8s.ovn.org/primary-user-defined-network 标签。
  5. 可选:如果要将命名空间与现有集群范围的 UDN 一起使用,请添加 ClusterUserDefinedNetwork 自定义资源的 spec.namespaceSelector 字段中定义的适当标签。
  6. 可选:指定一个默认网络策略。
  7. Create 创建命名空间。

您可以通过在 OpenShift Container Platform Web 控制台中创建 UserDefinedNetwork 自定义资源,在项目命名空间中创建隔离的主网络。

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问 OpenShift Container Platform Web 控制台。
  • 您已创建了命名空间,并应用 k8s.ovn.org/primary-user-defined-network 标签。如需更多信息,请参阅"使用 Web 控制台为用户定义网络创建命名空间"。

流程

  1. Administrator 视角中,点 Networking UserDefinedNetworks
  2. Create UserDefinedNetwork
  3. Project name 列表中,选择您之前创建的命名空间。
  4. Subnet 字段中指定一个值。
  5. Create。用户定义的网络充当您在此命名空间中创建的 Pod 和虚拟机的默认主网络。

您可以通过在 OpenShift Container Platform web 控制台中创建 ClusterUserDefinedNetwork 自定义资源,将多个命名空间连接到同一主用户定义的网络(UDN)。

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问 OpenShift Container Platform Web 控制台。

流程

  1. Administrator 视角中,点 Networking UserDefinedNetworks
  2. Create 列表中,选择 ClusterUserDefinedNetwork
  3. Name 字段中,为集群范围的 UDN 指定名称。
  4. Subnet 字段中指定一个值。
  5. Project (s) Match Labels 字段中,添加适当的标签以选择集群 UDN 应用到的命名空间。
  6. Create。集群范围的 UDN 充当 pod 和虚拟机位于命名空间的默认主网络,其中包含在第 5 步中指定的标签。

11.3.2. 使用 CLI 创建主要用户定义的网络

您可以使用 CLI 创建主 UserDefinedNetworkClusterUserDefinedNetwork CRD。

您可以使用 CLI 创建用于主用户定义的网络(UDN)的命名空间。

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建一个 Namespace 对象作为一个类似以下示例的 YAML 文件:

    apiVersion: v1
    kind: Namespace
    metadata:
      name: udn_namespace
      labels:
        k8s.ovn.org/primary-user-defined-network: "" 
    1
    
    # ...
    Copy to Clipboard Toggle word wrap
    1
    与 UDN 关联的命名空间需要该标签。如果命名空间与现有集群 UDN 一起使用,还必须添加 ClusterUserDefinedNetwork 自定义资源的 spec.namespaceSelector 字段中定义的适当标签。
  2. 运行以下命令来应用 Namespace 清单:

    oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap

您可以使用 CLI 在项目命名空间中创建隔离的主网络。您必须使用 OVN-Kubernetes 第 2 层拓扑,并在用户定义的网络(UDN)配置中启用持久性 IP 地址分配,以确保虚拟机实时迁移支持。

先决条件

  • 已安装 OpenShift CLI(oc)。
  • 您已创建了命名空间,并应用 k8s.ovn.org/primary-user-defined-network 标签。

流程

  1. 创建 UserDefinedNetwork 对象以指定自定义网络配置:

    UserDefinedNetwork 清单示例

    apiVersion: k8s.ovn.org/v1
    kind: UserDefinedNetwork
    metadata:
      name: udn-l2-net 
    1
    
      namespace: my-namespace 
    2
    
    spec:
      topology: Layer2 
    3
    
      layer2:
        role: Primary 
    4
    
        subnets:
          - "10.0.0.0/24"
          - "2001:db8::/60"
      ipam:
        lifecycle: Persistent 
    5
    Copy to Clipboard Toggle word wrap

    1
    指定 UserDefinedNetwork 自定义资源的名称。
    2
    指定虚拟机所在的命名空间。命名空间必须具有 k8s.ovn.org/primary-user-defined-network 标签。命名空间不能为 defaultopenshift requirements 命名空间,或者与 Cluster Network Operator (CNO)定义的任何全局命名空间匹配。
    3
    指定网络的拓扑配置。所需的值为 Layer2Layer2 拓扑会创建一个逻辑交换机,供所有节点共享。
    4
    指定 UDN 是 primary 或 secondary。Primary 角色意味着 UDN 充当虚拟机的主网络,所有默认流量都通过此网络。
    5
    指定虚拟工作负载在重新引导和迁移后具有一致的 IP 地址。当指定 ipam.lifecycle: Persistent 时,需要 spec.layer2.subnets 字段。
  2. 运行以下命令来应用 UserDefinedNetwork 清单:

    $ oc apply -f --validate=true <filename>.yaml
    Copy to Clipboard Toggle word wrap

您可以使用 CLI 将多个命名空间连接到同一主要用户定义的网络(UDN),以实现原生租户隔离。

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。
  • 已安装 OpenShift CLI(oc)。

流程

  1. 创建 ClusterUserDefinedNetwork 对象来指定自定义网络配置:

    ClusterUserDefinedNetwork 清单示例

    kind: ClusterUserDefinedNetwork
    metadata:
      name: cudn-l2-net 
    1
    
    spec:
      namespaceSelector: 
    2
    
        matchExpressions: 
    3
    
        - key: kubernetes.io/metadata.name
          operator: In 
    4
    
          values: ["red-namespace", "blue-namespace"]
      network:
        topology: Layer2 
    5
    
        layer2:
          role: Primary 
    6
    
          ipam:
            lifecycle: Persistent
          subnets:
            - 203.203.0.0/16
    Copy to Clipboard Toggle word wrap

    1
    指定 ClusterUserDefinedNetwork 自定义资源的名称。
    2
    指定集群 UDN 应用到的命名空间集合。命名空间选择器不得指向 defaultopenshift channel 命名空间或 Cluster Network Operator (CNO) 定义的任何全局命名空间。
    3
    指定选择器的类型。在本例中,matchExpressions 选择器选择带有标签 kubernetes.io/metadata.name 且值为 red-namespaceblue-namespace 的对象。
    4
    指定 Operator 的类型。可能的值有 InNotInExists
    5
    指定网络的拓扑配置。所需的值为 Layer2Layer2 拓扑会创建一个逻辑交换机,供所有节点共享。
    6
    指定 UDN 是 primary 或 secondary。Primary 角色意味着 UDN 充当虚拟机的主网络,所有默认流量都通过此网络。
  2. 运行以下命令来应用 ClusterUserDefinedNetwork 清单:

    $ oc apply -f --validate=true <filename>.yaml
    Copy to Clipboard Toggle word wrap

您可以通过请求 pod 网络附加并配置接口绑定,将虚拟机(VM)连接到主用户定义的网络(UDN)。

先决条件

  • 已安装 OpenShift CLI(oc)。

流程

  1. 编辑 VirtualMachine 清单以添加 UDN 接口详情,如下例所示:

    VirtualMachine 清单示例

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: example-vm
      namespace: my-namespace 
    1
    
    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
                - name: udn-l2-net 
    2
    
                  binding:
                    name: l2bridge 
    3
    
    # ...
          networks:
          - name: udn-l2-net 
    4
    
            pod: {}
    # ...
    Copy to Clipboard Toggle word wrap

    1
    虚拟机所在的命名空间。这个值必须与定义 UDN 的命名空间匹配。
    2
    用户定义的网络接口的名称。
    3
    用于连接到虚拟机的绑定插件的名称。所需的值为 l2bridge
    4
    网络的名称。这必须与 spec.template.spec.domain.devices.interfaces.name 字段的值匹配。
  2. 运行以下命令来应用 VirtualMachine 清单:

    $ oc apply -f <filename>.yaml
    Copy to Clipboard Toggle word wrap
返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2025 Red Hat