×

您可以将虚拟机 (VM) 连接到 OVN-Kubernetes 辅助网络。OpenShift Virtualization 支持 OVN-Kubernetes 的layer2localnet 拓扑。

  • layer2 拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes 容器网络接口 (CNI) 插件使用 Geneve(通用网络虚拟化封装)协议在节点之间创建覆盖网络。您可以使用此覆盖网络连接不同节点上的虚拟机,而无需配置任何额外的物理网络基础设施。

  • localnet 拓扑将辅助网络连接到物理底层。这使得东西向集群流量和访问集群外部运行的服务成为可能,但它需要对集群节点上的底层 Open vSwitch (OVS) 系统进行额外的配置。

OVN-Kubernetes 辅助网络与多网络策略 API兼容,该 API 提供MultiNetworkPolicy 自定义资源定义 (CRD) 来控制进出虚拟机的流量。您可以使用ipBlock 属性为特定 CIDR 块定义网络策略入口和出口规则。

要配置 OVN-Kubernetes 辅助网络并将虚拟机附加到该网络,请执行以下步骤

  1. 通过创建网络附加定义 (NAD) 来配置 OVN-Kubernetes 辅助网络

    对于localnet 拓扑,您必须在创建 NAD 之前配置 OVS 桥接,方法是创建NodeNetworkConfigurationPolicy 对象。

  2. 通过将网络详细信息添加到虚拟机规范中,将虚拟机连接到 OVN-Kubernetes 辅助网络

创建 OVN-Kubernetes NAD

您可以使用 OpenShift Container Platform Web 控制台或 CLI 创建 OVN-Kubernetes 网络附加定义 (NAD)。

不支持通过在虚拟机的网络附加定义中指定spec.config.ipam.subnet属性来配置 IP 地址管理 (IPAM)。

使用 CLI 创建用于第 2 层拓扑的 NAD

您可以创建一个网络附加定义 (NAD),该定义描述如何将 Pod 附加到第 2 层覆盖网络。

先决条件
  • 您可以作为具有cluster-admin权限的用户访问集群。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 创建一个NetworkAttachmentDefinition对象

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: l2-network
      namespace: my-namespace
    spec:
      config: |-
        {
                "cniVersion": "0.3.1", (1)
                "name": "my-namespace-l2-network", (2)
                "type": "ovn-k8s-cni-overlay", (3)
                "topology":"layer2", (4)
                "mtu": 1300, (5)
                "netAttachDefName": "my-namespace/l2-network" (6)
        }
    1 CNI 规范版本。所需值为0.3.1
    2 网络的名称。此属性不带命名空间。例如,您可以拥有一个名为l2-network的网络,该网络可从存在于两个不同命名空间中的两个不同的NetworkAttachmentDefinition对象引用。此功能可用于连接不同命名空间中的虚拟机。
    3 要配置的 CNI 插件的名称。所需值为ovn-k8s-cni-overlay
    4 网络的拓扑配置。所需值为layer2
    5 可选:最大传输单元 (MTU) 值。默认值由内核自动设置。
    6 NetworkAttachmentDefinition对象的metadata部分中namespacename字段的值。

    以上示例配置了未定义子网的集群范围覆盖网络。这意味着实现网络的逻辑交换机仅提供第 2 层通信。您必须在创建虚拟机时通过设置静态 IP 地址或在网络上部署 DHCP 服务器以获取动态 IP 地址来配置 IP 地址。

  2. 应用清单

    $ oc apply -f <filename>.yaml

使用 CLI 创建用于本地网拓扑的 NAD

您可以创建一个网络附加定义 (NAD),该定义描述如何将 Pod 附加到底层物理网络。

先决条件
  • 您可以作为具有cluster-admin权限的用户访问集群。

  • 您已安装 OpenShift CLI (oc)。

  • 您已安装 Kubernetes NMState 运算符。

步骤
  1. 创建一个NodeNetworkConfigurationPolicy对象以将 OVN-Kubernetes 辅助网络映射到 Open vSwitch (OVS) 桥接

    apiVersion: nmstate.io/v1
    kind: NodeNetworkConfigurationPolicy
    metadata:
      name: mapping (1)
    spec:
      nodeSelector:
        node-role.kubernetes.io/worker: '' (2)
      desiredState:
        ovn:
          bridge-mappings:
          - localnet: localnet-network (3)
            bridge: br-ex (4)
            state: present (5)
    1 配置对象的名称。
    2 指定要应用节点网络配置策略的节点。推荐的节点选择器值为node-role.kubernetes.io/worker: ''
    3 要将流量转发到OVS桥的附加网络名称。此属性必须与定义OVN-Kubernetes附加网络的NetworkAttachmentDefinition对象的spec.config.name字段的值匹配。
    4 节点上OVS桥的名称。如果state属性为present,则此值是必需的。
    5 映射的状态。必须为present(添加映射)或absent(删除映射)。默认值为present

    OpenShift Virtualization不支持Linux桥接模式0、5和6。更多信息,请参见虚拟机客户机或容器连接到的桥接器使用哪些绑定模式?

  2. 创建一个NetworkAttachmentDefinition对象

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: localnet-network
      namespace: default
    spec:
      config: |-
        {
                "cniVersion": "0.3.1", (1)
                "name": "localnet-network", (2)
                "type": "ovn-k8s-cni-overlay", (3)
                "topology": "localnet", (4)
                "netAttachDefName": "default/localnet-network" (5)
        }
    1 CNI 规范版本。所需值为0.3.1
    2 网络名称。此属性必须与定义OVS桥映射的NodeNetworkConfigurationPolicy对象的spec.desiredState.ovn.bridge-mappings.localnet字段的值匹配。
    3 要配置的 CNI 插件的名称。所需值为ovn-k8s-cni-overlay
    4 网络的拓扑配置。所需值为localnet
    5 NetworkAttachmentDefinition对象的metadata部分中namespacename字段的值。
  3. 应用清单

    $ oc apply -f <filename>.yaml

使用Web控制台创建用于二层拓扑的NAD

您可以创建一个网络附加定义(NAD),描述如何将Pod附加到二层覆盖网络。

先决条件
  • 您可以作为具有cluster-admin权限的用户访问集群。

步骤
  1. 在Web控制台中,转到**网络** → **NetworkAttachmentDefinitions**。

  2. 单击**创建网络附加定义**。网络附加定义必须与使用它的Pod或虚拟机位于相同的命名空间。

  3. 输入唯一的**名称**和可选的**描述**。

  4. 从**网络类型**列表中选择**OVN Kubernetes L2 覆盖网络**。

  5. 单击**创建**。

使用Web控制台为localnet拓扑创建NAD

您可以使用OpenShift Container Platform Web控制台创建网络附加定义(NAD),以将工作负载连接到物理网络。

先决条件
  • 您可以作为具有cluster-admin权限的用户访问集群。

  • 使用nmstate配置localnet到OVS桥的映射。

步骤
  1. 在Web控制台中,导航到**网络** → **NetworkAttachmentDefinitions**。

  2. 单击**创建网络附加定义**。网络附加定义必须与使用它的Pod或虚拟机位于相同的命名空间。

  3. 输入唯一的**名称**和可选的**描述**。

  4. 从**网络类型**列表中选择**OVN Kubernetes辅助localnet网络**。

  5. 在**桥接映射**字段中输入您预先配置的localnet标识符的名称。

  6. 可选:您可以显式地将MTU设置为指定值。默认值由内核选择。

  7. 可选:将流量封装在VLAN中。默认值为无。

  8. 单击**创建**。

将虚拟机附加到OVN-Kubernetes辅助网络

您可以使用OpenShift Container Platform Web控制台或CLI将虚拟机(VM)附加到OVN-Kubernetes辅助网络接口。

使用CLI将虚拟机附加到OVN-Kubernetes辅助网络

您可以通过在VM配置中包含网络详细信息来将虚拟机(VM)连接到OVN-Kubernetes辅助网络。

先决条件
  • 您可以作为具有cluster-admin权限的用户访问集群。

  • 您已安装 OpenShift CLI (oc)。

步骤
  1. 编辑VirtualMachine清单以添加OVN-Kubernetes辅助网络接口详细信息,如下例所示

    apiVersion: kubevirt.io/v1
    kind: VirtualMachine
    metadata:
      name: vm-server
    spec:
      running: true
      template:
        spec:
          domain:
            devices:
              interfaces:
              - name: secondary (1)
                bridge: {}
            resources:
              requests:
                memory: 1024Mi
          networks:
          - name: secondary  (2)
            multus:
              networkName: <nad_name> (3)
          nodeSelector:
            node-role.kubernetes.io/worker: '' (4)
    # ...
    1 OVN-Kubernetes辅助接口的名称。
    2 网络名称。这必须与spec.template.spec.domain.devices.interfaces.name字段的值匹配。
    3 NetworkAttachmentDefinition对象的名称。
    4 指定可以调度VM的节点。推荐的节点选择器值为node-role.kubernetes.io/worker: ''
  2. 应用VirtualMachine清单

    $ oc apply -f <filename>.yaml
  3. 可选:如果您编辑了正在运行的虚拟机,则必须重新启动它才能使更改生效。