配置多网卡虚拟机

结合使用 Kube-OVN 和 Multus,为虚拟机提供多网卡支持

前提条件

  • Alauda Container Platform 版本必须为 v4.1.0 或更高版本。
  • 使用 Kube-OVN 作为 CNI。
  • 已安装 Alauda Container Platform Multi-Network(之前称为 Alauda Container Platform Networking for Multus)

操作步骤

创建辅助网络

  1. 创建 NetworkAttachmentDefinition

    在集群控制节点上执行以下命令:

    命令
    示例
    cat << EOF | kubectl create -f -
    apiVersion: 'k8s.cni.cncf.io/v1'
    kind: NetworkAttachmentDefinition
    metadata:
      name: <name>
      namespace: <namespace>
    spec:
      config: '{
        "cniVersion": "0.3.0",
        "type": "kube-ovn",
        "server_socket": "/run/openvswitch/kube-ovn-daemon.sock",
        "provider": "<provider>"
        }'
    EOF

    参数:

    • name:NetworkAttachmentDefinition 的名称。
    • namespace:NetworkAttachmentDefinition 的命名空间。必须与虚拟机使用相同的命名空间。
    • provider:当前 NetworkAttachmentDefinition 的 <name>.<namespace>.ovn。Kube-OVN 将使用此信息查找对应的 Subnet 资源。请注意,后缀必须设置为 ovn。
  2. 创建 Kube-OVN Subnet

    如果使用 Kube-OVN 作为辅助网络接口,则 provider 应设置为对应 NetworkAttachmentDefinition 的 <name>.<namespace>.ovn,并且必须以 ovn 作为后缀。

    在集群控制节点上执行以下命令:

    命令
    示例
    cat << EOF | kubectl create -f -
    apiVersion: kubeovn.io/v1
    kind: Subnet
    metadata:
      name: <name>
    spec:
      protocol: IPv4
      enableDHCP: true
      provider: <provider>
      cidrBlock: <cidrBlock>
      gateway: <gateway>
      excludeIps:
      - <excludeIps>
    EOF

    参数:

    • name:子网的名称。
    • provider:NetworkAttachmentDefinition 的 provider。
    • cidrBlock:子网 CIDR。
    • gateway:网关地址。
    • excludeIps:保留 IP 的集合,不会被自动分配。例如,可将其用作计算组件的固定 IP 地址。

创建多网卡虚拟机

  1. 通过 UI 创建 Virtual Machine

  2. 切换到 YAML 视图,并向虚拟机添加另一个网卡

    在 spec.template.spec.domain.devices.interfaces 下添加新接口

    在 spec.template.spec.networks 下添加新网络

    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
              - bridge: {}
                name: default
              # new interface
              - bridge: {}
                name: dyniface1
          networks:
          - name: default
            pod: {}
          # new network
          - multus:
              networkName: <networkName>
            name: dyniface1

    networkName 是 NetworkAttachmentDefinition 的名称。

为新网卡配置网络

虚拟机启动后,需要进入虚拟机并手动为新添加的网卡配置网络。

热插拔网络接口

支持在运行中的 Virtual Machine 中热插拔网络接口。

对于使用 virtio 模型并通过 bridge 绑定或 SR-IOV 绑定连接的接口,支持热插入。

仅对于通过 bridge 绑定连接的接口,支持热拔出。

  1. 向运行中的 VM 添加接口

    使用 kubectl edit 修改虚拟机的 YAML 配置

     spec:
       template:
         spec:
           domain:
             devices:
               interfaces:
               - bridge: {}
                 name: default
               # new interface
               - bridge: {}
                 name: dyniface1
           networks:
           - name: default
             pod: {}
           # new network
           - multus:
               networkName: <networkName>
             name: dyniface1   
  2. 从运行中的 VM 移除接口

    使用 kubectl edit 修改虚拟机的 YAML 配置

    spec:
      template:
        spec:
          domain:
            devices:
              interfaces:
              - bridge: {}
                name: default
              # set the interface state to absent
              - bridge: {}
                name: dyniface1
                state: absent
          networks:
          - name: default
            pod: {}
          # new network
          - multus:
              networkName: <networkName>
            name: dyniface1