8.7. 将虚拟机连接到 OVN-Kubernetes 二级网络


您可以将虚拟机 (VM) 连接到 Open Virtual Network (OVN)-Kubernetes 二级网络。OpenShift Virtualization 支持 OVN-Kubernetes 的第 2 层和 localnet 拓扑。

  • 第 2 层拓扑通过集群范围的逻辑交换机连接工作负载。OVN-Kubernetes Container Network Interface (CNI) 插件使用 Geneve (Generic Network Virtualization Encapsulation) 协议在节点间创建覆盖网络。您可以使用此覆盖网络在不同的节点上连接虚拟机,而无需配置任何其他物理网络基础架构。
  • localnet 拓扑将二级网络连接到物理网络。这可让 east-west 集群流量并访问在集群外运行的服务,但它需要在集群节点上配置底层 Open vSwitch (OVS) 系统。
注意

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

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

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

    注意

    对于 localnet 拓扑,您必须在创建 NAD 前创建一个 NodeNetworkConfigurationPolicy 对象来配置 OVS 网桥

  2. 通过在虚拟机规格中添加网络详情,将虚拟机连接到 OVN-Kubernetes 二级网络

8.7.1. 创建 OVN-Kubernetes NAD

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

注意

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

8.7.1.1. 使用 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: |2
        {
                "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 地址,方法是设置静态 IP 地址,或在网络上为动态 IP 地址部署 DHCP 服务器。

  2. 应用清单:

    $ oc apply -f <filename>.yaml

8.7.1.2. 使用 CLI 为 localnet 拓扑创建 NAD

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

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。
  • 已安装 OpenShift CLI(oc)。
  • 已安装 Kubernetes NMState Operator。
  • 您已创建了 NodeNetworkConfigurationPolicy 对象,将 OVN-Kubernetes 二级网络映射到 Open vSwitch (OVS) 网桥。

流程

  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 属性 存在,则需要这个值。
    5
    映射的状态。必须存在 才能添加映射或 absent 才能删除映射。默认值 存在
    注意

    OpenShift Virtualization 不支持 Linux 网桥绑定模式 0、5 和 6。如需更多信息,请参阅 哪个绑定模式在与虚拟机客户机或容器连接的网桥一起使用时可以正常工作?

  2. 创建 NetworkAttachmentDefinition 对象:

    apiVersion: k8s.cni.cncf.io/v1
    kind: NetworkAttachmentDefinition
    metadata:
      name: localnet-network
      namespace: default
    spec:
      config: |2
        {
                "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

8.7.1.3. 使用 Web 控制台为第 2 层拓扑创建 NAD

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

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。

流程

  1. 在 web 控制台中进入 Networking NetworkAttachmentDefinition
  2. Create Network Attachment Definition。网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
  3. 输入唯一 Name 和可选 Description
  4. Network Type 列表中选择 OVN Kubernetes L2 overlay 网络
  5. Create

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

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

先决条件

  • 您可以使用具有 cluster-admin 权限的用户访问集群。
  • 使用 nmstate 将 localnet 配置为 OVS 网桥映射。

流程

  1. 在 web 控制台中进入到 Networking → NetworkAttachmentDefinition
  2. Create Network Attachment Definition。网络附加定义必须与 pod 或虚拟机位于同一个命名空间中。
  3. 输入唯一 Name 和可选 Description
  4. Network Type 列表中选择 OVN Kubernetes secondary localnet network
  5. Bridge mapping 字段中输入预先配置的 localnet 标识符的名称。
  6. 可选:您可以将 MTU 明确设置为指定的值。内核选择默认值。
  7. 可选:封装 VLAN 中的流量。默认值为 none。
  8. Create

8.7.2. 将虚拟机附加到 OVN-Kubernetes 二级网络

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

8.7.2.1. 使用 CLI 将虚拟机附加到 OVN-Kubernetes 二级网络

您可以通过在虚拟机配置中包含网络详情,将虚拟机 (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
    # ...
    1
    OVN-Kubernetes 二级接口的名称。
    2
    网络的名称。这必须与 spec.template.spec.domain.devices.interfaces.name 字段的值匹配。
    3
    NetworkAttachmentDefinition 对象的名称。
  2. 应用 VirtualMachine 清单:

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

8.7.3. 其他资源

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

© 2024 Red Hat, Inc.