×

您可以为集群中的单根 I/O 虚拟化 (SR-IOV) 设备配置以太网网络附件。

在执行以下文档中的任何任务之前,请确保您已安装 SR-IOV 网络操作符

以太网设备配置对象

您可以通过定义一个SriovNetwork对象来配置以太网网络设备。

以下 YAML 描述了一个SriovNetwork对象

apiVersion: sriovnetwork.openshift.io/v1
kind: SriovNetwork
metadata:
  name: <name> (1)
  namespace: openshift-sriov-network-operator (2)
spec:
  resourceName: <sriov_resource_name> (3)
  networkNamespace: <target_namespace> (4)
  vlan: <vlan> (5)
  spoofChk: "<spoof_check>" (6)
  ipam: |- (7)
    {}
  linkState: <link_state> (8)
  maxTxRate: <max_tx_rate> (9)
  minTxRate: <min_tx_rate> (10)
  vlanQoS: <vlan_qos> (11)
  trust: "<trust_vf>" (12)
  capabilities: <capabilities> (13)
1 对象的名称。SR-IOV 网络操作符将创建一个具有相同名称的NetworkAttachmentDefinition对象。
2 安装 SR-IOV 网络操作符的命名空间。
3 定义此附加网络的 SR-IOV 硬件的SriovNetworkNodePolicy对象的spec.resourceName参数的值。
4 SriovNetwork对象的 target 命名空间。只有 target 命名空间中的 Pod 才能连接到附加网络。
5 可选:附加网络的虚拟局域网 (VLAN) ID。整数值必须介于04095之间。默认值为0
6 可选:VF 的欺骗检查模式。允许的值是字符串"on""off"

您必须将您指定的值用引号括起来,否则 SR-IOV 网络操作符将拒绝该对象。

7 作为 YAML 块标量的 IPAM CNI 插件的配置对象。该插件管理附件定义的 IP 地址分配。
8 可选:虚拟功能 (VF) 的链路状态。允许的值为enabledisableauto
9 可选:VF 的最大传输速率,单位为 Mbps。
10 可选:VF 的最小传输速率,单位为 Mbps。此值必须小于或等于最大传输速率。

英特尔网卡不支持minTxRate参数。更多信息,请参见BZ#1772847

11 可选:VF 的 IEEE 802.1p 优先级。默认值为0
12 可选:VF 的信任模式。允许的值是字符串"on""off"

您必须将您指定的值用引号括起来,否则 SR-IOV 网络操作符将拒绝该对象。

13 可选:要为此附加网络配置的功能。您可以指定'{ "ips": true }'以启用 IP 地址支持或'{ "mac": true }'以启用 MAC 地址支持。

附加网络的IP地址分配配置

IP地址管理(IPAM)容器网络接口(CNI)插件为其他CNI插件提供IP地址。

您可以使用以下IP地址分配类型:

  • 静态分配。

  • 通过DHCP服务器进行动态分配。您指定的DHCP服务器必须可以从附加网络访问。

  • 通过Whereabouts IPAM CNI插件进行动态分配。

静态IP地址分配配置

下表描述了静态IP地址分配的配置。

表1. ipam静态配置对象
字段 类型 描述

type

字符串

IPAM地址类型。需要值为static

addresses

数组

指定要分配给虚拟接口的IP地址的对象数组。支持IPv4和IPv6 IP地址。

routes

数组

指定在Pod内配置路由的对象数组。

dns

数组

可选:指定DNS配置的对象数组。

addresses数组需要具有以下字段的对象:

表2. ipam.addresses[]数组
字段 类型 描述

address

字符串

您指定的IP地址和网络前缀。例如,如果您指定10.10.21.10/24,则附加网络将被分配10.10.21.10的IP地址,子网掩码为255.255.255.0

gateway

字符串

将出站网络流量路由到的默认网关。

表3. ipam.routes[]数组
字段 类型 描述

dst

字符串

CIDR格式的IP地址范围,例如192.168.17.0/24或默认路由的0.0.0.0/0

gw

字符串

路由网络流量的网关。

表4. ipam.dns对象
字段 类型 描述

nameservers

数组

一个或多个用于发送DNS查询的IP地址数组。

domain

数组

附加到主机名的默认域名。例如,如果域名设置为example.com,则对example-host的DNS查找查询将被改写为example-host.example.com

search

数组

在DNS查找查询期间附加到非限定主机名(如example-host)的域名数组。

静态IP地址分配配置示例
{
  "ipam": {
    "type": "static",
      "addresses": [
        {
          "address": "191.168.1.7/24"
        }
      ]
  }
}

动态IP地址(DHCP)分配配置

以下JSON描述了使用DHCP进行动态IP地址分配的配置。

DHCP租约续期

Pod在创建时获取其原始DHCP租约。该租约必须由在集群上运行的最小DHCP服务器部署定期续期。

SR-IOV网络操作符不会创建DHCP服务器部署;集群网络操作符负责创建最小DHCP服务器部署。

要触发DHCP服务器的部署,您必须通过编辑集群网络操作符配置来创建shim网络附件,如下例所示。

示例shim网络附件定义
apiVersion: operator.openshift.io/v1
kind: Network
metadata:
  name: cluster
spec:
  additionalNetworks:
  - name: dhcp-shim
    namespace: default
    type: Raw
    rawCNIConfig: |-
      {
        "name": "dhcp-shim",
        "cniVersion": "0.3.1",
        "type": "bridge",
        "ipam": {
          "type": "dhcp"
        }
      }
  # ...
表5. ipam DHCP配置对象
字段 类型 描述

type

字符串

IPAM地址类型。需要值为dhcp

动态IP地址(DHCP)分配配置示例
{
  "ipam": {
    "type": "dhcp"
  }
}

使用Whereabouts进行动态IP地址分配配置

Whereabouts CNI插件允许在不使用DHCP服务器的情况下将IP地址动态分配给附加网络。

Whereabouts CNI插件还支持重叠的IP地址范围,以及在单独的NetworkAttachmentDefinition CRD中多次配置相同的CIDR范围。这在多租户环境中提供了更大的灵活性和管理能力。

动态IP地址配置对象

下表描述了使用Whereabouts进行动态IP地址分配的配置对象。

表6. ipam whereabouts配置对象
字段 类型 描述

type

字符串

IPAM地址类型。需要值为whereabouts

range

字符串

CIDR表示法的IP地址和范围。IP地址从此地址范围内分配。

exclude

数组

可选:零个或多个CIDR表示法的IP地址和范围列表。不分配排除的地址范围内的IP地址。

network_name

字符串

可选:有助于确保每个Pod组或域获得自己的IP地址集,即使它们共享相同的IP地址范围。设置此字段对于保持网络分离和组织非常重要,尤其是在多租户环境中。

使用Whereabouts的动态IP地址分配配置

以下示例显示了使用Whereabouts的动态地址分配配置。

Whereabouts动态IP地址分配
{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/27",
    "exclude": [
       "192.0.2.192/30",
       "192.0.2.196/32"
    ]
  }
}
使用Whereabouts和重叠IP地址范围的动态IP地址分配

以下示例显示了使用重叠IP地址范围进行多租户网络的动态IP地址分配。

NetworkAttachmentDefinition 1
{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/29",
    "network_name": "example_net_common", (1)
  }
}
1 可选。如果设置,必须与NetworkAttachmentDefinition 2network_name匹配。
NetworkAttachmentDefinition 2
{
  "ipam": {
    "type": "whereabouts",
    "range": "192.0.2.192/24",
    "network_name": "example_net_common", (1)
  }
}
1 可选。如果设置,必须与NetworkAttachmentDefinition 1network_name匹配。

创建动态分配双栈IP地址的配置

可以使用ipRanges参数为以下配置双栈IP地址分配:

  • IPv4地址

  • IPv6地址

  • 多个IP地址分配

步骤
  1. type设置为whereabouts

  2. 使用ipRanges分配IP地址,如下例所示。

    cniVersion: operator.openshift.io/v1
    kind: Network
    =metadata:
      name: cluster
    spec:
      additionalNetworks:
      - name: whereabouts-shim
        namespace: default
        type: Raw
        rawCNIConfig: |-
          {
           "name": "whereabouts-dual-stack",
           "cniVersion": "0.3.1,
           "type": "bridge",
           "ipam": {
             "type": "whereabouts",
             "ipRanges": [
                      {"range": "192.168.10.0/24"},
                      {"range": "2001:db8::/64"}
                  ]
           }
          }
  3. 将网络附加到Pod。有关更多信息,请参见“将Pod添加到附加网络”。

  4. 验证是否已分配所有IP地址。

  5. 运行以下命令以确保IP地址已作为元数据分配。

    $ oc exec -it mypod -- ip a

配置SR-IOV附加网络

您可以通过创建SriovNetwork对象来配置使用SR-IOV硬件的附加网络。创建SriovNetwork对象后,SR-IOV网络操作符会自动创建一个NetworkAttachmentDefinition对象。

如果SriovNetwork对象已附加到任何处于运行状态的Pod,请勿修改或删除该对象。

先决条件
  • 安装OpenShift CLI(oc)。

  • 以具有cluster-admin权限的用户身份登录。

步骤
  1. 创建一个SriovNetwork对象,然后将YAML保存到<name>.yaml文件中,其中<name>是此附加网络的名称。对象规范可能类似于以下示例。

    apiVersion: sriovnetwork.openshift.io/v1
    kind: SriovNetwork
    metadata:
      name: attach1
      namespace: openshift-sriov-network-operator
    spec:
      resourceName: net1
      networkNamespace: project2
      ipam: |-
        {
          "type": "host-local",
          "subnet": "10.56.217.0/24",
          "rangeStart": "10.56.217.171",
          "rangeEnd": "10.56.217.181",
          "gateway": "10.56.217.1"
        }
  2. 要创建该对象,请输入以下命令:

    $ oc create -f <name>.yaml

    其中<name>指定附加网络的名称。

  3. 可选:要确认与您在上一步中创建的SriovNetwork对象关联的NetworkAttachmentDefinition对象是否存在,请输入以下命令。将<namespace>替换为您在SriovNetwork对象中指定的networkNamespace。

    $ oc get net-attach-def -n <namespace>